MesServiceImpl.java 10.1 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.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.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderForShipmentService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
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.Date;
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;
    @Resource
    private InventoryHeaderForShipmentService inventoryHeaderForShipmentService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private InventoryDetailService inventoryDetailService;

    @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("BHF");
        receiptHeader.setWarehouseCode(warehouseCode);
        receiptHeader.setCreatedBy("MES");
        receiptHeader.setLastUpdatedBy("MES");
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setWarehouseCode(warehouseCode);
        receiptDetail.setMaterialCode(materialCode);
        receiptDetail.setCompanyCode("BHF");
        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.setTaskType(300);
        agvTask.setFromPort(fromPort);
        agvTask.setToPort(toPort);
        agvTask.setWarehouseCode("CS0001");
        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 toPort = mesDomain.getPort();

        if (StringUtils.isEmpty(materialCode)){
            return AjaxResult.error("物料信息不能为空");
        }
        if (StringUtils.isEmpty(toPort)){
            return AjaxResult.error("站台不能为空");
        }
        if(materialCode.equals("dx")&&toPort.equals("P1005")){
            return AjaxResult.error("P1005站台不能放导线桶");
        }
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper= Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode,materialCode)
                .last("ORDER BY  id asc limit 1");
        InventoryDetail one = inventoryDetailService.getOne(inventoryDetailLambdaQueryWrapper);
        if (one==null){
            return AjaxResult.error("库内没有该物料信息");
        }
        LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper =Wrappers.lambdaQuery();
        inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getId,one.getInventoryHeaderId());
        InventoryHeader one1 = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper);
        if (one1==null){
            return AjaxResult.error("库内没有该物料信息");
        }
        String inventoryHeaderId = one1.getId().toString();
        inventoryHeaderForShipmentService.shipmentContainer(inventoryHeaderId, toPort);
        return AjaxResult.success("生成出库任务成功");

//        ShipmentHeader shipmentHeader = new ShipmentHeader();
//        shipmentHeader.setShipmentType("PR");
//        ShipmentDetail shipmentDetail = new ShipmentDetail();
//        shipmentDetail.setMaterialCode(materialCode);
//        shipmentHeader.setWarehouseCode("CS0001");
//        shipmentDetail.setWarehouseCode("CS0001");
//        shipmentHeader.setCompanyCode("BHF");
//        shipmentDetail.setCompanyCode("BHF");
//        shipmentDetail.setCreated(new Date());
//        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.getMsg();
//        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("生成出库任务成功");
    }
}