InStandingTaskServiceImpl.java 6.98 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.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;


    @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()!=500)
        {

        LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery();//获取当前任务子明细
        taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskId, header.getId());
        List<TaskDetail> details = taskDetailService.list(taskDetailLambdaQueryWrapper);

//        if (header.getInternalTaskType() != 200) {
//            throw new ServiceException("当前任务非分拣任务");
//        }

        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("重量不大于空托,请人工检查");
                            }
                        }
                    }
                }

            }
        }catch (Exception e) {
                e.printStackTrace();
                if (inStandingTaskDomain.getWeight() > weight)
                {
                    return AjaxResult.success(1);//回库
                }
                else
                {
                    return AjaxResult.error("重量不大于空托,请人工检查");
                }
            }

        if (inStandingTaskDomain.getWeight() > weight)
        {return AjaxResult.success("重量大于空托");}

        }


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

            if (inStandingTaskDomain.getWeight() > weight)
            {return AjaxResult.success("重量大于空托");}

            //修改自己的任务状态是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;
                    }
                }
            }
            taskHeaderService.cancelTask(Convert.toIntArray(inStandingTaskDomain.getTaskNo()));
        }
        return AjaxResult.success(2);
    }
    //强制完成

}