InStandingTaskServiceImpl.java 7.87 KB
package com.huaheng.api.wcs.service.InStandingTaskHandle;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.ReturnTask;
import com.huaheng.api.general.service.IReturnTaskService;
import com.huaheng.api.general.service.ReturnService;
import com.huaheng.api.wcs.domain.InStandingTaskDomain;
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.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.service.ConfigService;
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.InventoryHeaderService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


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

@Service
public class InStandingTaskServiceImpl implements InStandingTaskService {

    @Resource
    TaskHeaderService taskHeaderService;
    @Resource
    InventoryHeaderService inventoryHeaderService;
    @Resource
    InventoryDetailService inventoryDetailService;
    @Resource
    TaskDetailService taskDetailService;
    @Resource
    private ConfigService configService;
    @Resource
    private TaskCancelService taskCancelService;
    @Resource
    private ReturnService returnService;
    @Resource
    IReturnTaskService returnTaskService;

    @Override
    @Transactional
    public AjaxResult instanding(InStandingTaskDomain inStandingTaskDomain) {

        String value = configService.getKey(QuantityConstant.RULE_PALLET_WEIGHT);
        int weight = Integer.parseInt(value);//从配置表取到重量

        TaskHeader header = taskHeaderService.getById(inStandingTaskDomain.getTaskNo());//获取当前任务头
        if (header == null)
        {
            return AjaxResult.error("任务不存在");
        }
        if ((header.getContainerCode().substring(0,1)).equals("D"))//如果是D
        {
            return AjaxResult.success(1);//回库
        }

    if (header.getTaskType() != QuantityConstant.TASK_TYPE_EMPTYRECEIPT)
    {
        try {
            LambdaQueryWrapper<InventoryHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(InventoryHeader::getLocationCode, header.getToLocation())
                    .eq(InventoryHeader::getContainerCode, header.getContainerCode());
            InventoryHeader one = inventoryHeaderService.getOne(lambdaQueryWrapper);

            LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
            inventoryDetailLambdaQueryWrapper.eq(StringUtils.isNotEmpty(header.getWarehouseCode()),
                    InventoryDetail::getWarehouseCode, header.getWarehouseCode())
                    .eq(StringUtils.isNotEmpty(header.getContainerCode()),
                            InventoryDetail::getContainerCode, header.getContainerCode())
                    .eq(StringUtils.isNotEmpty(header.getToLocation()),
                            InventoryDetail::getLocationCode, header.getToLocation())
                    .eq(StringUtils.isNotEmpty(header.getCompanyCode()),
                            InventoryDetail::getCompanyCode, header.getCompanyCode())
                    .eq(StringUtils.isNotEmpty(header.getZoneCode()),
                            InventoryDetail::getZoneCode, header.getZoneCode())
                    .eq(StringUtils.isNotEmpty("" + one.getId()),
                            InventoryDetail::getInventoryHeaderId, one.getId());
            List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
            if (inventoryDetailList != null && inventoryDetailList.size() > 0) {
                for (InventoryDetail inventoryDetail : inventoryDetailList) {
                    String zoneCode = inventoryDetail.getZoneCode();
                    if (zoneCode.equals("B")) {
                        int taskQty = inventoryDetail.getQty().intValue() - inventoryDetail.getTaskQty().intValue();
                        if (taskQty != 0) {
                            if (inStandingTaskDomain.getWeight() > weight)
                            {
                                return AjaxResult.success(1);//回库
                            } else
                            {
                                return AjaxResult.error(inventoryDetail.getContainerCode()+
                                        "托盘的"+inventoryDetail.getMaterialName()+"物料不应该全部拿完,请人工处理");
                            }
                        }
                    }
                }

            }
        }  catch (Exception e) {
            e.printStackTrace();
            if (inStandingTaskDomain.getWeight() > weight)
            {
                return AjaxResult.success(1);//回库
            }
            else
            {
                return AjaxResult.error(header.getContainerCode()+"这个容器的东西拿多了,请人工检查");
            }
        }

        if (inStandingTaskDomain.getWeight() > weight)
        {
            return AjaxResult.success(header.getContainerCode()+"东西没拿完");
        }
    }

        if (header.getTaskType() == QuantityConstant.TASK_TYPE_EMPTYRECEIPT)
        {
            //取消任务

            if (inStandingTaskDomain.getWeight() > weight)
            {
                return AjaxResult.success(header.getContainerCode()+"东西没拿完");
            }

            //修改自己的任务状态是1
            header.setStatus(1);
            taskHeaderService.updateById(header);

            String value1 = configService.getKey(QuantityConstant.RULE_CONNECT_WCS);
            int connectWCS = Integer.parseInt(value1);
            if(connectWCS == QuantityConstant.RULE_WCS_CONNECT) {
                Integer[] idList = Convert.toIntArray(inStandingTaskDomain.getTaskNo());
                for (int id : idList) {
                    TaskHeader taskHeader = taskHeaderService.getById(id);
                    if(taskHeader.getStatus().intValue()  <= QuantityConstant.TASK_STATUS_BUILD) {
                        continue;
                    }
                    AjaxResult ajaxResult = taskCancelService.TaskCance(id);
                    if (ajaxResult.hasErr()) {
                        return ajaxResult;
                    }
                }
            }

            TaskHeader byId = taskHeaderService.getById(inStandingTaskDomain.getTaskNo());
            int s = returnService.PostBack(byId);//回传任务完成
            if (s == 2)
            {
                ReturnTask returnTaskDomain = new ReturnTask();
                returnTaskDomain.setReqID(byId.getUserDef2());
                returnTaskDomain.setTaskNo(byId.getUserDef3());
                returnTaskDomain.setTaskStatus(2);//1代表开始 出库任务开始
                returnTaskDomain.setSendBack(0);  //0代表没回传
                returnTaskDomain.setFrequency(1);
                returnTaskDomain.setContainerCode(byId.getContainerCode());
                returnTaskService.save(returnTaskDomain);
            }
            //回传完成的
            taskHeaderService.cancelTask(Convert.toIntArray(inStandingTaskDomain.getTaskNo()));
        }
        return AjaxResult.success(2);
    }


}