#
whycq
2024-02-01 43c47d17ab873af88a224e2e92607572da8ee849
#
8个文件已修改
323 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrkLog.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskLogScheduler.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -79,9 +79,11 @@
    //创建任务
    @PostMapping("/taskCreate")
    public R taskCreate(@RequestHeader String appkey,
                          @RequestBody TaskCreateParam param,
                          @RequestBody List<TaskCreateParam> param1,
                          HttpServletRequest request) {
        auth(appkey, param, request);
        auth(appkey, param1, request);
        for (TaskCreateParam param : param1
             ) {
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
@@ -95,6 +97,7 @@
            return R.error("条码[barcode]不能为空");
        }
        openService.taskCreate(param);
        }
        return R.ok();
    }
@@ -367,27 +370,13 @@
                              HttpServletRequest request) {
        auth(appkey, "设备状态查询接口", request);
        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
        List<Map<String, Object>> list = new ArrayList<>();
        List<Object> list = new ArrayList<>();
        for (BasDevp basDevp:basDevps){
            Map<String, Object> map = new HashMap<>();
            map.put("devNo", basDevp.getDevNo());
            map.put("devType", "输送线");
            map.put("devStatus", basDevp.getAutoing().equals("Y")? 1:0);
            map.put("errorCode", 0);
            map.put("errorMsg", "");
            map.put("newDate",new Date());
            list.add(map);
            list.add(basDevp);
        }
        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
        for (BasCrnp basCrnp:basCrnps){
            Map<String, Object> map = new HashMap<>();
            map.put("devNo", basCrnp.getCrnNo());
            map.put("devType", "堆垛机");
            map.put("devStatus", basCrnp.getCrnSts());
            map.put("errorCode", 0);
            map.put("errorMsg", "");
            map.put("newDate",new Date());
            list.add(map);
            list.add(basCrnp);
        }
        return R.ok(list);
    }
src/main/java/com/zy/asrs/entity/TaskWrkLog.java
@@ -205,7 +205,27 @@
        this.crnNo = crnNo;
        this.commandStep = commandStep;
    }
    public TaskWrkLog(TaskWrk taskWrk) {
        this.taskNo = taskWrk.getTaskNo();
        this.status = taskWrk.getStatus();
        this.wrkNo = taskWrk.getWrkNo();
        this.createTime = taskWrk.getCreateTime();
        this.ioType = taskWrk.getIoType();
        this.ioPri = (double)taskWrk.getIoPri();
        this.startPoint = taskWrk.getStartPoint();
        this.targetPoint = taskWrk.getTargetPoint();
        this.modiUser = taskWrk.getModiUser();
        this.modiTime = taskWrk.getModiTime();
        this.memo = taskWrk.getMemo();
        this.barcode = taskWrk.getBarcode();
        this.assignTime = taskWrk.getAssignTime();
        this.executeTime = taskWrk.getExecuteTime();
        this.completeTime = taskWrk.getCompleteTime();
        this.cancelTime = taskWrk.getCancelTime();
        this.wrkSts = taskWrk.getWrkSts();
        this.crnNo = taskWrk.getCrnNo();
        this.commandStep = taskWrk.getCommandStep();
    }
//    TaskWrkLog taskWrkLog = new TaskWrkLog(
//            null,    // wms任务号
//            null,    // 任务状态
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,6 +7,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.controller.CrnController;
import com.zy.asrs.controller.OpenController;
import com.zy.asrs.controller.SiteController;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.domain.param.CrnOperatorParam;
@@ -101,6 +102,8 @@
    private String taskStatusFeedbackPath;
    @Autowired
    private CrnController crnController;
    @Autowired
    private SiteController siteController;
    public void generateStoreWrkFile() throws IOException, InterruptedException {
@@ -347,44 +350,10 @@
                        if (taskWrk == null) {
                            continue;
                        }
                        // 判断工作档条件
                        if (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 2) {
                            // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档
                            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, taskWrk.getCrnNo());
                            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                            if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
                                // 移动中
                                continue;
                            }
                            //  判断堆垛机状态等待确认
                            if (crnProtocol.statusType == CrnStatusType.HANDLING_COMPLETED && crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(taskWrk.getWrkNo().shortValue())
                                    && crnProtocol.getTaskFinish() == 0
                                    && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                                // 命令下发区 --------------------------------------------------------------------------
                                //取出输送线命令
                                List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskWrk.getTaskNo());
                                if (commandInfos.isEmpty()) {
                                    continue;//命令空
                                }
//                                CommandPackage commandPackage = JSON.parseObject(commandInfo.getCommand(), CommandPackage.class);//取出命令报文
//                                CrnCommand crnCommand = JSON.parseObject(commandPackage.getCommand().toString(), CrnCommand.class);
                                Integer commandStep = taskWrk.getCommandStep();
                                CommandInfo commandInfo = commandInfos.get(commandStep);
                                CommandPackage commandPackage = JSON.parseObject(commandInfo.getCommand(), CommandPackage.class);//取出命令报文
                                //StaProtocol staProtocol1 = JSON.parseObject(commandInfo.getCommand(), StaProtocol.class);
                                StaProtocol staProtocol1 = JSON.parseObject(commandPackage.getCommand().toString(), StaProtocol.class);
                                if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol1))) {
                                    log.error("输送线命令下方失败!!! [工作号:{}]", taskWrk.getWrkNo());
                                    continue;//命令下发失败
                                }
                                // 复位堆垛机
                                crnThread.setResetFlag(true);
                            }
                        }
                        siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()),taskWrk.getWrkNo().shortValue(),(short)0,"Y",false,false);
                        taskWrk.setStatus(5);
                        taskWrk.setWrkSts(14);
                        taskWrkService.updateById(taskWrk);
                    }
                }
@@ -752,13 +721,13 @@
            for (TaskWrk taskWrk : taskWrks){
                // 双深库位且浅库位有货,则需先对浅库位进行库位移转
                if (Utils.isDeepLoc(slaveProperties, taskWrk.getStartPoint())) {
                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, taskWrk.getStartPoint());
                    TaskWrk hallowLocNoTask = taskWrkMapper.selectByStartPoint(shallowLocNo);
                    if (!Cools.isEmpty(hallowLocNoTask)){
                        continue;
                    }
                }
//                if (Utils.isDeepLoc(slaveProperties, taskWrk.getStartPoint())) {
//                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, taskWrk.getStartPoint());
//                    TaskWrk hallowLocNoTask = taskWrkMapper.selectByStartPoint(shallowLocNo);
//                    if (!Cools.isEmpty(hallowLocNoTask)){
//                        continue;
//                    }
//                }
                // 堆垛机控制过滤
                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                    continue;
@@ -768,44 +737,7 @@
                if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
                    continue;
                }
                if (Cools.isEmpty(taskWrk.getTargetPoint())){
                    List<Integer> list = openServiceImpl.getInEnableRoadway();
                    Map<String, Object> map = new HashMap<>();
                    map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2");
                    ToWmsDTO toWmsDTO = new ToWmsDTO();
                    toWmsDTO.setWarehouseId("1688469798893297665");
                    toWmsDTO.setContainerCode(taskWrk.getBarcode());
                    toWmsDTO.setApplyType("TUNNEL_LOCATION");
                    toWmsDTO.setTaskTunnel(taskWrk.getCrnNo());
                    toWmsDTO.setCanInboundTunnels(list);
                    String response = null;
                    try {
                        response = new HttpHandler.Builder()
                                .setHeaders(map)
                                .setUri(wmsUrl)
                                .setPath("wcsManager/wcsInterface/inboundTaskApply")
                                .setJson(JSON.toJSONString(toWmsDTO))
                                .build()
                                .doPost();
                    }catch (Exception e){
                        log.error("wms通讯失败,"+e.getMessage());
                        continue;
                    }
                    JSONObject jsonObject = JSON.parseObject(response);
                    if (jsonObject.getInteger("code").equals(200)) {
                        GetWmsDto getWmsDto = JSON.parseObject(jsonObject.get("data").toString(), GetWmsDto.class);
                        taskWrk.setOriginTargetPoint(getWmsDto.getTargetLocationCode());
                        taskWrk.setTargetPoint(Utils.getWcsLocNo(getWmsDto.getTargetLocationCode()));
                        if (!taskWrkService.updateById(taskWrk)){
                            log.error("保存wms库位号失败");
                        }
                        continue;
                    }else {
                        log.error("wms通讯失败,"+jsonObject.get("msg"));
                        continue;
                    }
                }
                if (taskWrk == null || Cools.isEmpty(taskWrk.getTargetPoint()) || taskWrk.getTargetPoint().equals("") || taskWrk.getWrkNo() == null) {
                    continue;
                }
@@ -826,12 +758,12 @@
                crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号
                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                crnCommand.setSourcePosZ(Utils.getRowShort(taskWrk.getStartPoint()));     // 源库位排
                crnCommand.setSourcePosX(Utils.getBayShort(taskWrk.getStartPoint()));     // 源库位列
                crnCommand.setSourcePosY(Utils.getLevShort(taskWrk.getStartPoint()));     // 源库位层
                crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
                crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
                crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
                crnCommand.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint()));     // 源库位排
                crnCommand.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint()));     // 源库位列
                crnCommand.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint()));     // 源库位层
                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(2, crnCommand),false)) {
                    log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
@@ -839,20 +771,39 @@
                    // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                    Date now = new Date();
                    taskWrk.setWrkSts(12);
                    taskWrk.setStatus(2);
                    taskWrk.setModiTime(now);
                    if (taskWrkMapper.updateById(taskWrk) == 0) {
                        log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                    }
                    //开始运行
                    String response = CrnStartRunning(taskWrk);
                    JSONObject jsonObject = JSON.parseObject(response);
                    if (jsonObject.getInteger("code").equals(200)) {
                    }else {
                        log.error("移库任务开始运行通讯失败,"+jsonObject.get("msg"));
                        continue;
                    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());
                        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失败");
                    }
                    break;
                }
                return;
            }
@@ -933,7 +884,7 @@
                crnController.crnTaskComplete(crnOperatorParam);
                if(!Cools.isEmpty(taskWrk)){
                    if(taskWrk.getIoType()==1){
                    if(taskWrk.getIoType()==1&&taskWrk.getWrkSts()==3){
                        taskWrk.setWrkSts(4);//入库完成
                        taskWrk.setStatus(5);//完结
                        //更新库位状态
@@ -943,8 +894,8 @@
                        locMast.setModiTime(new Date());
                        locMast.setModiUser(9999L);
                        locMastService.updateById(locMast);
                    }else if(taskWrk.getIoType()==2){
                        taskWrk.setWrkSts(14);//出库完成
                    }else if(taskWrk.getIoType()==2&&taskWrk.getWrkSts()==12){
                        taskWrk.setWrkSts(13);//出库完成
                        taskWrk.setStatus(5);//完结
                        //更新库位状态
                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
@@ -953,7 +904,7 @@
                        locMast.setModiTime(new Date());
                        locMast.setModiUser(9999L);
                        locMastService.updateById(locMast);
                    }else if(taskWrk.getIoType()==3){
                    }else if(taskWrk.getIoType()==3&&taskWrk.getWrkSts()==12){
                        taskWrk.setWrkSts(4);//入库完成
                        taskWrk.setStatus(5);//完结
                        //更新库位状态
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -102,7 +102,7 @@
            taskWrk.setWrkSts(11);
            if (!Cools.isEmpty(param.getStartPoint())) {
                taskWrk.setStartPoint(param.getStartPoint());//起点
                taskWrk.setOriginStartPoint(param.getStartPoint());
                taskWrk.setTargetPoint(param.getTargetPoint());
            }
        }
src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -3,11 +3,13 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.TaskOverToWms;
import com.zy.asrs.entity.param.TaskStatusFeedbackParam;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.TaskWrkLogServiceImpl;
import com.zy.asrs.utils.PostMesDataUtils;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
@@ -42,90 +44,27 @@
    private StaDescService staDescService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private TaskWrkLogServiceImpl wrkLogService;
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.movePath}")
    private String movePath;
    //@Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute() throws IOException {
        for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) {
            TaskStatusFeedbackParam taskStatusFeedbackParam = new TaskStatusFeedbackParam(taskWrk);
            if (taskWrk.getStatus().equals(TaskStatusType.OVER.id)) {//完成
                taskStatusFeedbackParam.setTaskStatus("done");
                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(taskStatusFeedbackParam.getTaskType()); // 任务类型
                taskOverToWms.setContainerCode(taskWrk.getBarcode()); // 容器编码
                //区分入出库
                if (taskWrk.getIoType() ==1 ){
                    taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //设备编码
                    taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //目标库位
                }else if (taskWrk.getIoType() ==2){
                    StaDesc staDesc = staDescService.queryCrn(2, Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getCrnNo());
                    taskOverToWms.setEquipmentCode(staDesc.getStnDesc()); //设备编码
                    taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); //源库位
                    //判断托盘是否走到出库站
                    BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", taskWrk.getTargetPoint()));
                    if (!basDevp.getWrkNo().equals(taskWrk.getWrkNo()) || !basDevp.getOutEnable().equals("Y")){
                        continue;
                    TaskWrkLog taskWrkLog=new TaskWrkLog(taskWrk);
                    if(!wrkLogService.insert(taskWrkLog)){
                        throw new CoolException("转历史档失败"+taskWrkLog);
                    }
                } else if (taskWrk.getIoType() ==3) {
                    taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //设备编码
                    taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //目标库位
                    Date now = new Date();
                    //更新库位状态
                    LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
                    locMast.setLocSts("O");//O.空库位
                    locMast.setBarcode("");//托盘码
                    locMast.setModiTime(now);
                    locMast.setModiUser(9999L);
                    locMastService.updateById(locMast);
                    //更新库位状态
                    LocMast locMast2 = locMastService.selectByLocNo(taskWrk.getTargetPoint());
                    locMast2.setLocSts("F");//F.在库
                    locMast2.setBarcode(taskWrk.getBarcode());//托盘码
                    locMast2.setModiTime(now);
                    locMast2.setModiUser(9999L);
                    locMastService.updateById(locMast2);
                }
                taskOverToWms.setTaskStatus("done"); //任务状态
                String response = null;
                try {
                    response = new HttpHandler.Builder()
                            .setHeaders(map)
                            .setUri(wmsUrl)
                            .setPath("wcsManager/wcsInterface/taskStatusFeedback")
                            .setJson(JSON.toJSONString(taskOverToWms))
                            .build()
                            .doPost();
                }catch (Exception e){
                    continue;
                }
                apiLogService.save("Wms任务完成接口"
                        ,wmsUrl+"/wcsManager/wcsInterface/taskStatusFeedback"
                        ,null
                        ,"127.0.0.1"
                        ,JSON.toJSONString(taskOverToWms)
                        ,response
                        ,true
                );
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)){
                }else {
                    continue;
                }
                //new PostMesDataUtils().postMesData("完成上报",wmsUrl,movePath,taskWrk);
                    if(!taskWrkService.deleteById(taskWrk)){
                        throw new CoolException("任务档删除失败"+taskWrkLog);
                    }
            } else if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) {
                taskStatusFeedbackParam.setTaskStatus("cancelled");
                //new PostMesDataUtils().postMesData("取消任务完成",wmsUrl,movePath,taskWrk);
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -476,7 +476,6 @@
        // 作业信息
        OperateResult result = siemensNet.Write("DB100.0", array);
        // 日志记录
//        try {
            if (command.getAckFinish() != 1) {
                BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
                BasCrnOpt basCrnOpt = new BasCrnOpt(
src/main/resources/application-prod.yml
@@ -6,15 +6,9 @@
    rack: 0
    offset: 2    #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[1]:    #堆垛机出库站点
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 101
      row: 2
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 100
      row: 1
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -32,15 +26,9 @@
    rack: 0
    offset: 2    #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[1]:    #堆垛机出库站点
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 103
      row: 5
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 102
      row: 4
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -119,15 +107,9 @@
    rack: 0
    offset: 2    #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[1]:    #堆垛机出库站点
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 105
      row: 9
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 104
      row: 8
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -145,15 +127,9 @@
    rack: 0
    offset: 2    #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[1]:    #堆垛机出库站点
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 107
      row: 12
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[0]:    #堆垛机出库站点
      staNo: 106
      row: 11
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
src/main/resources/mapper/TaskWrkMapper.xml
@@ -73,7 +73,7 @@
        select * from dbo.wcs_task_wrk
        where crn_no=#{crnNo}
        and target_point=#{targetPoint}
        and wrk_sts=12
        and wrk_sts=13
        and io_type = 2
        order by io_pri desc,create_time,wrk_no ASC
    </select>
@@ -109,7 +109,6 @@
    <select id="selectCrnNoInWorking" resultMap="BaseResultMap">
        select top 1 * from dbo.wcs_task_wrk
        where 1=1
        and io_type != 2
        and (wrk_sts=3 or wrk_sts=12)
        and crn_no=#{crnNo}
        and wrk_no=#{workNo}