MesServiceImpl.java 7.71 KB
package com.huaheng.api.mes.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.Receipt;
import com.huaheng.api.mes.domain.MesOrder;
import com.huaheng.api.mes.domain.MesReceipt;
import com.huaheng.api.mes.domain.MesShipmentProduct;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.task.taskHeader.service.WorkTaskService;
import org.springframework.integration.router.RecipientListRouter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;

/**
 * @author 游杰
 */
@Service
public class MesServiceImpl implements MesService {

    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
    @Resource
    private MaterialService materialService;
    @Resource
    private WorkTaskService workTaskService;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult receiptOrder(MesOrder mesOrder) {
        String orderCode = mesOrder.getOrderNo();
        String materialCode = mesOrder.getMaterialCode();
        String taskNo = mesOrder.getTaskNo();
        BigDecimal orderQty = mesOrder.getOrderQty();

        LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        receiptHeaderLambdaQueryWrapper.eq(ReceiptHeader::getReferCode, orderCode);
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
        if(receiptHeader != null) {
            throw new ServiceException("入库单,工单" + orderCode + ", 已经存在");
        }

        //采购入库单
        String receiptType = "CG";
        String receiptCode = receiptHeaderService.createCode(receiptType);
        receiptHeader = new ReceiptHeader();
        receiptHeader.setCode(receiptCode);
        receiptHeader.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
        receiptHeader.setReceiptType(receiptType);
        receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        receiptHeader.setCreatedBy("MES");
        receiptHeader.setReferCode(orderCode);
        receiptHeader.setUserDef1(taskNo);
        boolean success = receiptHeaderService.save(receiptHeader);
        if(!success) {
            throw new ServiceException("保存入库单失败");
        }
        Material material = materialService.getMaterialByCode(materialCode, QuantityConstant.DEFAULT_WAREHOUSE);
        if(material == null) {
            throw new ServiceException("根据物料编码" + materialCode + " 没有找到对应物料信息");
        }
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setReceiptId(receiptHeader.getId());
        receiptDetail.setReceiptCode(receiptCode);
        receiptDetail.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
        receiptDetail.setQty(orderQty);
        receiptDetail.setMaterialCode(materialCode);
        receiptDetail.setMaterialName(material.getName());
        receiptDetail.setMaterialSpec(material.getSpec());
        receiptDetail.setMaterialUnit(material.getUnit());
        receiptDetail.setCreatedBy("MES");
        success = receiptDetailService.save(receiptDetail);
        if(!success) {
            throw new ServiceException("保存入库单失败");
        }
        return AjaxResult.success("创建入库单成功");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult shipmentOrder(MesOrder mesOrder) {
        String orderCode = mesOrder.getOrderNo();
        String materialCode = mesOrder.getMaterialCode();
        String taskNo = mesOrder.getTaskNo();
        BigDecimal orderQty = mesOrder.getOrderQty();

        LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getReferCode, orderCode);
        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderLambdaQueryWrapper);
        if(shipmentHeader != null) {
            throw new ServiceException("出库单,工单" + orderCode + ", 已经存在");
        }

        //生产出库单
        String shipmentType = "OTF";
        String shipmentCode = shipmentHeaderService.createCode(shipmentType);
        shipmentHeader = new ShipmentHeader();
        shipmentHeader.setCode(shipmentCode);
        shipmentHeader.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
        shipmentHeader.setShipmentType(shipmentType);
        shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        shipmentHeader.setCreatedBy("MES");
        shipmentHeader.setReferCode(orderCode);
        shipmentHeader.setUserDef1(taskNo);
        boolean success = shipmentHeaderService.save(shipmentHeader);
        if(!success) {
            throw new ServiceException("保存出库单失败");
        }
        Material material = materialService.getMaterialByCode(materialCode, QuantityConstant.DEFAULT_WAREHOUSE);
        if(material == null) {
            throw new ServiceException("根据物料编码" + materialCode + " 没有找到对应物料信息");
        }

        ShipmentDetail shipmentDetail = new ShipmentDetail();
        shipmentDetail.setShipmentId(shipmentHeader.getId());
        shipmentDetail.setShipmentCode(shipmentCode);
        shipmentDetail.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
        shipmentDetail.setQty(orderQty);
        shipmentDetail.setMaterialCode(materialCode);
        shipmentDetail.setMaterialName(material.getName());
        shipmentDetail.setMaterialSpec(material.getSpec());
        shipmentDetail.setMaterialUnit(material.getUnit());
        shipmentDetail.setCreatedBy("MES");
        success = shipmentDetailService.save(shipmentDetail);
        if(!success) {
            throw new ServiceException("保存出库单失败");
        }
        return AjaxResult.success("创建出库单成功");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult shipmentProduct(MesShipmentProduct mesShipmentProduct) {
        String taskNo = mesShipmentProduct.getTaskNo();
        String containerCode = mesShipmentProduct.getContainerCode();
        String fromPort = mesShipmentProduct.getFromPort();
        String toPort = mesShipmentProduct.getToPort();

        AjaxResult ajaxResult = workTaskService.createOverStation(containerCode, fromPort, toPort, taskNo);
        return ajaxResult;
    }

    @Override
    public AjaxResult receipt(MesReceipt mesReceipt) {

        return null;
    }


}