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


import com.huaheng.api.general.domain.ReceiptDomain;
import com.huaheng.api.general.domain.ShipmentDomain;
import com.huaheng.api.general.service.ReceiptApiService;
import com.huaheng.api.general.service.ShipmentApiService;
import com.huaheng.api.mes.domain.MesDomain;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.Result;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.AgvTaskService;
import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.ReceiptTaskService;
import com.huaheng.pc.task.taskHeader.service.ShipmentTaskService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Service
public class MesServiceImpl implements MesService {

    @Resource
    private ContainerService containerService;
    @Resource
    private ReceiptApiService receiptApiService;
    @Resource
    private ShipmentApiService shipmentApiService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptTaskService receiptTaskService;
    @Resource
    private ShipmentTaskService shipmentTaskService;
    @Resource
    private AgvTaskService agvTaskService;
    @Resource
    private ShipmentContainerHeaderService shipmentContainerHeaderService;

    @Override
    @Transactional
    public AjaxResult receipt(MesDomain mesDomain) {
        String referCode = String.valueOf(System.currentTimeMillis());
        String containerCode = mesDomain.getContainerCode();
        String materialCode = mesDomain.getMaterialCode();
        String warehouseCode = "CS0001";
        String fromPort = mesDomain.getPort();
        String toPort = "P1002";
        if (StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("MES下发入库信息,容器编码为空");
        }
        if (StringUtils.isEmpty(materialCode)) {
            return AjaxResult.error("MES下发入库信息,物料编码为空");
        }
        if (StringUtils.isEmpty(warehouseCode)) {
            return AjaxResult.error("MES下发入库信息,仓库编码为空");
        }
        Container container = containerService.getContainerByCode(containerCode, warehouseCode);
        if (container == null) {
            return AjaxResult.error("MES下发入库信息,没有找到容器");
        }
        ReceiptHeader receiptHeader = new ReceiptHeader();
        receiptHeader.setReceiptType("CG");
        receiptHeader.setCompanyCode("JY");
        receiptHeader.setWarehouseCode(warehouseCode);
        receiptHeader.setCreatedBy("MES");
        receiptHeader.setLastUpdatedBy("MES");
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setWarehouseCode(warehouseCode);
        receiptDetail.setMaterialCode(materialCode);
        receiptDetail.setCompanyCode("JY");
        receiptDetail.setCreatedBy("MES");
        receiptDetail.setLastUpdatedBy("MES");
        receiptDetail.setQty(new BigDecimal(1));
        List<ReceiptDetail> receiptDetailList = new ArrayList<>();
        receiptDetailList.add(receiptDetail);
        ReceiptDomain receiptDomain = new ReceiptDomain();
        receiptDomain.setReceiptHeader(receiptHeader);
        receiptDomain.setReceiptDetails(receiptDetailList);
        AjaxResult ajaxResult =  receiptApiService.receipt(receiptDomain);
        receiptDomain = (ReceiptDomain) ajaxResult.getData();
        receiptHeader = receiptDomain.getReceiptHeader();
        receiptDetailList = receiptDomain.getReceiptDetails();
        int receiptDetailId = receiptDetailList.get(0).getId();
        ajaxResult =  receiptContainerHeaderService.saveContainer(receiptHeader.getCode(), containerCode,
                receiptDetailId, null, new BigDecimal(1), null);
        if (ajaxResult.hasErr()) {
            throw new ServiceException(ajaxResult.getMsg());
        }
        int receiptContainerHeaderId = (int)ajaxResult.getData();
        List<Integer> ids = new ArrayList<>();
        ids.add(receiptContainerHeaderId);
        ajaxResult = receiptTaskService.createReceiptTask(ids);
        if (ajaxResult.hasErr()) {
            throw new ServiceException(ajaxResult.getMsg());
        }
        AgvTask agvTask = new AgvTask();
        agvTask.setContainerCode(containerCode);
        agvTask.setFromPort(fromPort);
        agvTask.setToPort(toPort);
        agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD);
        boolean result = agvTaskService.save(agvTask);
        if(!result) {
            throw new ServiceException("生成AGV任务失败");
        }
        return AjaxResult.success("生成入库任务成功");
    }

    @Override
    @Transactional
    public AjaxResult shipment(MesDomain mesDomain) {
        String referCode = String.valueOf(System.currentTimeMillis());
        String materialCode = mesDomain.getMaterialCode();
        String warehouseCode = "CS0001";
        String fromPort = "P1001";
        String toPort = mesDomain.getPort();

        ShipmentHeader shipmentHeader = new ShipmentHeader();
        shipmentHeader.setShipmentType("PR");
        ShipmentDetail shipmentDetail = new ShipmentDetail();
        shipmentDetail.setMaterialCode(materialCode);
        shipmentDetail.setQty(new BigDecimal(1));
        List<ShipmentDetail> shipmentDetailList = new ArrayList<>();
        shipmentDetailList.add(shipmentDetail);
        ShipmentDomain shipmentDomain = new ShipmentDomain();
        shipmentDomain.setShipmentHeader(shipmentHeader);
        shipmentDomain.setShipmentDetails(shipmentDetailList);
        AjaxResult ajaxResult =  shipmentApiService.shipment(shipmentDomain);
        String shipmentCode = (String)ajaxResult.getData();
        ajaxResult =  shipmentContainerHeaderService.autoCombination(shipmentCode);
        if (ajaxResult.hasErr()) {
            throw new ServiceException(ajaxResult.getMsg());
        }

        int shipmentContainerHeaderId = (int)ajaxResult.getData();
//        List<Integer> ids = new ArrayList<>();
//        ids.add(shipmentContainerHeaderId);
        ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel();
        shipmentTask.setShipmentContainerHeaderIds(shipmentContainerHeaderId);
        ajaxResult = shipmentTaskService.createTaskFromShipmentContainers(shipmentTask);
        if (ajaxResult.hasErr()) {
            throw new ServiceException(ajaxResult.getMsg());
        }

        return AjaxResult.success("生成出库任务成功");
    }
}