自动化立体仓库 - WCS系统
1
ZY
2025-03-29 9b3ef339f87a7eb82c3322c5ec4549ebeb1221ac
src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -1,19 +1,22 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.StaDesc;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.StaDescService;
import com.zy.asrs.service.TaskWrkService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.utils.CommandUtils;
import com.zy.asrs.service.ToWmsService;
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.CrnTaskModeType;
import com.zy.core.enums.SlaveType;
@@ -24,6 +27,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@@ -35,8 +39,17 @@
    @Autowired
    private CommonService commonService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private ToWmsService toWmsService;
    @Override
    public TaskWrk selectByTaskNo(String taskNo) {
@@ -46,6 +59,11 @@
    @Override
    public TaskWrk selectByStartPoint(String taskNo) {
        return this.baseMapper.selectByStartPoint(taskNo);
    }
    @Override
    public TaskWrk selectByBarcode(String barcode) {
        return this.baseMapper.selectByBarcode(barcode);
    }
    @Override
@@ -59,7 +77,7 @@
    }
    @Override
    @Transactional
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void distribute(String taskNo, Long userId) {
        TaskWrk taskWrk = this.selectByTaskNo(taskNo);
        if (taskWrk == null) {
@@ -77,7 +95,7 @@
                throw new CoolException("未接收到起点和终点,不进行派发");
            }
            startup(taskWrk, userId);
        }else if(taskWrk.getIoType() == 2){
        } else if (taskWrk.getIoType() == 2) {
            //2.出库
            stockOut(taskWrk, userId);
        } else if (taskWrk.getIoType() == 3) {
@@ -88,8 +106,9 @@
    @Override
    public void startup(TaskWrk taskWrk, Long userId) {
        //入库任务派发
        StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getStartPoint()));
        StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getStartPoint()), taskWrk.getCrnNo());
        if (staDesc == null) {
            throw new CoolException("入库路径不存在");
        }
@@ -97,11 +116,11 @@
        taskWrk.setWrkNo(workNo);//工作号
        taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态
        taskWrk.setAssignTime(new Date());//派发时间
        taskWrk.setWrkSts(2);//工作状态 2.设备上走
        taskWrk.setWrkSts(3);//工作状态 2.吊车入库
        taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号
        taskWrk.setModiTime(new Date());
        taskWrk.setModiUser(userId);
        updateById(taskWrk);
        super.updateById(taskWrk);
        CrnSlave.CrnStn crnStn = Utils.getCrnStnByStaNo(staDesc.getCrnStn(), true);
        if (crnStn == null) {
@@ -113,23 +132,25 @@
        crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
        crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 源库位列
        crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 源库位层
        crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 源库位排
        crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
        crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
        crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
        crnCommand.setCommand((short)1);
        if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
        crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位列
        crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位层
        crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位排
        crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位列
        crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位层
        crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位排
        crnCommand.setCommand((short) 1);
        if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) {
            log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
            throw new CoolException("堆垛机命令生成失败");
        } else {
            toWmsService.addReportLog(taskWrk);
        }
    }
    @Override
    public void stockOut(TaskWrk taskWrk, Long userId) {
        //出库任务派发
        StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getTargetPoint()));
        StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getTargetPoint()), taskWrk.getCrnNo());
        if (staDesc == null) {
            return;//不存在路径
        }
@@ -137,11 +158,11 @@
        taskWrk.setWrkNo(workNo);//工作号
        taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态
        taskWrk.setAssignTime(new Date());//派发时间
        taskWrk.setWrkSts(11);//工作状态 11.生成出库ID
        taskWrk.setWrkSts(12);//工作状态 12.吊车入库中
        taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号
        taskWrk.setModiTime(new Date());
        taskWrk.setModiUser(userId);
        updateById(taskWrk);
        super.updateById(taskWrk);
        CrnSlave.CrnStn crnStn = Utils.getCrnStnByStaNo(staDesc.getCrnStn(), false);
        if (crnStn == null) {
@@ -159,8 +180,8 @@
        crnCommand.setDestinationPosX(crnStn.getBay().shortValue());     // 目标库位排
        crnCommand.setDestinationPosY(crnStn.getLev().shortValue());     // 目标库位列
        crnCommand.setDestinationPosZ(crnStn.getRow().shortValue());     // 目标库位层
        crnCommand.setCommand((short)1);
        if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
        crnCommand.setCommand((short) 1);
        if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) {
            log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
            throw new CoolException("堆垛机命令生成失败");
        }
@@ -170,7 +191,7 @@
        StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone();
        staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
        staProtocol.setStaNo((short) Integer.parseInt(taskWrk.getTargetPoint()));
        if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(3, staProtocol))) {
            log.error("输送线命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
            throw new CoolException("输送线命令生成失败");
        }
@@ -179,19 +200,18 @@
    @Override
    public void locMove(TaskWrk taskWrk, Long userId) {
        //库格移载任务派发
        StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getTargetPoint()));
        if (staDesc == null) {
            return;//不存在路径
        if (Cools.isEmpty(taskWrk.getTargetPoint())) {
            return;
        }
        int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);//获取工作号
        taskWrk.setWrkNo(workNo);//工作号
        taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态
        taskWrk.setAssignTime(new Date());//派发时间
        taskWrk.setWrkSts(11);//工作状态 11.生成出库ID
        taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号
        //taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号
        taskWrk.setModiTime(new Date());
        taskWrk.setModiUser(userId);
        updateById(taskWrk);
        super.updateById(taskWrk);
    }
    @Override