From dbe8aaf7763d99816551fab61982ae95116c210e Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Wed, 26 Oct 2022 15:39:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/service/impl/AcsToWmsServiceImpl.java | 3 +- .../sendMaterial/GjxSendMaterialTask.java | 173 +++++++++++------- .../wql/QSCH_gjxSendMaterial_01.wql | 14 +- .../src/main/java/org/nl/wms/wms.xls | Bin 253952 -> 291328 bytes .../src/views/wms/sch/task/index.vue | 3 +- 5 files changed, 120 insertions(+), 73 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 0150b5f..93bc0f4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -117,7 +117,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { public String againApply(String task_id) { log.info("输入参数:" + task_id); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonTask)) throw new BadRequestException("任务已删除或已完成!"); String point_code = ""; String message = ""; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java index 6903cb1..29008ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java @@ -32,6 +32,8 @@ import java.util.List; @RequiredArgsConstructor @Slf4j public class GjxSendMaterialTask extends AbstractAcsTask { + //任务步骤描述:task_step 1-创建,2-确定起点,3-确定终点,4-起点终点确认, + // 5-下发,6-执行,7-二次申请,8-执行,9-完成,10-取消 private final String THIS_CLASS = GjxSendMaterialTask.class.getName(); @@ -51,17 +53,17 @@ public class GjxSendMaterialTask extends AbstractAcsTask { if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); } - String point_code2 = taskObj.getString("point_code2"); - String point_code3 = taskObj.getString("point_code3"); - //说明未二次申请过 - if (ObjectUtil.isEmpty(point_code3)) { - JSONObject json = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - json.put("lock_type", "1"); - pointTab.update(json); - } + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); taskObj.put("remark", "已取消"); taskTab.update(taskObj); + + //释放相关电位信息 + JSONObject param1 = new JSONObject(); + param1.put("lock_type", "1"); + param1.put("task_id", ""); + param1.put("material_id", ""); + pointTab.update(param1, "task_id = '" + taskObj.getString("task_id") + "'"); } if ("1".equals(status)) { @@ -73,13 +75,23 @@ public class GjxSendMaterialTask extends AbstractAcsTask { } if (StrUtil.equals(status, "2")) { + + //判断状态, + if (StrUtil.equals("2", taskObj.getString("task_status"))) { + // 更改任务状态为完成 + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + return; + } // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); - String point_code3 = taskObj.getString("point_code3"); - JSONObject point3Obj = pointTab.query("point_code = '" + point_code3 + "'").uniqueResult(0); + + String point_code2 = taskObj.getString("point_code2"); + JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); JSONObject requestObj = task.getJSONObject("request_param"); //工单标识 String workorder_id = requestObj.getString("material_info_id"); @@ -87,8 +99,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask { WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); - JSONObject point3 = pointTab.query("point_code = '" + point_code3 + "'").uniqueResult(0); - //区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); @@ -97,9 +107,9 @@ public class GjxSendMaterialTask extends AbstractAcsTask { regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); regionIoObj.put("buss_date", DateUtil.today()); regionIoObj.put("io_type", "1"); - regionIoObj.put("region_id", point3.getString("region_id")); - regionIoObj.put("region_code", point3.getString("region_code")); - regionIoObj.put("region_name", point3.getString("region_name")); + regionIoObj.put("region_id", endPoint.getString("region_id")); + regionIoObj.put("region_code", endPoint.getString("region_code")); + regionIoObj.put("region_name", endPoint.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); regionIoObj.put("qty", requestObj.getString("qty")); @@ -119,12 +129,12 @@ public class GjxSendMaterialTask extends AbstractAcsTask { WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_StructIvt"); JSONObject ivtObj = new JSONObject(); ivtObj.put("stockrecord_id", IdUtil.getLongId()); - ivtObj.put("point_id", point3Obj.getString("point_id")); - ivtObj.put("point_code", point3Obj.getString("point_code")); - ivtObj.put("point_name", point3Obj.getString("point_name")); - ivtObj.put("region_id", point3Obj.getString("region_id")); - ivtObj.put("region_code", point3Obj.getString("region_code")); - ivtObj.put("region_name", point3Obj.getString("region_name")); + ivtObj.put("point_id", endPoint.getString("point_id")); + ivtObj.put("point_code", endPoint.getString("point_code")); + ivtObj.put("point_name", endPoint.getString("point_name")); + ivtObj.put("region_id", endPoint.getString("region_id")); + ivtObj.put("region_code", endPoint.getString("region_code")); + ivtObj.put("region_name", endPoint.getString("region_name")); ivtObj.put("instorage_time", DateUtil.now()); ivtObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); ivtObj.put("ivt_qty", requestObj.getString("qty")); @@ -133,19 +143,26 @@ public class GjxSendMaterialTask extends AbstractAcsTask { ivtTab.insert(ivtObj); // 点位解锁 - point3Obj.put("lock_type", "1"); - point3Obj.put("point_status", "3"); - pointTab.update(point3Obj); + endPoint.put("lock_type", "1"); + endPoint.put("point_status", "3"); + endPoint.put("material_id", taskObj.getString("material_id")); + pointTab.update(endPoint); + //释放整列货位 + JSONObject param = new JSONObject(); + param.put("lock_type", "1"); + pointTab.update(param, "task_id = '" + task_id + "'"); + } } @Override public void findNextPoint() { + //判断共挤线是否有执行中的任务,如果任务数>=3,则不生成任务 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); /* * 根据业务找对应的终点 */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0); for (int i = 0; i < taskArr.size(); i++) { @@ -159,31 +176,51 @@ public class GjxSendMaterialTask extends AbstractAcsTask { param1.put("vehicle_type", "%" + vehicle_type + "%"); //1、查找库区类是否有响应的载具类型和对应的物料 JSONObject json1 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param1).process().uniqueResult(0); + + + //判断是否有到同一列的相同物料SKU的AGV任务,如果有,则等待 + JSONArray taskIngs = taskTab.query("is_delete='0' and material_id = '" + material_id + "' and (task_status = '4' or task_status = '5' or task_status = '6' )").getResultJSONArray(0); + + if (ObjectUtil.isNotEmpty(taskIngs)) { + JSONObject taskIng = taskIngs.getJSONObject(0); + if (ObjectUtil.isNotEmpty(taskIng) && ObjectUtil.isNotEmpty(json1)) { + JSONObject point2 = pointTab.query("point_code = '" + taskIng.getString("point_code2") + "'").uniqueResult(0); + if (StrUtil.equals(point2.getString("block_num"), json1.getString("block_num")) + && StrUtil.equals(point2.getString("col_num"), json1.getString("col_num"))) { + taskObj.put("remark", "相应列有AGV在工作,等待执行!"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + } + } + + if (ObjectUtil.isNotEmpty(json1)) { Integer block_num = json1.getInteger("block_num"); Integer row_num = json1.getInteger("row_num"); Integer col_num = json1.getInteger("col_num"); - //拿到第一排 - JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and col_num = '" + col_num + "' and row_num ='1'").uniqueResult(0); + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and col_num = '" + col_num + "' and row_num ='" + (row_num - 1) + "'").uniqueResult(0); if (ObjectUtil.isEmpty(firstRow)) throw new BadRequestException("数据错误,请校验!"); taskObj.put("point_code2", firstRow.getString("point_code")); taskObj.put("update_time", DateUtil.now()); - //需要设置等待点 - if (row_num > 2) { - //二楼终点追加任务 - taskObj.put("acs_task_type", "4"); - } else if (row_num == 2) { - //二楼普通任务 - taskObj.put("acs_task_type", "2"); - } - //把物料信(SKU)息更新到点位上 - JSONObject param = new JSONObject(); - param.put("material_id", taskObj.getString("material_id")); - pointTab.update(param, "block_num = '" + block_num + "' and row_num = '" + (row_num-1) + "' and col_num = '" + col_num + "'"); - + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + //二楼普通任务 taskTab.update(taskObj); + //锁住相关货位 + JSONObject point = new JSONObject(); + point.put("lock_type", "2"); + point.put("task_id", taskObj.getString("task_id")); + pointTab.update(point, "block_num = '" + block_num + "' and col_num = '" + col_num + "' and row_num <= '" + (row_num - 1) + "'"); + } else {//找空位入 + if (ObjectUtil.isNotEmpty(taskIngs) && taskIngs.size() > 1) { + taskObj.put("remark", "相应列有AGV在工作,等待执行!"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + JSONObject param2 = new JSONObject(); param2.put("flag", "2"); param2.put("region_code", "YSQA01"); @@ -197,12 +234,18 @@ public class GjxSendMaterialTask extends AbstractAcsTask { } else { Integer block_num = json2.getInteger("block_num"); Integer col_num = json2.getInteger("col_num"); - JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and col_num = '" + col_num + "' and row_num ='1'").uniqueResult(0); + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and col_num = '" + col_num + "' and row_num ='9'").uniqueResult(0); taskObj.put("point_code2", firstRow.getString("point_code")); - //二楼终点追加任务 - taskObj.put("acs_task_type", "4"); + //二楼普通任务 + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); + //锁住相关货位 + JSONObject point = new JSONObject(); + point.put("lock_type", "2"); + point.put("task_id", taskObj.getString("task_id")); + pointTab.update(point, "block_num = '" + block_num + "' and col_num = '" + col_num + "' and row_num <= '" + 9 + "'"); + } } @@ -211,16 +254,18 @@ public class GjxSendMaterialTask extends AbstractAcsTask { @Override public List addTask() { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); /* * 下发给ACS时需要特殊处理 */ - JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + JSONArray arr = taskTab.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); ArrayList acsTaskArr = new ArrayList<>(); for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); + //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - String point_code = json.getString("point_code3"); + String point_code = json.getString("point_code2"); String newPoint = point_code.substring(0, 4) + "1" + point_code.substring(4, 9); AcsTaskDto dto = AcsTaskDto.builder() @@ -271,6 +316,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask { .task_name("共挤线满料") .task_status(TaskStatusEnum.SURE_START.getCode()) .point_code1(point_code1) + .acs_task_type("2")//2楼AGV普通任务 .vehicle_code(vehicle_code) .material_qty(qty) .material_info_id(workOrderObj.getLong("workorder_id")) @@ -292,9 +338,13 @@ public class GjxSendMaterialTask extends AbstractAcsTask { @Override public void forceFinish(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status < " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { this.updateTaskStatus(taskObj, "2"); + } else { + throw new BadRequestException("任务已删除或者已完成!"); + } + } @@ -303,6 +353,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask { } + //TODO 暂时不用二次申请 @Transactional(rollbackFor = Exception.class) @Override public String againApply(String task_id) { @@ -315,28 +366,22 @@ public class GjxSendMaterialTask extends AbstractAcsTask { WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表 JSONObject taskObj = taskTab.query("task_id ='" + task_id + "'").uniqueResult(0); - JSONObject jsonPoint2 = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); - // 根据 区域、块、列找到第一个有物料的货位 - JSONObject jsonOnePoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") + - "' and block_num = '" + jsonPoint2.getString("block_num") + - "' and col_num = '" + jsonPoint2.getString("col_num") + - "' and point_status = '1' order by row_num desc").uniqueResult(0); + JSONObject jsonPoint3 = pointTab.query("point_code = '" + taskObj.getString("point_code3") + "'").uniqueResult(0); + //提前更新这列货位状态,方便生成往这列的任务 + jsonPoint3.put("point_status", "3"); + jsonPoint3.put("material_id", taskObj.getString("material_id")); + pointTab.update(jsonPoint3); + //释放相关货位 + JSONObject point = new JSONObject(); + point.put("lock_type", "1"); + point.put("task_id", ""); + pointTab.update(point, "task_id = '" + taskObj.getString("task_id") + "'"); - if (ObjectUtil.isEmpty(jsonOnePoint)) throw new BadRequestException("该列库存状态有误,请检查!"); - - taskObj.put("point_code3", jsonOnePoint.getString("point_code")); - taskObj.put("remark", "二次申请货位"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - String point_code = jsonOnePoint.getString("point_code"); + String point_code = taskObj.getString("point_code3"); String newPoint = point_code.substring(0, 4) + "1" + point_code.substring(4, 9); - - // 点位上锁 - jsonOnePoint.put("lock_type", "2"); - pointTab.update(jsonOnePoint); return newPoint; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql index 0e1fdc2..e968122 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql @@ -51,13 +51,13 @@ p.row_num, p.col_num FROM - SCH_BASE_Point p - where p.is_used = '1' - AND is_delete = '0' - AND lock_type = '1' - AND p.row_num >1 - and p.point_status='1' + where + p.is_used = '1' + AND is_delete = '0' + AND lock_type = '1' + AND point_status = '3' + and row_num>1 OPTION 输入.material_id <> "" p.material_id = 输入.material_id ENDOPTION @@ -67,7 +67,7 @@ OPTION 输入.vehicle_type <> "" p.can_vehicle_type like 输入.vehicle_type ENDOPTION - ORDER BY block_num,row_num + ORDER BY block_num,col_num,row_num ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index e55151dce31f214284e343d5b2f6d82c00941411..19d2354bfd85d7d85fa9f307756dd234e1738461 100644 GIT binary patch delta 51084 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 delta 20244 zcmbt+30zcF7x=w*-VDPg1G3{X3?iT)`{K#~f|wf!2yVzWBFdIvt~rp}W+nR6Yi5a- zX_jg6=~$NHSE;!qnG0Gb?v`1oxmC*l-22`Pp!j{?|NnpQ_vW5=?zv~X=bm@(eGjTG zIabv>)C9T+2q6p?KQss}0Dvrw>#X_}fSH(92MZ^cmNzUT0v=SSB!#3?bKN7?tJfOw zLLjIL7v~7`Nv~4zFX0($SHQTz)miiw+&XP*{)W>@^x|~o7{LQ7X~;I>T-T(uR*TcD z?CS<~awFmv2lu)RO_<=31O#_lK#hL^zz(6iwh1|-B(c`nt%KTLa&1G0wO&%~GMA2; z2FguCI;^$*kBrT2YoP5A(6YVC-FVv}BIEpIt;BhV*zDqlhb;4gA5rVN5hsI%TJf5z z15Of~T-~1bE0(z>KdtWnA1`+Ia2MBlI$2469VVuD4DlFlHgLJ4BekWrNO0u_ju5wb zxZ#nawzC@^#eY-8`yNAZs;KvL^BCQx)t>Hqx|>_2iRGTbU~?_dJn0-8*>w$`%rC7j zs&n^pP~vpaUmJ`wmL&r8jnl=H2-X1ji+j9P;*3E~aF^rVRdn%j7bCr$#1^fpGeo;P zIEx*mp4*=xHgM6`d^Q4o4G0}0YWlNZrm18cSH@!uG`dNg5Srzv(QAwPV!TUk$z5MS)@{2 z?)L+o;)N zy!O;!0;dCMK;6LMYXOsR7E`{gr?prU>B4(#ZKS)nRmaq64Yx63bFZ188tZLyFiIi0 ztvAEyxi6XkPG2^F>CMpK+=1L(fo>j|yc?kdk^x|c%3kh9pyXZmfUvGJ>nzo>Kwz;c z1qF{y9==TF;GhtwVNolM2&s#B=ZJfPm>-ZFzmNAqbC4tvE1vWzgjFA=Gy4T|`?z_e z10Sq___gRJ1>ktGs?SVr7lxQYY9M2WCBQYotmi@@62LA?Ur2csEP~!0vn&KW9~^=+ z#aiCk^-2miE)z?0_xSx3ZWQ}6*XaO_%uW^R6|%HhMU>|FEK5`8K5Z< zLqub=O570W1ZsxDDAFQi$8?0lqGl5xznVeJTnGw2ii0A1$)gFxKNiFg@gNQifSfZ% zWZ4E>*3S(h##(HQbO0`_UK%4(zK~!ZHR7Zw)@e0SENo?KAxHfY<<2w*sCzWaRxFf9 zMKj9Q@g{Y(Io~uzGY%}2GdOi@4C5druksj%m40huq)y<8%+d+w;A)6r!6k(%3|u}W zBm6o;Yv>+vQeSt`!AB(;Ad4;Oo5T3`Wm2{MPVu0)NgSW>4rImtjHi^#Sn4)gFXgye zs0Ba6Z^p6#Lx3;@MhoP44sRL|EVlG_7ti%piQ9X-i;D(2arj7YCowb7T^u#A29Fb) z1}+iTf?5-OoOl@&3FRO*Tv;ADIw%JqaNB?AKxxP_CohSu0R@?>xEsW1J>!$2=g#FL zi;XmY|X);cc$1;_6sc!GFsa4??09$*thHUuU>u-)WC+njl& zAuvJANgSWdW`5sw;r5f`a& zWrcg4_SMf^j5}R1m`^aCkVhARZ$IqL?gjjkA%DuBi#ttbxWoPuuG~RCFqn2kU4a;~f zef{|8JVu;#KqBrwW8+BgshM2Ngo_eR@!I>@63z)V2ZCpi5?`LUB>S&aL#mj~S`SJT z->sbzu+M68n~o*O0iot?RzQzb%{5TsdIh=(cg=PBbuU?ohc7@wDF1&x`or>Qd81J3E`pSU> zeSq!zW0fCGT%ik|xAbHkJ^IS5TQ;|zy>_Up*Qdtli}x45vZi_PmFI5wx*aN*f6`5; znfCGwn;7H!EfK>j{+xZfYvm6cZ0C&XrP=5@-nuCC*@Mm9Z!i0|kg-kk)rNmuJvP>L z3EBS7zVDiwLkiAxua3QtJZ$}lTQ4h8KYe50g0K6WRt{XCMTG-LDAyI%-K@-?9i|$# zwW)7-cv|zHZ`+M9Zd+IKiOs06_$^l^Oq>`rYhRaLNf&<^bN*ZZ%K3Z4*B*5naHz{s zRpW#Erw9G?c0Z53ALaQL9{6m|p!{XmuWYirI=7(jh7#j~i}=f{|EwLl^2GJVep@le)alB1=(iOE_V)9v@}F_-Vbhh1Z|Wj;AM|NBk$Cvt*1unS_#XN$ z-)KCLzw}G*qgS8pdZ21(&e;aqeZaRr{ds<3?2Nfhn@>DyY5Bt;#HyT` zj~W53hRb z(GBmTZ*JZ_p~uDnJ1T}Gcpb0Vr573>~rU5U&%PSdd1A=$68&_JNjOP z{!y@gcT-#%vTg1LqizpOrNpk=qLlAKI=Eh!wQZBjrw0nLV>Q&h0M{b8PQXBpt#jNb zV!P{b`>>^@PA@toggswnxtoQ_>#o#ZSPaz3f zBlIDZUqLy#4xyhds6k6>dk!2y?+-jQ|jPglcynv=ho06GADS5LyT2 zXHa_VL?{%p?7+_;Q^It4EtDoG?LJ4S2h4vepj-^)9VqQ#(P953LcY#0^M=yV1)-z6 z5xNTHwLM^!8$v(VBXk$a&-Ws93}%UCDKyywpdd4t8J=fEJ?FS^i#&{?qf zgYyWz2Nv(TfY1&wczP7&>K8(1Im3+j)WoM2c9?pC42Zyyn#>@cx2A+ z2&I8Xmiz(BVI#QY{buL~aLI2s5&8y#NOc<&0FT7~iI5j~4*vE z0Um-n=m^fE^HX^^x8q?Y>qz-Nu%a4hqD*?QgXr@NN2BAdV)tG1W$4XMBr( z9f*HY?bTxRNl!~>_ApKEgR6+~9)^(wd|}*x{r7O|sp39j-Shy%DC0C3Xdd9!Q^hr6 zz0itdkc4NReH_mMKmpf%3~`Ef>-eoL+}_7_oEeLpc8%yup*YgMJ?h&~obVXRBkT!O zQP>j=KYS8(15n0x>}B;~fVI~|#GTtcrRPr11Oh*kM$90Hj zeb*5^i|>x`ES}rrCrN@KRXkQ9;UQ^uh=-KYAs$jpd%VdQf#ZqIl>m%Bj=?Bo0FOfx zB$XV+puaGr9!m)Rjm_sj;BOW#ECe57$h(#he1y$s3pOeHxZ^?>1 zE~-^|C0QfWFd-^pKCS2{m3S^z)1VnR4O`Rd8F&;F-_O7aP`EtDi?LGiHY;rCc~;m` z-ujha zG>#PtYLJRoq+*Lyd@mJuq{3qk-UyU?=kNxXSs_sCxwyHLt_-8b7vOQS9HV0!T0KZl zk0bp|_<8)PBA^p&3$Xsx@gD00i}$CTrk|>?OXmOw;s#lV(d)pa4&TZcKjPNEk|a> zBIGG%F>_6aKf`P7K(tY&_xdlQm+!-$IoM4979;W#M&%b;MNoo46o&^wF0nnz?SW9zFxXP4z27ipf74JgT|Io`6diktL zc@}F_0ghy|><FNJmoYEx`-V#ZqGspeQ^z=;(x%~u=BISo1iPb3GF@%zipa5 zhO8FoTlaA@e%AEb1H6=gQr`bJO8Gp*=_+V+nh$9m?22IIM4onbHq|P~>q_EIXs|U& zf~Ymkv?iNX_%zjN$YOkfe#{F~KS#3Bnz5B_WnuasVujjxk?Vc0<7+_9a%4Y9ao6z~ z%bfzf2Joq(?5Q*2}r6;LYCCEBM8iFLS+e~}yXXU*xnF2u{Bm9jsle4kO?z$azO z0YLd1{j&@4#n-53SMc5MbU;@U3M4vIh=4C7Y{GEOct;b)-7vy0kIYVvF!xJGUK^`SkS&zKx{h!u}pxep&R)O zE9&t^`kI!EQ0TD({Ygvua*Vq-@l68^QWFgt4|;V*Qy|h#l+=MnbGu^~CIAF`^ zvfJR8gc@(sJN7!hEL)}LR-Kov(p#+3x3fxbu}aUZqJMc4FMNr*>WDA!x+3$6e?tq&oXTG+v@nzNBxP219s*`M$(0 z;3|go5SKT^qWcigeLiLrpWUb%8UnpLA9$31g1zWzU*ZIow8)Z^xg{_xIfrDh?0Z9R%{xGRbo199iPkj@of zN#E~H%5uNQhvX5E0q7s_LD{t#z<4ufoB^)wYDuLTz}O_?RcI$-_Au{dfIXkdcr`kX z56j-mpjFnyg)Rsr&YB~#q%mAlAf_7wNthj5RFC1Uk7N2Eko3&|R;J4Yx?k}DS))vg zMwy_|cH|+uAk(5zCV2Q94gvgpVuLa{Pf(9*l?hqvIBt-&%9OM+1`#LN`(nw7^=KBz zJB9sazFC$Y%>sF?@snlg(JYWBat|;YvUrakm0|@^I9I_-4W`Lh(4h{lKs}Q(7DB!S z70EKkP5_~^u)8dDtVQTp5c&{Jw&2Y{I~IgKLS`e!a-pzw6DzS+1M5O)!vc3KvZlp- zi0`C52sU@Ph2ucj8!(lT`fMBs+aTlH2G2OKaF2{P_c3EX4urjr%rQF-Jo+72yMq4H zhj<&mKu*Axk&Oo-Tk!jGw~YrOU&wd?pw6=J@gSr|#;X8gk4mYv721X!Exgo_a=zi+ z<_Vmwf%3`I3C%ZxpV?!D`8ib27)<~_Z$fIB5p(laY%L3)07|Xk;wFHbkD#BS6^r5t zpp+TUas!KQ*0&SD@(+NH=KHV@dC0a{md*2!+1=S-*)C*ucQy!_fj0mz7C_lN^L4>2mMLTdDVirSi>Z4ku@BgU zf@Jqj0wreRKC*i!S(KQ>-Fu3T3?*(pW^YdF(3_{wV3bE|Ly4bP6_U=EQ6=Pec2%L} zP*$PW=!H-+!o429h1uky0CaJ%OfEJeIwTAhJ)JOJ5Jr0Tk|q&T+t8RN8`Ik07%%!m z7%8B`!il@#nC#XZZc(soQI5r;9Bz?0`Q%vKn#0{{9+x@XMDw`J0ko|H3!D! zws7KWJc?{&_vM1H^~hEhmJ7n9$6783Yt1~lAWV94<#J)>XGtyydl%VRc(JF~cDWC8 z%}+1hhvtlw$NG@%E=2RF&4Z{tirA}M7I%4E85cS|f&_J4#Z!%hX46a-DQudV$3{Or z5CLYK!dY_5d}w(JkA*unnDW64X&##oW}L$2k)ID{nDORGG82#wW?aU{W&h`cfJ^uX z*^GQJ9GYYsFVX`s>pv+MeE-O<2%1F=W0`61uh%d1Cw4j|& z3%F11p*6F%Kzcr3jfCfOgv{T-`A1TlDDtddl#HCrk+Tl?kUvgtw!K6HIQ*Q`jOPJ!P4~7Fp~l;&zy)utgT< z6}59-Q9I`qapxJ?IAobJmiN_Eo}FROpX)vq#2w);)|nrsf;cG)PX%#Dka+<#6~vkG z=9wF_d@6|B#ot0mcWkhA0<+3o+~pAl=%?fl9ibT%3Q;@;f^UY z4V00VZqq=SD%?-*+i9T8n_T&6V7qxb?F#f(V8}82CR&ZRB6hCk(K^Tm6-z>^B%#Gz zXm7dqib1FshIboWXt70TF$g^cb9lPHFX=%q&m+#Xr7v;zyDKYO!rQ^S5ZirQicIzO4^RLDp^X0sW;PiST?Vb1AcMDKi@t-JkTpr|5+K#Lv&X<|yZ)!8zQb za%d#2Im&sX2)emHiL^O|dZKIac1Vxuqyc0OcBT3Z;@`;=+Cn?{*bN{;H3Lb7)!;CK z!Unh93o-4DC!do}&SW(o13KP>!VKFJyPDohBpC$%V)|5XB;QQ>geG9z(h zdCBzgNaAB+z6P{BQ5T9%MRwGBY*MF9V_Tx?Q0E8&G9EW2jckY}thyv&1v(56<^8}802 zsD8BIxwPDse!hh0=!6%D4ZX60Otxq9Y&*w5k_A*Pw0a?|f65mS4gL2z;@nk$&Nd&* zWx&ocjIcM{j}vPY5F_S;5!3e;km2^66n@~vB~sAb1Hiv_KT(rLM6(x>Bs$@QLcLND z1bS^53G5;8m*)}}?23B9ly5YOK_PHPz?~0@goi+Pk;Kz2FA}wfEUsD&<4OALQUDk_ zgnsuTtU(dI@*?T$TLwvaIw}L!IY6~iV5TCZMG+)k&)(OUp$b%H8vGI&fT4eUXq62X zJP}KZY!-5y5ktugVOwNDrtCM!dc1NO(X-bsaIhMT^>oBCk^pZGTVM!bx_2E|`rR_( zN#U;v2HP?kRsn|z^!LVMh@k%Ol9rPT{OwzNDZyUfL$9${7rt_Z9?A|RuYO!I{huYT zB09WsDH#l#_0^vcFCJ(8LB=^cdntK_z~;RfZ99yirM{=llLQyKJWt568UZT)V}_9i|7B|GQr$*{QYUqyOHcodq2>0#CNXjjGieh$zG+ZUEacI7fo{C}%5T zRAtQ)0uM5v5!f5ISuzcSYvi^J-Xy~;JJd_C2Hv&v9d;&*F=__9(Jc7B+<*z@IlEfT z1*;iC7UnL&Y9@e<7QovvI9Z07up9~I!pdcs39FG|R;-d>W~33-N;h2CCJE-2?UeCM zK!XHxVb^4s3FB!7tYMZx(&1iY!a`)2k;X_c_o!ZixvXRkN2>)!lqFRN+ya@1F)Ekw zjAj^;zYRG94916Y0P;K}@HFgG6gG7p%U#`h8ysM=fp&67ZEb9X) ztDd5yBQFwHW0i!1tO>rCVP@$827`!XC>q<~wd|<@nlbti8Rnj0FwnDgO1X?@%hsAU zG@IJMJ0*I51ZJTF*cI$&sdNWe%u?xa@G2WwU&6iNARwsjBf>wB`jCAR^$K0O1r{?b zp+X(RiWX{U^wFd z7l)n)UNQWE63>650UHDol7K@LK#W%$N=yeZ1`vHY+em;DIjcmd4u>-W#Y2q=rwwe0;t54vQKn_3bEM?tn4}aEvm(9c4oYl$&JA z!R;vBxeMD!5Afn$p+-3iliE=d{?K9*fn*ZHI;eFb5Fv}>iN=oG+R_qjMnd@o8v<|? zEqKPllU8jbT?FO`pMohIP(#1MwVU{f728i&G)M%^71i8BFryW$YiP6pugu%q9^=Q>> z9??L>IPybn6as%Ia0p1fTkJWcw8OG|0^CrH+`H3ch@r z?J@AgF}EGvwk_lvNs)g(BWlxtJ*2#2OWff(WoD52bOv4aK8?Zs&aDj6p3dN(e?N^u zBfNGqYcTcc41W5WG-9e*O9X3w=x|qPgJ|vv(zzRJoC6u(%%rLf!&PqV?}%MtRimcA zt%mimL?nqhXH9QT!~Fvv9mHrY>}056UrRn@m_1z0_z(`$_dg`Vp~H4cH3F!DR-PoV z&r5?(5;vHZH?bO+ys-%Yd)flb=S^yPg2x`@S_$U!CbmHeG#WLn{)q(T!VQcC_Vj1- z60Hm~F?t5KpO7GbK(WtefnMkXMR^;zwhi3S3R8!(#LW*T7L2FdET;`z(*~}mj%P_{ z2lnk+vy29qmH`JC^%@xEw8>r(LF>;FPw>ExX9;W%Q`?_;(O)X2K>^bGCk9CRV<&#Qq3L0zNX(9O9%Z*Tz&3KBsSSVqSnI? zXv{=Skzp1qnRkc}c(h7JF)wY?(|0Zr*C7WaoHf(BS%U520fuQGV`a@)B}=e9!>6>t zuaaOD(9o+Of`#2(DeUg@yGeJ68>p&}r`eZbmu1ae;tG8{i}3*iVFpe207Vu;O%lo) zltj%E%-38n-(;k!UQnoInE53}g88x~nZZ@oAjjf6MIV4u5@_~A;_6lbQ9DfpVF;2SOYJAxLQ3LF$& zl{?PB9!&uI`wO-K(g@cDxQ@eh5-x^6C6}k6yhsf{lJ1c|0C){9_L<*hxURr;6|P_4 z`VFpM;kpjj4Y(MK-&wgdcZjLlSy4P4-=M$0s0cMiB_u?Lg+{{CBP=p1At(aY90@^j zNzq9`81)E^=$kZnFf1|Ro}U{N69Q|Ckm%5$kfbme5YNOV2E|0dN+KvSCNZLKVpU{# zctm{C^Y#V$A;o2Rxy5*Knz}qUAD1QN7FQ61-Kz=H4Y`%MLSC^;_mt^|0z-0sajp@m zh8CdX>B96G_VJ0c%F8NL2HeRpB;8O_UW{@p4TBBSi=M+Pof2kLRF;(#kvWS84=yUv zrjJD_iIWD$hxv!1kdQ!aSb#Q8U7<}wJ4y@fZK_{%7&SUBVR)jaW9^8vwAA5mX~wS7 zptR(~#Pp#f2cyKSN$GL%!xOb>#`L(+>D7rtOHrkv&@f%=cMv_?efE$mg4?z7eEJs0Zhn;MRMeq=9+BgnLUSL3OZJH89Wo$PH= z;LDU@+9WiiG{3T_tW>KhG*k{oQ_^Rb=NSA8@+zyal|Il;TTrDsBm~&o7_~pb5KSt2 z*>8xl;E?UhwpkTr(?;4Yuqvun4YbpSBq$Q_(8*d|NI_nhu72UyzUfoe7)rlV#c9!Q zExZV+3el#QY5VrIQrTiFh4(fF751B^CE8o-ID7`&qYO z_8#3HT??MJIBBx&TAfmN9<9}_6CN(p&0edkDqE|&K-cQl>RM`yIs?@2?P7p>Z{@4H zd)JD!MZQb4!^Q{B*PlDDjx|)CN6Jl?w_Zfwe3&)^`w6v(QC^x3KXwC)2=*;}0 zqSBoOhFQO+@5RPN!-t;3jv!sx&yVh@zjbo^!Ts7eyr8G^$?biG z_@*ue31!X2GfGNpM(LkFVBexFY*Dr-A1K56JW^h^4bS|;mYv#Pl;M9U{e*4br#XCk z?c`VAq0QUR9NV???%|j_U+)>}uwPRHBI@FM+{4DOK7ZktaQN%^89!2Is9CS|7yWy` zs0~e3Cw%e4@x~Kx54N}I9Xn7PKHXERxV;|N9(r*6Ohd!h_BP)GHsTU4L>K&S4v1)I zxIN&e{?h?X_BNSQineK&glqc~|8Z6UeG&}C#m*J}8dYGuO`kEjsCb4!J7ADj*OKdB zqcTSAXi!$K%JD8!mMI?;DZ>KtmHJ?%^3tMM{VW~)mn?qI^N(*vh!Xf44 z-8h#r<*3^U!v|L7V(5!jbE+JgvZjC7yGlQzB)7Bx#m}g$G@X4-u`!yapHTFB+WzzZ z+ve{YSAlOl6P!xp-GtpMwL;ZOd!bTw2A(E*S31XDm}ARccV_VCHnMD#_pyaFl6+|R zOCjlHP$Ld`c#ppniWFY3V_Qun3iyG8s@;XJVd`003f-_%HPF8R*8;c}!nFvAPWyUFf66#uUmyo)@q5Hw!=8Na0>yi9F<4x_FGS4% zesg%AyE6lJLG2fCeQBn;zb}G+<9&o7mgXL!>Mp_?cBmrVFsl-EW#47c^<9KP@In6h zE<&IRHd`>>L{m>FTK@*7WQ4ovgL}aoi2DQ?|fY7ZcSUp3UNDn2tTX;7o{U2*-m04oPA+7 zWI&UlY-tG~b|?-01C0UBO4w0sX}KtZ;p~8k8M-gfB|$x(sM)vk_ytcr!n zn`dsOz538G{`1o(lONgt`FBDFTT;LJ{#}QHax?zn{w{Zp%vO(B-}uS8 z6Kn0~neiun>~-?B>Q|qsa#U_UxIezaj32rG=8+xwug8vf=cnZJEB)4FnJZ4&<{W%G z<8S?&ipaRMbHg^6@vKaN{;T5MGY`*%FUlGR(6}(6vz?GQE8kFD)f>KH5@=4CkTg^n z6Cal{y=zjF7U90>Y~%7U_DgP6nMQIjVZ#CnAbalM7~DMc0hNed6!c^6qdd)ij^ZT7UlVZU>_&BZ zTEkouW?hD^Wwbg{NKmuC4ReIc@_HE?>5MEPjV9NSK>QZHlO-7O+jPcQVHErW4g{a0 zwV}0H4|m((0^Fc+0(>n?hm99}=-qKb7vWEb->m7#@q(5{jTfAysz-|5D4*tx6Fg0m zCkO&2J1{MtC@f!@A@o$hXrlocLLcxb9V?fwu+p=dekR}lBHw$A5!M0AU1Nj^tlA?} z7^}Dm?Pp{P*$inV;>T`vUQo|F%6T@O6!op%Aqrwu}UOIc5!71?rbrA^>iIFkUVbL)$ z;n97i3+jd>4Aey?L?%YWM1@7fM2AQ8WmimsDY`&dfN8x!(C?Tc)DUZQ)yO{)P{8X0 zKUzN(9xKH{CD{!M77O#0he4GhwxcwR9$ZH{(fO|v6?=iNhRj; + - + From 621572612453319f3f3871b213597b04bf959336 Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Wed, 26 Oct 2022 16:31:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=82=B9=E4=BD=8D=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sch/tasks/callEmpty/GjxCallEmpVehicleTask.java | 11 ++++++++++- .../sch/tasks/callEmpty/YqxCallEmpVehicleTask.java | 11 ++++++++++- .../sch/tasks/sendMaterial/GjxSendMaterialTask.java | 3 --- lms/nladmin-ui/src/views/wms/sch/task/index.vue | 4 ++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java index 6bab955..1e73ff8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java @@ -275,7 +275,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { .task_id(org.nl.wms.util.IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("") - .acs_task_type("3") + .acs_task_type("2") .task_name("养生A区>叠盘架空载具") .task_status(TaskStatusEnum.START_AND_POINT.getCode()) .point_code1(jsonStartPoint.getString("point_code")) @@ -319,6 +319,14 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 生产工单表 WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); //点位基础表 + //任务表【SCH_BASE_Task】 + //判断当前点是否有未完成的任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + form.getString("point_code2") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + form.getString("point_code2") + "存在未完成的任务"); + + + + String point_code2 = form.getString("point_code2"); String sub_device_code = point_code2.substring(0, point_code2.indexOf("_")); @@ -333,6 +341,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { .task_name("共挤线叫空载具") .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) + .acs_task_type("2") .vehicle_code(form.getString("vehicle_code")) .vehicle_type(workOrderObj.getString("vehicle_type")) .vehicle_qty(form.getIntValue("qty")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java index f188912..6c70069 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YqxCallEmpVehicleTask.java @@ -283,7 +283,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask { .task_id(org.nl.wms.util.IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("") - .acs_task_type("3") + .acs_task_type("2") .task_name("养生A区>叠盘架空载具") .task_status(TaskStatusEnum.START_AND_POINT.getCode()) .point_code1(jsonStartPoint.getString("point_code")) @@ -326,6 +326,14 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask { WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 生产工单表 WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); //点位基础表 + //任务表【SCH_BASE_Task】 + //判断当前点是否有未完成的任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + form.getString("point_code2") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + form.getString("point_code2") + "存在未完成的任务"); + + + + String point_code2 = form.getString("point_code2"); String sub_device_code = point_code2.substring(0, point_code2.indexOf("_")); @@ -340,6 +348,7 @@ public class YqxCallEmpVehicleTask extends AbstractAcsTask { .task_name("油漆线叫空载具") .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) + .acs_task_type("2") .vehicle_code(form.getString("vehicle_code")) .vehicle_type(workOrderObj.getString("vehicle_type")) .vehicle_qty(form.getIntValue("qty")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java index 29008ae..b9290ca 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java @@ -32,9 +32,6 @@ import java.util.List; @RequiredArgsConstructor @Slf4j public class GjxSendMaterialTask extends AbstractAcsTask { - //任务步骤描述:task_step 1-创建,2-确定起点,3-确定终点,4-起点终点确认, - // 5-下发,6-执行,7-二次申请,8-执行,9-完成,10-取消 - private final String THIS_CLASS = GjxSendMaterialTask.class.getName(); diff --git a/lms/nladmin-ui/src/views/wms/sch/task/index.vue b/lms/nladmin-ui/src/views/wms/sch/task/index.vue index dd4bf5f..ae03f3e 100644 --- a/lms/nladmin-ui/src/views/wms/sch/task/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/task/index.vue @@ -128,8 +128,8 @@ - - +