MesController.java 8.55 KB
package com.huaheng.api.mes.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.mes.domain.*;
import com.huaheng.api.mes.service.SearchInventoryService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptDetailHistory.domain.ReceiptDetailHistory;
import com.huaheng.pc.receipt.receiptDetailHistory.service.ReceiptDetailHistoryService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.mapper.ReceiptHeaderMapper;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory;
import com.huaheng.pc.receipt.receiptHeaderHistory.service.ReceiptHeaderHistoryService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentDetailHistory.domain.ShipmentDetailHistory;
import com.huaheng.pc.shipment.shipmentDetailHistory.service.ShipmentDetailHistoryService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.mapper.ShipmentHeaderMapper;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.shipment.shipmentHeaderHistory.domain.ShipmentHeaderHistory;
import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@RestController
@RequestMapping("/api/mes/v2")
public class MesController extends BaseController {

    @Resource
    private SearchInventoryService searchInventoryService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptHeaderHistoryService receiptheaderhistoryService;
    @Resource
    private ReceiptDetailHistoryService receiptDetailHistoryService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderMapper receiptHeaderMapper;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
    @Resource
    private ShipmentHeaderMapper shipmentHeaderMapper;
    @Resource
    private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
    @Resource
    private ShipmentDetailHistoryService shipmentDetailHistoryService;

    /**
     * 查询库存
     */
    @PostMapping("/searchInventory")
    @ResponseBody
    public AjaxResult searchInventory(@RequestBody SearchInventoryDomain domain) {
        List<SearchInventoryVo> vo = searchInventoryService.searchInventory(domain.getMaterialCode(),domain.getMaterialName());
        return AjaxResult.success(vo);
    }

    /**
     * 入库单
     */
    @PostMapping("/receipt")
    @ResponseBody
    public AjaxResult receipt(@RequestBody ReceiptDomain domain) {

        return AjaxResult.success();
    }

    /**
     * 出库单
     */
    @PostMapping("/shipment")
    @ResponseBody
    public AjaxResult shipment(@RequestBody ShipmentDomain domain) {

        return AjaxResult.success();
    }

    /**
     * 单据取消
     */
    @PostMapping("/cancelOrder")
    @ResponseBody
    public AjaxResult cancelOrder(@RequestBody CancelOrderDomain domain) {
        if ("receipt".equals(domain.getOrderType())){
            ReceiptHeader receiptHeader = receiptHeaderMapper.getByOrderHeader(domain.getOrderHeader());
            if (receiptHeader == null) {
                return AjaxResult.error("没有找到单据" + domain.getOrderHeader());
            }
            if(!Objects.equals(receiptHeader.getFirstStatus(), QuantityConstant.RECEIPT_HEADER_BUILD)) {
                return AjaxResult.error("非新建单据不能取消");
            }
            LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
            List<ReceiptDetail> list = receiptDetailService.list(lambdaQueryWrapper);
            List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>();
            if (!receiptHeaderService.removeById(receiptHeader)) {
                throw new ServiceException("删除头表失败");
            }
            List<Integer> receiptDetailIds = new ArrayList<>();
            ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory();
            BeanUtils.copyProperties(receiptHeader, receiptHeaderHistory);
            if (!receiptheaderhistoryService.save(receiptHeaderHistory)) {
                throw new ServiceException("新增历史头表失败");
            }
            for (ReceiptDetail receiptDetail: list) {
                receiptDetailIds.add(receiptDetail.getId());
                ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory();
                BeanUtils.copyProperties(receiptDetail, receiptDetailHistory);
                receiptDetailHistory.setReceiptId(receiptHeaderHistory.getId());
                receiptDetailHistoryList.add(receiptDetailHistory);
            }
            if(receiptDetailIds.size() > 0) {
                if (!receiptDetailService.removeByIds(receiptDetailIds)) {
                    throw new ServiceException("删除明细表失败");
                }
            }
            if(receiptDetailHistoryList.size() > 0) {
                if (!receiptDetailHistoryService.saveBatch(receiptDetailHistoryList)) {
                    throw new ServiceException("新增历史入库明细失败");
                }
            }
        }else if ("shipment".equals(domain.getOrderType())){
            ShipmentHeader shipmentHeader = shipmentHeaderMapper.getByOrderHeader(domain.getOrderHeader());
            if (shipmentHeader == null){
                return AjaxResult.error("没有找到单据" + domain.getOrderHeader());
            }
            if(!Objects.equals(shipmentHeader.getFirstStatus(), QuantityConstant.RECEIPT_HEADER_BUILD)) {
                return AjaxResult.error("非新建单据不能取消");
            }
            LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(ShipmentDetail::getShipmentId, shipmentHeader.getId());
            List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper);
            List<ShipmentDetailHistory> shipmentDetailHistories = new ArrayList<>();
            List<Integer> shipmentDetailIds = new ArrayList<>();

            if (!shipmentHeaderService.removeById(shipmentHeader)) {
                throw new ServiceException("删除头表失败");
            }

            ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory();
            BeanUtils.copyProperties(shipmentHeader, shipmentHeaderHistory);

            if (!shipmentHeaderHistoryService.save(shipmentHeaderHistory)) {
                throw new ServiceException("新增历史头表失败");
            }
            for (ShipmentDetail shipmentDetail : list) {
                shipmentDetailIds.add(shipmentDetail.getId());
                ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory();
                BeanUtils.copyProperties(shipmentDetail, shipmentDetailHistory);
                shipmentDetailHistory.setShipmentId(shipmentHeaderHistory.getId());
                shipmentDetailHistories.add(shipmentDetailHistory);
            }
            if(shipmentDetailIds.size() > 0) {
                if (!shipmentDetailService.removeByIds(shipmentDetailIds)) {
                    throw new ServiceException("删除明细表失败");
                }
            }
            if(shipmentDetailHistories.size() > 0) {
                if (!shipmentDetailHistoryService.saveBatch(shipmentDetailHistories)) {
                    throw new ServiceException("新增历史出库明细失败");
                }
            }
        }else {
            return AjaxResult.error("没有找到此类型的单据" + domain.getOrderType());
        }
        return AjaxResult.success("取消成功");
    }
}