TaskServiceImpl.java 15.4 KB
package com.huaheng.api.general.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.TaskDomain;
import com.huaheng.api.general.domain.TaskOffDomain;
import com.huaheng.api.wcs.service.taskCancel.TaskCancelService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.service.ConfigService;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
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.shipmentContainerHeader.domain.ShipmentCombinationModel;
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.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.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 com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;
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.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class TaskServiceImpl implements TaskService {


    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ConfigService configService;
    @Resource
    private TaskCancelService taskCancelService;
//    @Resource
//    private ShipmentContainerHeader shipmentContainerHeader;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptTaskService receiptTaskService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
    @Resource
    private ShipmentContainerHeaderService shipmentContainerHeaderService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private ContainerService containerService;
    @Resource
    private LocationService locationService;
    @Resource
    private ShipmentTaskService shipmentTaskService;


    @Override
    @Transactional
    public AjaxResult taskOff(TaskOffDomain taskDomain) {
        LambdaQueryWrapper<TaskHeader> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(TaskHeader::getUserDef2,taskDomain.getTaskNo()).eq(TaskHeader::getContainerCode,taskDomain.getContainerCode());
        TaskHeader taskHeader=taskHeaderService.getOne(wrapper);

        if (taskHeader==null)
        {
            return AjaxResult.error("任务不存在");
        }

        String value = configService.getKey(QuantityConstant.RULE_CONNECT_WCS);
        int connectWCS = Integer.parseInt(value);
        if(connectWCS == QuantityConstant.RULE_WCS_CONNECT) {
            Integer[] idList = Convert.toIntArray(""+taskHeader.getId());
            for (int id : idList) {
                if(taskHeader.getStatus().intValue()  <= QuantityConstant.TASK_STATUS_BUILD) {
                    continue;
                }
                AjaxResult ajaxResult = taskCancelService.TaskCance(id);
                if (ajaxResult.hasErr()) {
                    return ajaxResult;
                }
            }
        }
        return taskHeaderService.cancelTask(Convert.toIntArray(""+taskHeader.getId()));
    }

    @Override
    public AjaxResult lssueTask(TaskDomain taskDomain) {

        if (taskDomain == null) {
            throw new ServiceException("wms下发任务为空");
        }
        //1、判断必填字段是否满足
        if (taskDomain.getReqID() == null) {
            throw new ServiceException("wms任务号Id为空");
        }
        if (taskDomain.getTaskType() == null) {
            throw new ServiceException("wms任务类型为空");
        }

        for (int i=0;i<taskDomain.getPalletInfoList().size();i++)
        {

        ShipmentHeader shipmentHeader=new ShipmentHeader();
        shipmentHeader.setCompanyCode("SANY");
        shipmentHeader.setShipmentType("OTF");
        shipmentHeader.setReferCode("");
        shipmentHeader.setReferPlatform("");
        shipmentHeaderService.saveHeader(shipmentHeader);

        if (taskDomain.getPalletInfoList().get(i).getInventoryList()==null||taskDomain.getPalletInfoList().get(i).getInventoryList().size()<=0)
        {
            LambdaQueryWrapper<Container> wrapper = Wrappers.lambdaQuery();
            wrapper.eq(Container::getCode,taskDomain.getPalletInfoList().get(i).getContainerCode())
            .eq(Container::getStatus,"empty");
            Container one = containerService.getOne(wrapper);

            if (one==null)
            {
                return AjaxResult.error("没有子物料,没有对应空托盘");
            }

            LambdaQueryWrapper<Location> wrapper1 = Wrappers.lambdaQuery();
            wrapper1.eq(Location::getCode,one.getLocationCode());
            Location one1 = locationService.getOne(wrapper1);

            AjaxResult out = inventoryHeaderService.createEmptyOut(one.getCode(), one1.getCode(), "P3046");
            Integer taskheader = (Integer) out.getData();

            TaskHeader byId = taskHeaderService.getById(taskheader);
            byId.setUserDef1(taskDomain.getReqID());
            byId.setUserDef2(taskDomain.getPalletInfoList().get(i).getTaskNo());
            taskHeaderService.updateById(byId);

            return AjaxResult.error("1",new Date());
        }

        for (int j=0;j<taskDomain.getPalletInfoList().get(i).getInventoryList().size();j++)
        {
        ShipmentDetail shipmentDetail=new ShipmentDetail();
        shipmentDetail.setShipmentId(shipmentHeader.getId());
        shipmentDetail.setCompanyCode("SANY");
        shipmentDetail.setShipmentCode(shipmentHeader.getCode());
        shipmentDetail.setMaterialCode(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getMaterialCode());
        BigDecimal nu = new BigDecimal(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getQuantity());
        shipmentDetail.setShipQty(nu);
        shipmentDetail.setInventorySts("good");
        shipmentDetailService.insertDetail(shipmentDetail);


        ShipmentCombinationModel shipmentCombinationModel=new ShipmentCombinationModel();
        shipmentCombinationModel.setTaskType(0);
        shipmentCombinationModel.setShipQty(nu);
        shipmentCombinationModel.setShipmentDetailId(shipmentDetail.getId());

        LambdaQueryWrapper<InventoryDetail> wrapper = Wrappers.lambdaQuery();
            wrapper.eq(InventoryDetail::getContainerCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode())
            .eq(InventoryDetail::getMaterialCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getMaterialCode())
            .ge(InventoryDetail::getQty,nu);
            InventoryDetail one = inventoryDetailService.getOne(wrapper);
            shipmentCombinationModel.setInventoryDetailId(one.getId());
        ShipmentContainerHeader shipmentContainerHeader= shipmentContainerHeaderService.combination(shipmentCombinationModel);
        ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel();
        shipmentTask.setShipmentContainerHeaderIds(shipmentContainerHeader.getId());
        shipmentContainerHeader.getId();


            LambdaQueryWrapper<ShipmentContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
            receiptContainerHeaderLambdaQueryWrapper.eq(ShipmentContainerHeader::getStatus,0).eq(ShipmentContainerHeader::getContainerCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode());
            ShipmentContainerHeader one1 = shipmentContainerHeaderService.getOne(receiptContainerHeaderLambdaQueryWrapper);
            String ids=""+one1.getId();

            List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
            List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
            for(Integer id : idsList) {
                LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
                shipmentContainerHeaderLambdaQueryWrapper.eq(ShipmentContainerHeader::getId, id);
                ShipmentContainerHeader shipmentContainerHeader1 = shipmentContainerHeaderService.getOne(shipmentContainerHeaderLambdaQueryWrapper);
                shipmentContainerHeader1.setPort("P3046");
                shipmentContainerHeaderService.update(shipmentContainerHeader1, shipmentContainerHeaderLambdaQueryWrapper);
            }


            AjaxResult ajaxResult = new AjaxResult();
            List<Integer> idList1 = Arrays.asList(Convert.toIntArray(ids));
            for (Integer id : idList1) {
                //获取表头
                ShipmentContainerHeader shipmentContainerHeader1 = shipmentContainerHeaderService.getById(id);
                if(shipmentContainerHeader == null) {
                    return AjaxResult.error("出库货箱id:" + id + "未找到,操作中止");
                }
                if(shipmentContainerHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE){
                    return AjaxResult.error("出库货箱编码(" + shipmentContainerHeader1.getContainerCode() + ")已经生成任务,请不要重复生成,操作中止");
                }
            }

            for (Integer id : idList) {
                shipmentTask.setShipmentContainerHeaderIds(id);
                AjaxResult ajaxResult1 = shipmentTaskService.createTaskFromShipmentContainers(shipmentTask);
                if (ajaxResult1.hasErr()) {
                    return ajaxResult1;
                }
                Integer integer = (Integer) ajaxResult1.getData();
                TaskHeader byId = taskHeaderService.getById(integer);
                byId.setUserDef1(taskDomain.getReqID());
                byId.setUserDef2(taskDomain.getPalletInfoList().get(i).getTaskNo());
                taskHeaderService.updateById(byId);
            }

        }

        }


//              taskHeaderService.sendTaskToWcs(new Integer[]{taskHeader.getId()});

        return AjaxResult.error("1");

    }

    @Override
    @Transactional
    public AjaxResult taskAllreceipt(TaskDomain taskDomain) {
        for (int i=0;i<taskDomain.getPalletInfoList().size();i++){
        ReceiptHeader receiptHeader=new ReceiptHeader();
        receiptHeader.setCompanyCode("SANY");
        receiptHeader.setReceiptType("CG");
        receiptHeader.setUserDef1(taskDomain.getReqID());
        receiptHeader.setUserDef2(taskDomain.getPalletInfoList().get(i).getTaskNo());
        receiptHeaderService.saveReceiptHeader(receiptHeader);
        for (int j=0;j<taskDomain.getPalletInfoList().get(i).getInventoryList().size();j++) {
        ReceiptDetail receiptDetail=new ReceiptDetail();
        receiptDetail.setReceiptId(receiptHeader.getId());
        receiptDetail.setCompanyCode("SANY");
        receiptDetail.setReceiptCode(receiptHeader.getCode());
        receiptDetail.setMaterialCode(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getMaterialCode());
        receiptDetail.setQcCheck("1");
        BigDecimal nu = new BigDecimal(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getQuantity());
        receiptDetail.setTotalQty(nu);
        receiptDetail.setInventorySts("good");
        receiptDetailService.saveReceiptDetaial(receiptDetail);
        AjaxResult result = receiptContainerHeaderService.saveContainer(receiptHeader.getCode(), taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode(), receiptDetail.getId(),
                    "", nu, "");
        LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        receiptContainerHeaderLambdaQueryWrapper.eq(ReceiptContainerHeader::getContainerCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode()).eq(ReceiptContainerHeader::getStatus,0);
            ReceiptContainerHeader one = receiptContainerHeaderService.getOne(receiptContainerHeaderLambdaQueryWrapper);

            List<Integer> idList = Arrays.asList(Convert.toIntArray(""+one.getId()));
            List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
            AjaxResult receiptTask = receiptTaskService.createReceiptTask(idsList);
            List<String> ids = (List<String>) receiptTask.getData();
            List<Integer> integerList = new ArrayList<>();
            CollectionUtils.collect(ids, new Transformer() {
                @Override
                public Object transform(Object o) {
                    return Integer.parseInt(o.toString());
                }
            }, integerList);
            TaskHeader byId = taskHeaderService.getById(integerList.toArray(new Integer[0])[0]);
            byId.setUserDef1(taskDomain.getReqID());
            byId.setUserDef2(taskDomain.getPalletInfoList().get(i).getTaskNo());
            taskHeaderService.updateById(byId);
//            taskHeaderService.sendTaskToWcs(integerList.toArray(new Integer[0]));自动执行
        } }


        return AjaxResult.successs("成功",new Date());
    }

    @Override
    @Transactional
    public AjaxResult airflare(TaskDomain taskDomain) {

        for (int i=0;i<taskDomain.getPalletInfoList().size();i++)
        {
            if (taskDomain.getPalletInfoList().get(i).getInventoryList()==null||taskDomain.getPalletInfoList().get(i).getInventoryList().size()<=0)
            {
                return inventoryHeaderService.createEmptyIn(taskDomain.getPalletInfoList().get(i).getContainerCode(), "");
            }
            else {
                throw new ServiceException("空容器怎么能包含物料");
            }
        }
        return AjaxResult.error("1");
    }

}