自动化立体仓库 - WCS系统
野心家
2025-01-07 a8d50dc00026ce066403632cb96b4ee3ce6de783
src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -1,6 +1,7 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.TaskStatusType;
@@ -8,12 +9,14 @@
import com.zy.asrs.entity.StaDesc;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.entity.TaskWrk;
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.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.core.DevpThread;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.CrnTaskModeType;
@@ -24,11 +27,13 @@
import com.zy.core.model.protocol.StaProtocol;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Slf4j
@@ -39,6 +44,12 @@
    private CommonService commonService;
    @Autowired
    private StaDescService staDescService;
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.taskStatusFeedbackPath}")
    private String taskStatusFeedbackPath;
    @Autowired
    private ApiLogService apiLogService;
    @Override
    public TaskWrk selectByTaskNo(String taskNo) {
@@ -90,6 +101,7 @@
    @Override
    public void startup(TaskWrk taskWrk, Long userId) {
        //入库任务派发
        StaDesc staDesc = staDescService.queryCrn(taskWrk.getIoType(), Integer.parseInt(taskWrk.getStartPoint()), taskWrk.getCrnNo());
        if (staDesc == null) {
@@ -99,7 +111,7 @@
        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);
@@ -115,16 +127,47 @@
        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.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 (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) {
        if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand),false)) {
            log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
            throw new CoolException("堆垛机命令生成失败");
        }else{
            try{
                HashMap<String, Object> headParam = new HashMap<>();
                headParam.put("taskNo",taskWrk.getTaskNo());
                headParam.put("status",taskWrk.getStatus());
                headParam.put("ioType",taskWrk.getIoType());
                headParam.put("barcode",taskWrk.getBarcode());
//                headParam.put("reportTime",new Date());
                String response;
                response = new HttpHandler.Builder()
                        // .setHeaders(headParam)
                        .setUri(wmsUrl)
                        .setPath(taskStatusFeedbackPath)
                        .setJson(JSON.toJSONString(headParam))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                apiLogService.save("wcs派发入库任务上报wms"
                        ,wmsUrl+taskStatusFeedbackPath
                        ,null
                        ,"127.0.0.1"
                        ,JSON.toJSONString(headParam)
                        ,response
                        ,true
                );
            }catch (Exception e){
                log.error("wcs派发入库任务上报wms失败", taskWrk);
//                throw new CoolException("wcs派发入库任务上报wms失败");
            }
        }
    }
@@ -139,7 +182,7 @@
        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);