src/main/java/com/zy/asrs/entity/TaskWrkReport.java
@@ -4,18 +4,11 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.asrs.service.BasWrkIotypeService; import com.zy.asrs.service.BasWrkStatusService; import com.zy.system.entity.User; import com.zy.system.service.UserService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; @Data @@ -24,11 +17,13 @@ private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * wms任务号 */ @ApiModelProperty(value = "wms任务号") @TableId(value = "task_no", type = IdType.INPUT) @TableField("task_no") private String taskNo; @@ -81,12 +76,6 @@ @TableField("target_point") private String targetPoint; /** * 修改人员 */ @ApiModelProperty(value = "修改人员") @TableField("modi_user") private Long modiUser; /** * 修改时间 @@ -108,230 +97,5 @@ @ApiModelProperty(value = "条码") private String barcode; /** * 派发时间 */ @ApiModelProperty(value = "派发时间") @TableField("assign_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date assignTime; /** * 执行时间 */ @ApiModelProperty(value = "执行时间") @TableField("execute_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date executeTime; /** * 完结时间 */ @ApiModelProperty(value = "完结时间") @TableField("complete_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date completeTime; /** * 取消时间 */ @ApiModelProperty(value = "取消时间") @TableField("cancel_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date cancelTime; /** * 工作状态 */ @ApiModelProperty(value = "工作状态") @TableField("wrk_sts") private Integer wrkSts; /** * 堆垛机号 */ @ApiModelProperty(value = "堆垛机号") @TableField("crn_no") private Integer crnNo; /** * 指令执行步序 */ @ApiModelProperty(value = "指令执行步序") @TableField("command_step") private Integer commandStep = 0; @ApiModelProperty(value = "移库标记") @TableField("transfer_mark") private Integer transferMark; @ApiModelProperty(value = "原始起点") @TableField("origin_start_point") private String originStartPoint; @ApiModelProperty(value = "原始起点") @TableField("origin_target_point") private String originTargetPoint; @ApiModelProperty(value = "开始任务标记") @TableField("mark_start") private Integer markStart; public TaskWrkReport() { } public TaskWrkReport(String taskNo, Integer status, Integer wrkNo, Date createTime, Integer ioType, Integer ioPri, String startPoint, String targetPoint, Long modiUser, Date modiTime, String memo, String barcode, Date assignTime, Date executeTime, Date completeTime, Date cancelTime, Integer wrkSts) { this.taskNo = taskNo; this.status = status; this.wrkNo = wrkNo; this.createTime = createTime; this.ioType = ioType; this.ioPri = ioPri; this.startPoint = startPoint; this.targetPoint = targetPoint; this.modiUser = modiUser; this.modiTime = modiTime; this.memo = memo; this.barcode = barcode; this.assignTime = assignTime; this.executeTime = executeTime; this.completeTime = completeTime; this.cancelTime = cancelTime; this.wrkSts = wrkSts; } // TaskWrk taskWrk = new TaskWrk( // null, // wms任务号[非空] // null, // 任务状态 // null, // 任务号 // null, // 任务时间(接收时间) // null, // 任务类型 // null, // 优先级 // null, // 起点 // null, // 终点 // null, // 修改人员 // null, // 修改时间 // null, // 备注 // null, // 条码 // null, // 派发时间 // null, // 执行时间 // null, // 完结时间 // null, // 取消时间 // null // 工作状态 // ); public String getStatus$() { if (null == this.status) { return null; } switch (this.status) { case 1: return "接收"; case 2: return "派发"; case 3: return "步序完成"; case 4: return "取消"; case 5: return "完结"; default: return String.valueOf(this.status); } } public String getCreateTime$() { if (Cools.isEmpty(this.createTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); } public String getIoType$() { BasWrkIotypeService service = SpringUtils.getBean(BasWrkIotypeService.class); BasWrkIotype basWrkIotype = service.selectById(this.ioType); if (!Cools.isEmpty(basWrkIotype)) { return String.valueOf(basWrkIotype.getIoDesc()); } return null; } public String getModiUser$() { UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.modiUser); if (!Cools.isEmpty(user)) { return String.valueOf(user.getUsername()); } return null; } public String getModiTime$() { if (Cools.isEmpty(this.modiTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); } public String getAssignTime$() { if (Cools.isEmpty(this.assignTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.assignTime); } public String getExecuteTime$() { if (Cools.isEmpty(this.executeTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.executeTime); } public String getCompleteTime$() { if (Cools.isEmpty(this.completeTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.completeTime); } public String getCancelTime$() { if (Cools.isEmpty(this.cancelTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.cancelTime); } public String getWrkSts$() { BasWrkStatusService service = SpringUtils.getBean(BasWrkStatusService.class); BasWrkStatus basWrkStatus = service.selectById(this.wrkSts); if (!Cools.isEmpty(basWrkStatus)) { return String.valueOf(basWrkStatus.getWrkDesc()); } return null; } /** * 获取持续时间 */ public String getDurationTime() { if (Cools.isEmpty(this.createTime)) { return ""; } Date endDate = new Date(); if (!Cools.isEmpty(this.assignTime)) { endDate = this.assignTime; } //用来获取两个时间相差的毫秒数 long l = this.createTime.getTime() - endDate.getTime(); //分别计算相差的天、小时、分、秒 long day = l / (24 * 60 * 60 * 1000); long hour = (l / (60 * 60 * 1000) - day * 24); long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60); long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); return Math.abs(day) + "天" + Math.abs(hour) + "小时" + Math.abs(min) + "分" + Math.abs(s) + "秒"; } } src/main/java/com/zy/asrs/entity/TaskWrkReportLog.java
@@ -4,18 +4,11 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.asrs.service.BasWrkIotypeService; import com.zy.asrs.service.BasWrkStatusService; import com.zy.system.entity.User; import com.zy.system.service.UserService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; @Data @@ -23,6 +16,10 @@ public class TaskWrkReportLog implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * wms任务号 @@ -81,12 +78,6 @@ @TableField("target_point") private String targetPoint; /** * 修改人员 */ @ApiModelProperty(value = "修改人员") @TableField("modi_user") private Long modiUser; /** * 修改时间 @@ -107,231 +98,5 @@ */ @ApiModelProperty(value = "条码") private String barcode; /** * 派发时间 */ @ApiModelProperty(value = "派发时间") @TableField("assign_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date assignTime; /** * 执行时间 */ @ApiModelProperty(value = "执行时间") @TableField("execute_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date executeTime; /** * 完结时间 */ @ApiModelProperty(value = "完结时间") @TableField("complete_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date completeTime; /** * 取消时间 */ @ApiModelProperty(value = "取消时间") @TableField("cancel_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date cancelTime; /** * 工作状态 */ @ApiModelProperty(value = "工作状态") @TableField("wrk_sts") private Integer wrkSts; /** * 堆垛机号 */ @ApiModelProperty(value = "堆垛机号") @TableField("crn_no") private Integer crnNo; /** * 指令执行步序 */ @ApiModelProperty(value = "指令执行步序") @TableField("command_step") private Integer commandStep = 0; @ApiModelProperty(value = "移库标记") @TableField("transfer_mark") private Integer transferMark; @ApiModelProperty(value = "原始起点") @TableField("origin_start_point") private String originStartPoint; @ApiModelProperty(value = "原始起点") @TableField("origin_target_point") private String originTargetPoint; @ApiModelProperty(value = "开始任务标记") @TableField("mark_start") private Integer markStart; public TaskWrkReportLog() { } public TaskWrkReportLog(String taskNo, Integer status, Integer wrkNo, Date createTime, Integer ioType, Integer ioPri, String startPoint, String targetPoint, Long modiUser, Date modiTime, String memo, String barcode, Date assignTime, Date executeTime, Date completeTime, Date cancelTime, Integer wrkSts) { this.taskNo = taskNo; this.status = status; this.wrkNo = wrkNo; this.createTime = createTime; this.ioType = ioType; this.ioPri = ioPri; this.startPoint = startPoint; this.targetPoint = targetPoint; this.modiUser = modiUser; this.modiTime = modiTime; this.memo = memo; this.barcode = barcode; this.assignTime = assignTime; this.executeTime = executeTime; this.completeTime = completeTime; this.cancelTime = cancelTime; this.wrkSts = wrkSts; } // TaskWrk taskWrk = new TaskWrk( // null, // wms任务号[非空] // null, // 任务状态 // null, // 任务号 // null, // 任务时间(接收时间) // null, // 任务类型 // null, // 优先级 // null, // 起点 // null, // 终点 // null, // 修改人员 // null, // 修改时间 // null, // 备注 // null, // 条码 // null, // 派发时间 // null, // 执行时间 // null, // 完结时间 // null, // 取消时间 // null // 工作状态 // ); public String getStatus$() { if (null == this.status) { return null; } switch (this.status) { case 1: return "接收"; case 2: return "派发"; case 3: return "步序完成"; case 4: return "取消"; case 5: return "完结"; default: return String.valueOf(this.status); } } public String getCreateTime$() { if (Cools.isEmpty(this.createTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); } public String getIoType$() { BasWrkIotypeService service = SpringUtils.getBean(BasWrkIotypeService.class); BasWrkIotype basWrkIotype = service.selectById(this.ioType); if (!Cools.isEmpty(basWrkIotype)) { return String.valueOf(basWrkIotype.getIoDesc()); } return null; } public String getModiUser$() { UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.modiUser); if (!Cools.isEmpty(user)) { return String.valueOf(user.getUsername()); } return null; } public String getModiTime$() { if (Cools.isEmpty(this.modiTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); } public String getAssignTime$() { if (Cools.isEmpty(this.assignTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.assignTime); } public String getExecuteTime$() { if (Cools.isEmpty(this.executeTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.executeTime); } public String getCompleteTime$() { if (Cools.isEmpty(this.completeTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.completeTime); } public String getCancelTime$() { if (Cools.isEmpty(this.cancelTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.cancelTime); } public String getWrkSts$() { BasWrkStatusService service = SpringUtils.getBean(BasWrkStatusService.class); BasWrkStatus basWrkStatus = service.selectById(this.wrkSts); if (!Cools.isEmpty(basWrkStatus)) { return String.valueOf(basWrkStatus.getWrkDesc()); } return null; } /** * 获取持续时间 */ public String getDurationTime() { if (Cools.isEmpty(this.createTime)) { return ""; } Date endDate = new Date(); if (!Cools.isEmpty(this.assignTime)) { endDate = this.assignTime; } //用来获取两个时间相差的毫秒数 long l = this.createTime.getTime() - endDate.getTime(); //分别计算相差的天、小时、分、秒 long day = l / (24 * 60 * 60 * 1000); long hour = (l / (60 * 60 * 1000) - day * 24); long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60); long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); return Math.abs(day) + "天" + Math.abs(hour) + "小时" + Math.abs(min) + "分" + Math.abs(s) + "秒"; } } src/main/java/com/zy/asrs/entity/wms/StorageEscalationParam.java
File was renamed from src/main/java/com/zy/asrs/entity/param/StorageEscalationParam.java @@ -1,4 +1,4 @@ package com.zy.asrs.entity.param; package com.zy.asrs.entity.wms; import lombok.Data; src/main/java/com/zy/asrs/entity/wms/WmsFeedback.java
New file @@ -0,0 +1,32 @@ package com.zy.asrs.entity.wms; import lombok.Data; @Data public class WmsFeedback { /** * 分配的货位所属任务ID */ private String taskNo; /** * 2:派发 * 4:取消 * 5:完结 * 6:库位不为空 */ private Integer status; /** * 1:入库,2:出库 */ private Integer ioType; /** * 托盘码 */ private String barcode; /** * 上报时间 */ private String reportTime; } src/main/java/com/zy/asrs/entity/wms/WmsResult.java
File was renamed from src/main/java/com/zy/asrs/entity/param/Result.java @@ -1,9 +1,9 @@ package com.zy.asrs.entity.param; package com.zy.asrs.entity.wms; import lombok.Data; @Data public class Result { public class WmsResult { /** * 分配的货位所属任务ID */ src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -106,5 +106,5 @@ WrkMast selectWorkingPakin(@Param("sourceStaNo") Integer sourceStaNo); WrkMast selectWorkingPakout(@Param("sourceStaNo") Integer sourceStaNo); WrkMast selectWorkingPakout(@Param("staNo") Integer staNo); } src/main/java/com/zy/asrs/service/ToWmsService.java
New file @@ -0,0 +1,13 @@ package com.zy.asrs.service; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.wms.StorageEscalationParam; import com.zy.asrs.entity.wms.WmsResult; public interface ToWmsService { void addReportLog(TaskWrk taskWrk); WmsResult getLocNoFromWms(StorageEscalationParam wmsParam); } src/main/java/com/zy/asrs/service/impl/CommonServiceImpl.java
@@ -12,8 +12,8 @@ import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.Result; import com.zy.asrs.entity.param.StorageEscalationParam; import com.zy.asrs.entity.wms.WmsResult; import com.zy.asrs.entity.wms.StorageEscalationParam; import com.zy.asrs.entity.param.TaskOverToWms; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.mapper.StaDescMapper; @@ -213,7 +213,7 @@ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } else { if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("ReturnStatus")) && jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) { Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class); WmsResult result = JSON.parseObject(jsonObject.get("Result").toString(), WmsResult.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo()); if (Cools.isEmpty(taskWrk)) { @@ -1468,7 +1468,7 @@ return response; } private TaskWrk createTask1(Result result, String barcode) { private TaskWrk createTask1(WmsResult result, String barcode) { String locNo = Utils.Fusion(result.getRow(), result.getFloor(), result.getColumn()); src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,14 +7,13 @@ import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.controller.CrnController; 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; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.Result; import com.zy.asrs.entity.param.StorageEscalationParam; import com.zy.asrs.entity.param.TaskOverToWms; import com.zy.asrs.entity.wms.StorageEscalationParam; import com.zy.asrs.entity.wms.WmsResult; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.mapper.StaDescMapper; import com.zy.asrs.mapper.TaskWrkMapper; @@ -90,8 +89,6 @@ private CommandInfoService commandInfoService; @Autowired private OpenServiceImpl openServiceImpl; @Autowired private StaDescService staDescService; @Autowired @@ -99,25 +96,33 @@ @Autowired private CommonService commonService; @Autowired private ToWmsService toWmsService; @Value("${wms.url}") private String wmsUrl; @Value("${wms.inboundTaskApplyPath}") private String inboundTaskApplyPath; @Value("${wms.TaskExecCallback}") private String TaskExecCallback; @Value("${wms.taskExecCallback}") private String taskExecCallback; @Value("${wms.taskStatusFeedbackPath}") private String taskStatusFeedbackPath; @Autowired private CrnController crnController; @Autowired private SiteController siteController; @Value("${wms.code}") private String code; @Value("${wms.successCode}") private String successCode; @Value("${wms.msg}") private String msg; @Value("${wms.data}") private String data; @@ -203,94 +208,14 @@ String response = ""; Boolean success = false; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(storageEscalationParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); WmsResult result = toWmsService.getLocNoFromWms(storageEscalationParam); if (back) { staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } else { if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get(code)) && jsonObject.get(code).equals(successCode)) { Result result = JSON.parseObject(jsonObject.get(data).toString(), Result.class); if (result != null) { try { BasDevp basDevp = basDevpService.selectById(inSta.getStaNo()); if (Cools.isEmpty(basDevp)) { log.error("站点号异常1" + inSta.getStaNo()); throw new CoolException("站点号异常1,未查询到站点信息" + inSta.getStaNo()); } Integer staNoCrnNo = Utils.StaNoCrnNo(inSta.getStaNo()); if (staNoCrnNo == 0) { basDevp.setStaErr(1); basDevpService.updateById(basDevp); log.error("站点号异常2" + inSta.getStaNo()); throw new CoolException("站点号异常2,站点号不存在" + inSta.getStaNo()); } else { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("crn_no", staNoCrnNo.longValue()) .eq("loc_no", result.getLocNo())); if (Cools.isEmpty(locMast)) { basDevp.setStaErr(1); basDevpService.updateById(basDevp); log.error("站点号异常3" + inSta.getStaNo()); throw new CoolException("站点号异常3:此巷道不存在目标库位" + inSta.getStaNo()); } } } catch (Exception e) { // log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e); // 退回 log.error("扫码检测程序异常" + inSta.getStaNo() + errMsg); log.error("扫码检测程序异常,异常信息" + e); staProtocol.setWorkNo((short) 9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); // if (taskWrk != null) { // taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 // taskWrkMapper.updateById(taskWrk); // } continue; } //查看该库位是否为空库位 LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "O") .eq("loc_no", result.getLocNo())); if (Cools.isEmpty(locMast)) { try { HashMap<String, Object> headParam1 = new HashMap<>(); headParam1.put("taskNo", result.getTaskNo()); headParam1.put("status", 6); headParam1.put("ioType", 1); headParam1.put("barcode", BoxNo); String response2; response2 = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(headParam1)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response2); apiLogService.save("wcs派发库位==》不为空《==上报wms" , wmsUrl + taskStatusFeedbackPath , null , "127.0.0.1" , JSON.toJSONString(headParam1) , response , true ); } catch (Exception e) { log.error("wcs派发库位==》不为空《==上报wms", result.getTaskNo()); throw new CoolException("wcs派发入库任务上报wms失败,派发库位==》不为空《==,异常信息:" + e); } } // 创新一个入库工作档 @@ -322,7 +247,7 @@ bool = true; } apiLogService.save("wcs开始入库任务上报wms" , wmsUrl + TaskExecCallback , wmsUrl + taskExecCallback , null , "127.0.0.1" , JSON.toJSONString(hashMap) @@ -407,7 +332,6 @@ continue; } log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getStnNo().shortValue()); boolean offer = false; @@ -417,7 +341,6 @@ log.error("下发输送线任务失败:异常:" + e); log.error("下发输送线任务失败:异常:offer:" + offer); } // JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r)); if (offer) { log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); taskWrk.setStatus(5); @@ -426,7 +349,6 @@ } else { log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk)); // log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r)); } } } catch (Exception e) { @@ -454,7 +376,6 @@ log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); continue; } // 只有当堆垛机空闲 并且 无任务时才继续执行 if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO @@ -597,16 +518,13 @@ LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); //判断其库位是否为深库位,如果为深库位找其浅库位是都有货 if (locMast.getRow1() == 1 || locMast.getRow1() == 5) { LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("row1", (locMast.getRow1() + 1)) .eq("bay1", locMast.getBay1()) .eq("lev1", locMast.getLev1()).eq("loc_sts", "F")); if (!Cools.isEmpty(locMast1)) { log.info(locMast.getLocNo() + "出深库位,浅库位有货"); continue; } } else if (locMast.getRow1() == 4 || locMast.getRow1() == 8) { boolean flag = false; if (locMast.getRow1() == 1 || locMast.getRow1() == 5 || locMast.getRow1() == 9) { flag = true; } else if (locMast.getRow1() == 4 || locMast.getRow1() == 8 || locMast.getRow1() == 12) { flag = true; } if (flag) { LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("row1", (locMast.getRow1() - 1)) .eq("bay1", locMast.getBay1()) @@ -616,6 +534,7 @@ continue; } } // 获取堆垛机出库站信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); @@ -674,7 +593,7 @@ .doPost(); JSONObject jsonObject = JSON.parseObject(response); Boolean bool = false; if (jsonObject.get("ReturnStatus").equals(0)) { if (jsonObject.get(code).equals(0)) { bool = true; taskWrk.setMarkStart(1); } @@ -754,14 +673,7 @@ .orderBy("io_pri", false)); 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 (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { continue; @@ -810,7 +722,7 @@ } try { HashMap<String, Object> headParam = new HashMap<>(); headParam.put("TaskNo", taskWrk.getTaskNo()); headParam.put("taskNo", taskWrk.getTaskNo()); String response; response = new HttpHandler.Builder() // .setHeaders(headParam) @@ -1274,7 +1186,7 @@ return response; } private TaskWrk createInTask(Result result, String barcode, Integer startPoint) { private TaskWrk createInTask(WmsResult result, String barcode, Integer startPoint) { //String locNo = Utils.Fusion(result.getRow(), result.getFloor(), result.getColumn()); String locNo = result.getLocNo(); @@ -1312,56 +1224,161 @@ // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); for (DevpSlave.Sta outSta : devp.getOutSta()) { WrkMast pakout = wrkMastMapper.selectWorkingPakout(outSta.getStaNo()); switch (outSta.getStaNo()) { case 203: for (DevpSlave.Sta inSta : devp.getInSta()) { WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getBackSta()); switch (inSta.getBackSta()) { case 116: if (pakout != null) { if (devpThread.ioModeOf1F1 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf1F1 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) { && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE; devpThread.ioModeOf1F1 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf2F = IoModeType.PAKIN_MODE; devpThread.ioModeOf1F1 = IoModeType.PAKIN_MODE; } break; case 401: case 117: if (pakout != null) { if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) { if (devpThread.ioModeOf1F2 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf4F = IoModeType.PAKOUT_BOOTING; devpThread.ioModeOf1F2 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) { && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE; devpThread.ioModeOf1F2 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf4F = IoModeType.PAKIN_MODE; devpThread.ioModeOf1F2 = IoModeType.PAKIN_MODE; } break; case 118: if (pakout != null) { if (devpThread.ioModeOf1F3 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf1F3 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf1F3 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf1F3 = IoModeType.PAKIN_MODE; } break; case 119: if (pakout != null) { if (devpThread.ioModeOf1F4 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf1F4 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf1F4 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf1F4 = IoModeType.PAKIN_MODE; } break; case 120: if (pakout != null) { if (devpThread.ioModeOf1F5 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf1F5 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf1F5 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf1F5 = IoModeType.PAKIN_MODE; } break; case 203: if (pakout != null) { if (devpThread.ioModeOf2F1 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf2F1 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf2F1 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf2F1 = IoModeType.PAKIN_MODE; } break; case 207: if (pakout != null) { if (devpThread.ioModeOf2F2 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf2F2 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf2F2 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf2F2 = IoModeType.PAKIN_MODE; } break; case 212: if (pakout != null) { if (devpThread.ioModeOf2F3 != IoModeType.PAKOUT_MODE) { // 出库切换中 devpThread.ioModeOf2F3 = IoModeType.PAKOUT_BOOTING; WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getBackSta()).isLoading() && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { // 出库模式 devpThread.ioModeOf2F3 = IoModeType.PAKOUT_MODE; } } } else { // 入库模式 devpThread.ioModeOf2F3 = IoModeType.PAKIN_MODE; } break; } } } } catch (Exception e) { e.printStackTrace(); } } } src/main/java/com/zy/asrs/service/impl/ToWmsServiceImpl.java
New file @@ -0,0 +1,196 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.TaskWrkReport; import com.zy.asrs.entity.wms.StorageEscalationParam; import com.zy.asrs.entity.wms.WmsResult; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import com.zy.common.utils.Synchro; import com.zy.core.cache.MessageQueue; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.properties.SlaveProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Date; import java.util.HashMap; @Service public class ToWmsServiceImpl implements ToWmsService { @Autowired private TaskWrkService taskWrkService; @Autowired private SlaveProperties slaveProperties; @Autowired private TaskWrkReportService taskWrkReportService; @Autowired private StaDescService staDescService; @Autowired private CommonService commonService; @Autowired private LocMastService locMastService; @Autowired private BasDevpService basDevpService; @Autowired private ApiLogService apiLogService; @Value("${wms.url}") private String wmsUrl; /** * 申请入库 */ @Value("${wms.inboundTaskApplyPath}") private String inboundTaskApplyPath; /** * 任务开始时,WCS回调WMS */ @Value("${wms.taskExecCallback}") private String taskExecCallback; /** * 任务完成结束时,WCS回调WMS */ @Value("${wms.taskStatusFeedbackPath}") private String taskStatusFeedbackPath; @Value("${wms.code}") private String code; @Value("${wms.successCode}") private String successCode; @Value("${wms.msg}") private String msg; @Value("${wms.data}") private String data; @Override public void addReportLog(TaskWrk taskWrk) { TaskWrkReport taskWrkReport = new TaskWrkReport(); Synchro.Copy(taskWrk, taskWrkReport); taskWrkReport.setCreateTime(new Date()); taskWrkReportService.insert(taskWrkReport); } @Override public WmsResult getLocNoFromWms(StorageEscalationParam wmsParam) { String response = ""; Boolean success = false; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(wmsParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get(code)) && jsonObject.get(code).equals(successCode)) { WmsResult result = JSON.parseObject(jsonObject.get(data).toString(), WmsResult.class); return result; } } catch (IOException e) { } finally { addApiLog("入库任务请求获取库位", wmsUrl + inboundTaskApplyPath, JSON.toJSONString(wmsParam), response, success); } return null; } public boolean checkLocNo(String locNo) { try { BasDevp basDevp = basDevpService.selectById(inSta.getStaNo()); if (Cools.isEmpty(basDevp)) { log.error("站点号异常1" + inSta.getStaNo()); throw new CoolException("站点号异常1,未查询到站点信息" + inSta.getStaNo()); } Integer staNoCrnNo = Utils.StaNoCrnNo(inSta.getStaNo()); if (staNoCrnNo == 0) { basDevp.setStaErr(1); basDevpService.updateById(basDevp); log.error("站点号异常2" + inSta.getStaNo()); throw new CoolException("站点号异常2,站点号不存在" + inSta.getStaNo()); } else { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("crn_no", staNoCrnNo.longValue()) .eq("loc_no", result.getLocNo())); if (Cools.isEmpty(locMast)) { basDevp.setStaErr(1); basDevpService.updateById(basDevp); log.error("站点号异常3" + inSta.getStaNo()); throw new CoolException("站点号异常3:此巷道不存在目标库位" + inSta.getStaNo()); } } } catch (Exception e) { // log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e); // 退回 log.error("扫码检测程序异常" + inSta.getStaNo() + errMsg); log.error("扫码检测程序异常,异常信息" + e); staProtocol.setWorkNo((short) 9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); if (taskWrk != null) { taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 taskWrkMapper.updateById(taskWrk); } continue; } //查看该库位是否为空库位 LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "O") .eq("loc_no", result.getLocNo())); if (Cools.isEmpty(locMast)) { try { HashMap<String, Object> headParam1 = new HashMap<>(); headParam1.put("taskNo", result.getTaskNo()); headParam1.put("status", 6); headParam1.put("ioType", 1); headParam1.put("barcode", BoxNo); String response2; response2 = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(headParam1)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response2); apiLogService.save("wcs派发库位==》不为空《==上报wms" , wmsUrl + taskStatusFeedbackPath , null , "127.0.0.1" , JSON.toJSONString(headParam1) , response , true ); } catch (Exception e) { log.error("wcs派发库位==》不为空《==上报wms", result.getTaskNo()); throw new CoolException("wcs派发入库任务上报wms失败,派发库位==》不为空《==,异常信息:" + e); } } } private void addApiLog(String nameSpace, String url, String param, String response, Boolean success) { apiLogService.save(nameSpace, url, null, "127.0.0.1", param, response, success); } } src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -10,7 +10,6 @@ import com.zy.common.utils.Synchro; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -33,16 +32,9 @@ @Autowired private TaskWrkReportService taskWrkReportService; @Value("${wms.url}") private String wmsUrl; @Value("${wms.TaskExecCallback}") private String TaskExecCallback; @Scheduled(cron = "0/3 * * * * ? ") public void execute() throws IOException { for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) { switch (taskWrk.getStatus()) { case 4: src/main/java/com/zy/asrs/task/TaskReportScheduler.java
@@ -2,11 +2,13 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.entity.TaskWrkReport; import com.zy.asrs.entity.TaskWrkReportLog; import com.zy.asrs.entity.wms.WmsFeedback; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.TaskWrkReportLogService; import com.zy.asrs.service.TaskWrkReportService; @@ -19,7 +21,7 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.util.HashMap; import java.util.Date; /** * 定时将任务(完成、取消)转成日志 @@ -47,30 +49,26 @@ @Scheduled(cron = "0/3 * * * * ? ") public void execute() throws IOException { Page<TaskWrkReport> taskWrkReportPage = taskWrkReportService.selectPage(new Page<>(0, 10)); Page<TaskWrkReport> taskWrkReportPage = taskWrkReportService.selectPage(new Page<>(0, 100), new EntityWrapper<TaskWrkReport>().orderBy("createTime", true)); if (taskWrkReportPage.getRecords() != null) { //新增一个过滤机制 for (TaskWrkReport taskWrk : taskWrkReportPage.getRecords()) { HashMap<String, Object> headParam = new HashMap<>(); if (taskWrk.getStatus().equals(TaskStatusType.OVER.id) || taskWrk.getStatus() == 7) {//完成 headParam.put("Result", 1); } else if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) { headParam.put("Result", 2); } WmsFeedback wmsFeedback = getWmsFeedback(taskWrk); String response = ""; Boolean bool = false; try { headParam.put("TaskNo", taskWrk.getTaskNo()); log.info("wcs手动完成任务上报wms={}", taskWrk); response = new HttpHandler.Builder() // .setHeaders(headParam) .setUri(wmsUrl) .setPath(TaskExecCallback) .setJson(JSON.toJSONString(headParam)) .setJson(JSON.toJSONString(wmsFeedback)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); TaskWrkReportLog taskWrkLog = new TaskWrkReportLog(); Synchro.Copy(taskWrk, taskWrkLog); taskWrkLog.setId(null); if (!taskWrkReportLogService.insert(taskWrkLog)) { throw new CoolException("转历史档失败" + taskWrkLog); } @@ -81,11 +79,11 @@ } catch (Exception e) { log.error("wcs手动完成任务上报wms失败{},返回值={}", taskWrk, response); } finally { apiLogService.save("wcs完成或者取消任务上报wms" apiLogService.save("任务状态上报" , wmsUrl + TaskExecCallback , null , "127.0.0.1" , JSON.toJSONString(headParam) , JSON.toJSONString(wmsFeedback) , response , bool ); @@ -95,4 +93,14 @@ } private WmsFeedback getWmsFeedback(TaskWrkReport taskWrk) { WmsFeedback feedback = new WmsFeedback(); feedback.setBarcode(taskWrk.getBarcode()); feedback.setReportTime(DateUtils.convert(new Date())); feedback.setIoType(taskWrk.getIoType()); feedback.setTaskNo(taskWrk.getTaskNo()); feedback.setStatus(taskWrk.getStatus()); return feedback; } } src/main/java/com/zy/core/model/DevpSlave.java
@@ -27,6 +27,7 @@ private List<Sta> pickSta = new ArrayList<>(); @Data public static class Sta { src/main/resources/application-prod.yml
@@ -1,6 +1,6 @@ wcs-slave: doubleDeep: true #双深 doubleLocs: 1,4,5,8 #双深库位排号 1,4,5,8 doubleLocs: 1,4,5,8,9,12 #双深库位排号 groupCount: 4 #一个堆垛机负责的货架排数 crn[0]: #堆垛机1 id: 1 @@ -139,8 +139,8 @@ emptyInSta[0]: #空板入库口0 staNo: 116 inSta[0]: #入库口1 staNo: 116 backSta: 101 staNo: 101 backSta: 116 barcode: ${wcs-slave.barcode[0].id} inSta[1]: #入库口2 staNo: 117 @@ -151,24 +151,24 @@ backSta: 107 barcode: ${wcs-slave.barcode[2].id} inSta[3]: #入库口4 staNo: 119 backSta: 110 staNo: 110 backSta: 119 barcode: ${wcs-slave.barcode[3].id} inSta[4]: #入库口1 staNo: 120 backSta: 113 inSta[4]: #入库口5 staNo: 113 backSta: 120 barcode: ${wcs-slave.barcode[4].id} inSta[5]: #入库口2 staNo: 203 backSta: 110 inSta[5]: #入库口6 staNo: 202 backSta: 203 barcode: ${wcs-slave.barcode[5].id} inSta[6]: #入库口3 staNo: 207 backSta: 110 inSta[6]: #入库口7 staNo: 206 backSta: 207 barcode: ${wcs-slave.barcode[6].id} inSta[7]: #入库口4 staNo: 212 backSta: 110 inSta[7]: #入库口8 staNo: 211 backSta: 212 barcode: ${wcs-slave.barcode[7].id} outSta[0]: #出库口1 staNo: 116 src/main/resources/application.yml
@@ -47,18 +47,13 @@ # 是否开启上报 start: true # WMS系统ip #url: 10.32.53.195:8080 # WMS系统ip # url: 10.210.157.109:8090 url: 10.10.10.222:2410 # 入库任务申请接口 #inboundTaskApplyPath: api/InterFace/inboundTaskApply inboundTaskApplyPath: api/StereoscopicCallBack/AcceptTaskStatus # inboundTaskApplyPath: open/asrs/inboundTaskApply # 任务开始时,WCS回调WMS taskStatusFeedbackPath: api/StereoscopicCallBack/TaskExecCallback # 任务完成结束时,WCS回调WMS TaskExecCallback: api/StereoscopicCallBack/TaskExecFinishedCallback taskExecCallback: api/StereoscopicCallBack/TaskExecFinishedCallback # 移库申请接口 movePath: api/InterFace/get_InterFace_TestStorage code: code src/main/resources/mapper/WrkMastMapper.xml
@@ -177,7 +177,7 @@ where wrk_no > 0) )) and io_type != 11 and source_sta_no = #{sourceStaNo} and sta_no = #{staNo} order by io_time,wrk_no </select> </mapper>