#
Junjie
2025-04-28 11d13cfe30f79facfd6bda9058a5b0ccb860eb1c
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -5,29 +5,22 @@
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.TaskOverToWms;
import com.zy.asrs.service.*;
import com.zy.common.utils.HttpHandler;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.*;
import com.zy.core.model.CrnSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.CommandPackage;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.protocol.CrnProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import java.text.MessageFormat;
import java.util.*;
@@ -43,22 +36,6 @@
    private CrnSlave slave;
    private CrnProtocol crnProtocol;
    private boolean resetFlag = false;
    @Value("${wms.url}")
    private String wmsUrl;
    public static final List<Short> rowOne = new ArrayList<Short>() {{
        add((short) 1);add((short) 5);add((short) 7);add((short) 11);add((short) 15);add((short) 19);
    }};
    public static final List<Short> rowTwo = new ArrayList<Short>() {{
        add((short) 2);add((short) 6);add((short) 8);add((short) 12);add((short) 16);add((short) 20);
    }};
    public static final List<Short> rowThree = new ArrayList<Short>() {{
        add((short) 3);add((short) 9);add((short) 13);add((short) 17);add((short) 21);
    }};
    public static final List<Short> rowFour = new ArrayList<Short>() {{
        add((short) 4);add((short) 10);add((short) 14);add((short) 18);
    }};
    public SiemensCrnThread(CrnSlave slave) {
        this.slave = slave;
@@ -201,93 +178,7 @@
                    crnCommand.setAckFinish((short)1);
                    if (write(crnCommand)) {
                        resetFlag = false;
                        //堆垛机任务完成后访问wms请求任务完成 locationDone 货位处理完成
                        TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
                        TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("wrk_no",crnProtocol.getTaskNo()));
                        String tasktype = null;
                        switch (taskWrk.getIoType()){
                            case 1:
                                tasktype= "RK";
                                break;
                            case 2:
                                tasktype= "CK";
                                break;
                            case 3:
                                tasktype= "YK";
                                break;
                            default:
                                tasktype= "未知";
                        }
                        Map<String, Object> map = new HashMap<>();
                        map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2");
                        TaskOverToWms taskOverToWms = new TaskOverToWms();
                        taskOverToWms.setFeedbackFrom("WCS"); //来源
                        taskOverToWms.setWarehouseId("1688469798893297665"); //仓库标识
                        taskOverToWms.setTaskNo(taskWrk.getTaskNo()); //任务号
                        taskOverToWms.setTaskType(tasktype); // 任务类型
                        taskOverToWms.setContainerCode(taskWrk.getBarcode()); // 容器编码
                        if (taskWrk.getIoType() ==1){
                            taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //设备编码
                            taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //目标库位
                        }else if (taskWrk.getIoType() ==2){
                            Map<Integer,String> map1 = new HashMap<>();
                            map1.put(102,"J-1101");
                            map1.put(106,"J-1103");
                            map1.put(110,"J-1105");
                            map1.put(114,"J-1107");
                            map1.put(118,"J-1109");
                            map1.put(122,"J-1111");
                            map1.put(305,"H-1101");
                            map1.put(405,"G-1101");
                            taskOverToWms.setEquipmentCode(map1.get(taskWrk.getTargetPoint())); //设备编码
                            taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); //源库位
                        } else if (taskWrk.getIoType() == 3) {
                            taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //设备编码
                            taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint());
                            taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //目标库位
                        }
                        taskOverToWms.setTaskStatus("location_done"); //任务状态
                        String response = null;
                        try {
                            response = new HttpHandler.Builder()
                                    .setHeaders(map)
                                    .setUri("10.32.53.195:8080")
                                    .setPath("wcsManager/wcsInterface/taskStatusFeedback")
                                    .setJson(JSON.toJSONString(taskOverToWms))
                                    .build()
                                    .doPost();
                        }catch (Exception e){
                            log.error("堆垛机任务完成,请求wms任务完成接口失败");
                        }
                        ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                        apiLogService.save("Wms任务完成接口"
                                ,"10.32.53.195:8080"+"/wcsManager/wcsInterface/taskStatusFeedback"
                                ,null
                                ,"127.0.0.1"
                                ,JSON.toJSONString(taskOverToWms)
                                ,response
                                ,true
                        );
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)){
                            if (taskWrk.getIoType() == 3){
                                taskWrk.setWrkSts(4);
                            }
                            taskWrk.setStatus(5);
                            if (!taskWrkService.update(taskWrk,new EntityWrapper<TaskWrk>().eq("wrk_no",crnProtocol.getTaskNo()))){
                                log.error("堆垛机任务完成,改变任务状态失败");
                            }
                            log.info("堆垛机任务完成,请求wms任务完成接口成功");
                        }else {
                            log.error("堆垛机任务完成,请求wms任务完成接口完成,但返回失败");
                        }
                    }
                }
            }
@@ -392,13 +283,14 @@
//        array[9] = command.getSourceStaNo();
//        array[10] = command.getDestinationStaNo();
        array[9] = command.getCommand();
        OperateResult result18 = siemensNet.Write("DB100.18", (short)0);
        Thread.sleep(100L);
        OperateResult result = siemensNet.Write("DB100.0", array);
        int i=0;
        do{
            //堆垛机任务写入后,回读一次,看是否成功
            Thread.sleep(300);
            Thread.sleep(100);
            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20);
            if (resultRead.IsSuccess) {
                CrnCommand one = new CrnCommand();
@@ -419,12 +311,31 @@
                    log.error("堆垛机命令地址写入后回读失败[id:{}]>>>>重写[{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), i,JSON.toJSON(command),JSON.toJSON(one));
                    result = siemensNet.Write("DB100.0", array);
                }else{
                    result = siemensNet.Write("DB100.18", (short) 0);
                    i=5;
                    break;
                }
            }
        }while(i<5);
        if (command.getAckFinish() == 0) {
            short commandFinish = 1;
            Thread.sleep(100L);
            result = siemensNet.Write("DB100.18", commandFinish);
            int signFinish = 1;
            while (signFinish<5){
                OperateResultExOne<byte[]> result10018 = siemensNet.Read("DB100.18", (short) 2);
                short transInt16 = siemensNet.getByteTransform().TransInt16(result10018.Content, 0);
                if (transInt16 != commandFinish){
                    log.info("下发DB100.18  回读失败" + "commandFinish:"+commandFinish);
                    log.info("下发DB100.18  回读失败" + "array:"+ JSON.toJSONString(array));
                    result = siemensNet.Write("DB100.18", commandFinish);
                    signFinish++;
                }else {
                    log.info("下发DB100.18" + "commandFinish:"+commandFinish);
                    log.info("下发DB100.18" + "array:"+ JSON.toJSONString(array));
                    break;
                }
            }
        }
        try {
            // 日志记录