#
Junjie
2025-04-28 11d13cfe30f79facfd6bda9058a5b0ccb860eb1c
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -10,7 +10,6 @@
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.Result;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.CommandUtils;
@@ -42,6 +41,7 @@
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -57,8 +57,6 @@
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Autowired
    private LocMastService locMastService;
    @Autowired
@@ -93,16 +91,12 @@
    private NotifyUtils notifyUtils;
    @Value("${wms.count}")
    private Integer maxCount;
    @Autowired
    private WrkMastService wrkMastService;
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.inboundTaskApplyPath}")
    private String inboundTaskApplyPath;
    @Value("${wms.TaskExecCallback}")
    private String TaskExecCallback;
    @Value("${wms.taskStatusFeedbackPath}")
    private String taskStatusFeedbackPath;
    private String taskExecCallback;
    public synchronized void generateStoreWrkFile1() {
        try {
@@ -171,13 +165,13 @@
                        }
                        HashMap<String, Object> requestParam = new HashMap<>();
                        requestParam.put("BoxNo", barcode);//托盘码
                        requestParam.put("TerminalNo", inSta.getStaNo());//入库口
                        requestParam.put("barcode", barcode);//托盘码
                        requestParam.put("stationCode", inSta.getStaNo());//入库口
                        if (back) {
                            requestParam.put("WCSStatus", 1);//失败
                            requestParam.put("WCSErrorMessage", errMsg);//失败原因
                            requestParam.put("wcsStatus", 1);//失败
                            requestParam.put("wcsErrorMessage", errMsg);//失败原因
                        }else {
                            requestParam.put("WCSStatus", 0);//成功
                            requestParam.put("wcsStatus", 0);//成功
                        }
                        String response = "";
@@ -190,6 +184,10 @@
                                    .build()
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            if (jsonObject.getInteger("code") != 200) {
                                log.info("条码:" + barcode + "申请WMS失败,response=" + JSON.toJSONString(jsonObject));
                                continue;
                            }
                            if (back) {
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -197,41 +195,78 @@
                                continue;
                            }
                            int returnStatus = Integer.parseInt(jsonObject.get("ReturnStatus").toString());
                            if (returnStatus == 0) {
                                Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class);
                                // 创新一个入库工作档
                                TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo());
                                if(taskWrk != null) {
                                    log.info("任务:" + result.getTaskNo() + "已经存在");
                                    continue;
                                }
                            JSONObject result = jsonObject.getJSONObject("data");
                            Integer resultWrkNo = result.getInteger("wrkNo");
                            Integer resultStaNo = result.getInteger("staNo");
                            String resultLocNo = result.getString("locNo");
                                taskWrk = createTask1(result, barcode);
                                if (!taskWrkService.insert(taskWrk)) {
                                    log.info("任务:" + result.getTaskNo() + "任务创建失败");
                                    continue;
                                }
                            // 创新一个入库工作档
                            TaskWrk taskWrk = taskWrkService.selectByTaskNo(String.valueOf(resultWrkNo));
                            if(taskWrk != null) {
                                log.info("任务:" + resultWrkNo + "已经存在");
                                continue;
                            }
                                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                        .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId()));
                                staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                                staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            LocMast locMast = locMastService.selectByLocNo(resultLocNo);
                            if (locMast == null) {
                                log.info(resultLocNo + "库位不存在");
                                continue;
                            }
                                //上报
                                HashMap<String, Object> hashMap = new HashMap<>();
                                hashMap.put("TaskNo", taskWrk.getTaskNo());
                            if (!locMast.getLocSts().equals("O")) {
                                log.info(resultLocNo + "库位不处于空库位");
                                continue;
                            }
                                NotifyCustomDataDto customDataDto = new NotifyCustomDataDto();
                                customDataDto.setUri(wmsUrl);
                                customDataDto.setPath(taskStatusFeedbackPath);
                                customDataDto.setData(JSON.toJSONString(hashMap));
                                boolean notifyResult = notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), NotifyMsgType.TASK_START, JSON.toJSONString(taskWrk), true, customDataDto);
                                if(notifyResult) {
                                    taskWrk.setStatus(2);
                                    taskWrkService.updateById(taskWrk);
                                }
                            Date now = new Date();
                            taskWrk = new TaskWrk();
                            taskWrk.setTaskNo(String.valueOf(resultWrkNo));//任务号
                            taskWrk.setWrkNo(commonService.getWorkNo(WorkNoType.PAKIN.type));//获取入库工作号
                            taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
                            taskWrk.setWrkSts(2);//2.设备上走
                            taskWrk.setCreateTime(now);
                            taskWrk.setIoType(1);//任务类型
                            taskWrk.setIoPri(13);//优先级
                            taskWrk.setBarcode(barcode);//条码
                            taskWrk.setCrnNo(locMast.getCrnNo());
                            taskWrk.setTargetPoint(resultLocNo);
                            taskWrk.setStartPoint(String.valueOf(staProtocol.getStaNo()));
                            if (!Cools.isEmpty(taskWrk.getTargetPoint())) {
                                taskWrk.setOriginTargetPoint(taskWrk.getTargetPoint());
                            }
                            if (!taskWrkService.insert(taskWrk)) {
                                log.info("任务:" + resultWrkNo + "任务创建失败");
                                continue;
                            }
                            locMast.setLocSts("S");
                            locMast.setModiTime(new Date());
                            locMastService.updateById(locMast);
                            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                    .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId()));
                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                            staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            //上报
                            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
                            HashMap<String, Object> hashMap = new HashMap<>();
                            hashMap.put("taskNo", taskWrk.getTaskNo());
                            hashMap.put("status", TaskStatusType.DISTRIBUTE.id);
                            hashMap.put("ioType", 1);
                            hashMap.put("barcode", taskWrk.getBarcode());
                            hashMap.put("reportTime", format.format(new Date()));
                            NotifyCustomDataDto customDataDto = new NotifyCustomDataDto();
                            customDataDto.setUri(wmsUrl);
                            customDataDto.setPath(taskExecCallback);
                            customDataDto.setData(JSON.toJSONString(hashMap));
                            boolean notifyResult = notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), NotifyMsgType.TASK_START, JSON.toJSONString(taskWrk), true, customDataDto);
                            if(notifyResult) {
                                taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//任务派发
                                taskWrkService.updateById(taskWrk);
                            }
                        } catch (Exception e) {
                            log.error("请求入库调用接口失败");
@@ -569,12 +604,17 @@
                            }
                            //上报-出库任务开始时,WCS回调WMS
                            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
                            HashMap<String, Object> hashMap = new HashMap<>();
                            hashMap.put("TaskNo", taskWrk.getTaskNo());
                            hashMap.put("taskNo", taskWrk.getTaskNo());
                            hashMap.put("status", TaskStatusType.DISTRIBUTE.id);
                            hashMap.put("ioType", 1);
                            hashMap.put("barcode", taskWrk.getBarcode());
                            hashMap.put("reportTime", format.format(new Date()));
                            NotifyCustomDataDto customDataDto = new NotifyCustomDataDto();
                            customDataDto.setUri(wmsUrl);
                            customDataDto.setPath(taskStatusFeedbackPath);
                            customDataDto.setPath(taskExecCallback);
                            customDataDto.setData(JSON.toJSONString(hashMap));
                            boolean notifyResult = notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), NotifyMsgType.TASK_START, JSON.toJSONString(taskWrk), true, customDataDto);
                            if(notifyResult) {
@@ -662,7 +702,7 @@
                        response = new HttpHandler.Builder()
                                // .setHeaders(headParam)
                                .setUri(wmsUrl)
                                .setPath(taskStatusFeedbackPath)
                                .setPath(taskExecCallback)
                                .setJson(JSON.toJSONString(headParam))
                                .build()
                                .doPost();
@@ -678,7 +718,7 @@
//                        throw new CoolException("wcs派发移库库任务上报wms失败");
                    }finally {
                        apiLogService.save("wcs派发移库任务上报wms"
                                , wmsUrl + taskStatusFeedbackPath
                                , wmsUrl + taskExecCallback
                                , null
                                , "127.0.0.1"
                                , JSON.toJSONString(headParam)
@@ -836,26 +876,26 @@
                    // 有异常
                    if (latest == null) {
                        if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
                            WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
                            if (wrkMast == null) {
                            TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue());
                            if (taskWrk == null) {
                                continue;
                            }
                            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                            BasErrLog basErrLog = new BasErrLog(
                                    null,    // 编号
                                    wrkMast.getWrkNo(),    // 工作号
                                    taskWrk.getWrkNo(),    // 工作号
                                    now,    // 发生时间
                                    null,    // 结束时间
                                    wrkMast.getWrkSts(),    // 工作状态
                                    wrkMast.getIoType(),    // 入出库类型
                                    taskWrk.getWrkSts().longValue(),    // 工作状态
                                    taskWrk.getIoType(),    // 入出库类型
                                    crn.getId(),    // 堆垛机
                                    null,    // plc
                                    wrkMast.getLocNo(),    // 目标库位
                                    wrkMast.getStaNo(),    // 目标站
                                    wrkMast.getSourceStaNo(),    // 源站
                                    wrkMast.getSourceLocNo(),    // 源库位
                                    wrkMast.getBarcode(),    // 条码
                                    taskWrk.getTargetPoint(),    // 目标库位
                                    null,    // 目标站
                                    null,    // 源站
                                    taskWrk.getStartPoint(),    // 源库位
                                    taskWrk.getBarcode(),    // 条码
                                    (int) crnProtocol.getAlarm1(),    // 异常码
                                    errName,    // 异常
                                    1,    // 异常情况
@@ -1002,40 +1042,6 @@
                locMastService.updateById(locMast);
            }
        }
    }
    private TaskWrk createTask1(Result result, String barcode) {
        String locNo = Utils.getLocNo(result.getRow(), result.getFloor(), result.getColumn());
        LocMast locMast = locMastService.selectByLocNo(locNo);
        if (locMast == null) {
            throw new CoolException("库位不存在");
        }
        Date now = new Date();
        TaskWrk taskWrk = new TaskWrk();
        int workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type);//获取入库工作号
        taskWrk.setTaskNo(result.getTaskNo());//任务号
        taskWrk.setWrkNo(workNo1);
        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
        taskWrk.setCreateTime(now);
        taskWrk.setIoType(1);//任务类型
        taskWrk.setIoPri(13);//优先级
        taskWrk.setBarcode(barcode);//条码
        taskWrk.setCrnNo(locMast.getCrnNo());
        taskWrk.setTargetPoint(locNo);
        taskWrk.setStartPoint("116");
        if (result.getAlley().equals("1")) {
            taskWrk.setCrnNo(1);
        } else {
            taskWrk.setCrnNo(2);
        }
        if (taskWrk.getIoType() == 1) {
            taskWrk.setWrkSts(2);
            if (!Cools.isEmpty(taskWrk.getTargetPoint())) {
                taskWrk.setOriginTargetPoint(taskWrk.getTargetPoint());
            }
        }
        return taskWrk;
    }
    private TaskWrk createTask(GetWmsDto dto, String barcode) {