TaskServiceImpl.java 11.5 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.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.mapper.TaskDetailMapper;
import com.huaheng.pc.task.taskHeader.controller.TaskHeaderController;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper;
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.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class TaskServiceImpl implements TaskService {

    @Resource
    private ContainerService containerService;
    @Resource
    private TaskHeaderMapper taskHeaderMapper;
    @Resource
    private MaterialService materialService;
    @Resource
    private TaskDetailMapper taskDetailMapper;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskHeaderController taskHeaderController;
    @Resource
    private ConfigService configService;
    @Resource
    private TaskCancelService taskCancelService;
    @Resource
    private InventoryDetailService inventoryDetailService;



    @Override
    @Transactional
    public AjaxResult Taskdistribution(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任务类型为空");
        }
        TaskHeader taskHeader = new TaskHeader();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date newTime = null;
        try {
            newTime = format.parse(taskDomain.getRequestTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }

        for (int i=0;i<taskDomain.getPalletInfoList().size();i++)
        {
            if(taskDomain.getPalletInfoList().get(i).getContainerCode() == null){
                throw new ServiceException("wms容器类型为空");
            }
            if (taskDomain.getPalletInfoList().get(i).getInventoryList().size()>0&&taskDomain.getTaskType().equals("500"))
            {
                throw new ServiceException("空托不能包含物料");
            }
            LambdaQueryWrapper<Container> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(Container::getCode,taskDomain.getPalletInfoList().get(i).getContainerCode()).eq(Container::getStatus,"empty");


            Container one = containerService.getOne(lambdaQueryWrapper);

            if (one==null)
            {
                throw new ServiceException("容器已经被使用");
            }

            taskHeader.setCreated(newTime);
            taskHeader.setWarehouseCode("CS0001");
            taskHeader.setInternalTaskType(100);
            taskHeader.setCompanyCode("SANY");
            taskHeader.setTaskType(Integer.valueOf(taskDomain.getTaskType()));
            taskHeader.setContainerCode(taskDomain.getPalletInfoList().get(i).getContainerCode());
            taskHeader.setUserDef1(taskDomain.getReqID());
            taskHeader.setUserDef2(taskDomain.getPalletInfoList().get(i).getTaskNo());
            if (taskHeaderMapper.insert(taskHeader)==1)
            {
                one.setStatus("lock");
                containerService.updateById(one);
            }

            for (int j=0;j<taskDomain.getPalletInfoList().get(i).getInventoryList().size();j++)
            {
                TaskDetail taskDetail =new TaskDetail();
                taskDetail.setContainerCode(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode());
                BigDecimal bd1 = new BigDecimal(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getQuantity());
                taskDetail.setQty(bd1);
                LambdaQueryWrapper<Material> wrapper = Wrappers.lambdaQuery();
                wrapper.eq(Material::getCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getMaterialCode());
                Material material = materialService.getOne(wrapper);
                taskDetail.setMaterialCode(material.getCode());
                taskDetail.setMaterialName(material.getName());
                taskDetail.setTaskId(taskHeader.getId());
                taskDetail.setTaskType(Integer.valueOf(taskDomain.getTaskType()));
                taskDetail.setInternalTaskType(100);
                taskDetail.setCompanyCode("SANY");
                taskDetail.setWarehouseCode("CS0001");
                taskDetailMapper.insert(taskDetail);
            }
        }
//              taskHeaderService.sendTaskToWcs(new Integer[]{taskHeader.getId()});

        return AjaxResult.success("成功");
    }

    @Override
    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);

        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
    @Transactional
    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任务类型为空");
        }
        TaskHeader taskHeader = new TaskHeader();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date newTime = null;
        try {
            newTime = format.parse(taskDomain.getRequestTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }

        for (int i=0;i<taskDomain.getPalletInfoList().size();i++)
        {
            if(taskDomain.getPalletInfoList().get(i).getContainerCode() == null){
                throw new ServiceException("wms容器类型为空");
            }
            if (taskDomain.getPalletInfoList().get(i).getInventoryList().size()>0&&taskDomain.getTaskType().equals("500"))
            {
                throw new ServiceException("空托不能包含物料");
            }
            LambdaQueryWrapper<Container> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(Container::getCode,taskDomain.getPalletInfoList().get(i).getContainerCode()).eq(Container::getStatus,"some");

            Container one = containerService.getOne(lambdaQueryWrapper);

            if (one==null)
            {
                throw new ServiceException("容器不是有货状态");
            }

            taskHeader.setCreated(newTime);
            taskHeader.setWarehouseCode("CS0001");
            taskHeader.setInternalTaskType(200);
            taskHeader.setCompanyCode("SANY");
            taskHeader.setTaskType(Integer.valueOf(taskDomain.getTaskType()));
            taskHeader.setContainerCode(taskDomain.getPalletInfoList().get(i).getContainerCode());
            taskHeader.setUserDef1(taskDomain.getReqID());

            taskHeader.setUserDef2(taskDomain.getPalletInfoList().get(i).getTaskNo());

            for (int j=0;j<taskDomain.getPalletInfoList().get(i).getInventoryList().size();j++)
            {
                LambdaQueryWrapper<InventoryDetail> wrapper1 = Wrappers.lambdaQuery();
                wrapper1.eq(InventoryDetail::getMaterialCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getMaterialCode()).eq(InventoryDetail::getContainerCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode());
                InventoryDetail detail = inventoryDetailService.getOne(wrapper1);
                if (detail==null)
                {
                    throw new ServiceException("库存不存在");
                }
                taskHeader.setFromLocation(detail.getLocationCode());
                taskHeader.setZoneCode(detail.getZoneCode());
                if (taskHeaderMapper.insert(taskHeader)==1)
                {
                    one.setStatus("lock");
                    containerService.updateById(one);
                }
                taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode();
                TaskDetail taskDetail =new TaskDetail();
                taskDetail.setContainerCode(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getContainerCode());
                BigDecimal bd1 = new BigDecimal(taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getQuantity());
                taskDetail.setQty(bd1);
                LambdaQueryWrapper<Material> wrapper = Wrappers.lambdaQuery();
                wrapper.eq(Material::getCode,taskDomain.getPalletInfoList().get(i).getInventoryList().get(j).getMaterialCode());
                Material material = materialService.getOne(wrapper);
                taskDetail.setMaterialCode(material.getCode());
                taskDetail.setMaterialName(material.getName());
                taskDetail.setTaskId(taskHeader.getId());
                taskDetail.setTaskType(Integer.valueOf(taskDomain.getTaskType()));
                taskDetail.setInternalTaskType(200);
                taskDetail.setCompanyCode("SANY");
                taskDetail.setWarehouseCode("CS0001");
                taskDetailMapper.insert(taskDetail);
            }
        }
//              taskHeaderService.sendTaskToWcs(new Integer[]{taskHeader.getId()});

        return AjaxResult.success("成功");

    }

}