From 10f723ac15a648a8d61e9bc6a229cbe1d84fe6d9 Mon Sep 17 00:00:00 2001 From: "ZHOUZ\\Noble'lift" <1014987728@qq.com> Date: Tue, 7 Mar 2023 18:17:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/service/impl/MesToLmsServiceImpl.java | 16 ++++- .../mps/service/impl/BakingServiceImpl.java | 55 ++++++++++++++---- .../service/impl/EmptyVehicleServiceImpl.java | 38 ++++++------ .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 250368 -> 250880 bytes .../org/nl/wms/sch/tasks/CallEmpReelTask.java | 1 + .../org/nl/wms/sch/tasks/InCoolIvtTask.java | 51 +++++++++------- .../java/org/nl/wms/sch/tasks/InHotTask.java | 7 +++ .../wms/pdm/order/rawfoilworkorder/index.vue | 10 +++- .../wms/pdm/order/slittingplan/index.vue | 1 - 9 files changed, 126 insertions(+), 53 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java index 4b5729491..7a88ba3fe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -303,7 +303,13 @@ public class MesToLmsServiceImpl implements MesToLmsService { } else { point_code = jsonCoolIvt.getString("full_point_code"); } - if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("母卷不存在或已烘烤完成"); + if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("该母卷现在不存在暂存位或对接点位上,不能进行入烘箱操作!"); + + //更新生箔工单的是否下发烘烤为是 + HashMap map = new HashMap<>(); + map.put("is_baking","1"); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map,"container_name = '"+ContainerName+"'"); + log.info("母卷:"+ContainerName+"被决策入烘箱,请求烘烤标识改为1"); // 调用接口输入参数 jsonParam.put("option", "1"); @@ -319,6 +325,12 @@ public class MesToLmsServiceImpl implements MesToLmsService { /* * 入冷却区 */ + //更新生箔工单的是否下发烘烤为是 + HashMap map = new HashMap<>(); + map.put("is_instor","1"); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map,"container_name = '"+ContainerName+"'"); + log.info("母卷:"+ContainerName+"被决策入半成品库,请求入半成品库标识改为1"); + JSONObject jsonPoint = pointTab.query("material_code = '" + containerName + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("母卷不存在"); @@ -1257,7 +1269,7 @@ public class MesToLmsServiceImpl implements MesToLmsService { throw new BadRequestException("子卷号不能为空!"); } - JSONObject plan_jo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + ContainerName + "'").uniqueResult(0); + JSONObject plan_jo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + ContainerName + "' AND is_delete = '0'").uniqueResult(0); if (ObjectUtil.isEmpty(plan_jo)) { throw new BadRequestException("系统中不存在子卷号为:" + ContainerName + "的分切计划!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java index 5ed6260bf..6dec7ca41 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java @@ -71,6 +71,24 @@ public class BakingServiceImpl implements BakingService { String hours = whereJson.getString("hours"); // 时间 String point_code1 = whereJson.getString("point_code"); // 点位 + //校验该设备是否启用,且母卷MES是否请求烘烤 + //查询该母卷号、设备号对应的生箔工单 + JSONObject raw_jo = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").query("container_name ='" + container_name + "'").uniqueResult(0); + + if (ObjectUtil.isEmpty(raw_jo)) { + throw new BadRequestException("未查询到对应的生箔工单!"); + } + String resource_name = raw_jo.getString("resource_name"); + JSONObject sb_jo = WQLObject.getWQLObject("st_ivt_sbpointivt").query("ext_code ='" + resource_name + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sb_jo)) { + throw new BadRequestException("未查询到母卷号:" + container_name + "对应的生箔机台编号!"); + } + + if (StrUtil.equals("1", sb_jo.getString("is_used")) && !raw_jo.getString("is_baking").equals("1")) { + throw new BadRequestException("该母卷在MES上未进行决策入烘箱,不允许进行入烘箱操作!"); + } + + if (ObjectUtil.isEmpty(container_name)) throw new BadRequestException("母卷号不能为空"); if (ObjectUtil.isEmpty(temperature)) throw new BadRequestException("温度不能为空"); if (ObjectUtil.isEmpty(hours)) throw new BadRequestException("时间不能为空"); @@ -101,7 +119,7 @@ public class BakingServiceImpl implements BakingService { param.put("point_code2", jsonHotIvt.getString("point_code")); param.put("material_code", container_name); param.put("product_area", jsonPointZc.getString("product_area")); - param.put("request_param", NumberUtil.mul(Double.parseDouble(hours),60)); + param.put("request_param", NumberUtil.mul(Double.parseDouble(hours), 60)); InHotTask inHotTask = new InHotTask(); String task_id = inHotTask.createTask(param); @@ -159,7 +177,7 @@ public class BakingServiceImpl implements BakingService { map.put("point_type", "4"); JSONObject point_code2_jo = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(point_code2_jo)){ + if (ObjectUtil.isEmpty(point_code2_jo)) { throw new BadRequestException("未查询到可用的点位类型为入箱的烘箱对接位!"); } String point_code2 = point_code2_jo.getString("point_code"); @@ -174,8 +192,8 @@ public class BakingServiceImpl implements BakingService { JSONObject jsonMap = new JSONObject(); jsonMap.put("flag", "1"); jsonMap.put("product_area", product_area); - jsonMap.put("min_temperature", NumberUtil.sub(temperature, temperature_lose)+""); - jsonMap.put("max_temperature", NumberUtil.add(temperature, temperature_lose)+""); + jsonMap.put("min_temperature", NumberUtil.sub(temperature, temperature_lose) + ""); + jsonMap.put("max_temperature", NumberUtil.add(temperature, temperature_lose) + ""); jsonMap.put("point_location", map.getString("point_location")); JSONObject jsonHotIvt = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().uniqueResult(0); if (ObjectUtil.isEmpty(jsonHotIvt)) throw new BadRequestException("烘烤区没有合适温度的空位!"); @@ -188,7 +206,7 @@ public class BakingServiceImpl implements BakingService { param.put("point_code3", jsonHotIvt.getString("point_code")); param.put("material_code", container_name); param.put("product_area", product_area); - param.put("request_param", NumberUtil.mul(Double.parseDouble(hours),60)); + param.put("request_param", NumberUtil.mul(Double.parseDouble(hours), 60)); // 创建冷却区 --> 暂存位的任务 InHotTask inHotTask = new InHotTask(); @@ -327,9 +345,9 @@ public class BakingServiceImpl implements BakingService { hotParam.put("start_point_code", point_code1); hotParam.put("end_point_code", point_code2); hotParam.put("temperature", jsonHotIvt.getString("temperature")); - if (ObjectUtil.isEmpty(last_hot_mst)){ + if (ObjectUtil.isEmpty(last_hot_mst)) { hotParam.put("oven_time", "480"); - }else { + } else { hotParam.put("oven_time", last_hot_mst.getString("oven_time")); } this.createHotIoMst(hotParam); @@ -354,6 +372,23 @@ public class BakingServiceImpl implements BakingService { if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("点位不能为空"); if (ObjectUtil.isEmpty(container_name)) throw new BadRequestException("母卷号不能为空"); + //校验该设备是否启用,且母卷MES是否请求烘烤 + //查询该母卷号、设备号对应的生箔工单 + JSONObject raw_jo = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").query("container_name ='" + container_name + "'").uniqueResult(0); + + if (ObjectUtil.isEmpty(raw_jo)) { + throw new BadRequestException("未查询到对应的生箔工单!"); + } + String resource_name = raw_jo.getString("resource_name"); + JSONObject sb_jo = WQLObject.getWQLObject("st_ivt_sbpointivt").query("ext_code ='" + resource_name + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sb_jo)) { + throw new BadRequestException("未查询到母卷号:" + container_name + "对应的生箔机台编号!"); + } + + if (StrUtil.equals("1", sb_jo.getString("is_used")) && !raw_jo.getString("is_instor").equals("1")) { + throw new BadRequestException("该母卷在MES上未进行决策入半成品库,不允许进行入冷却操作!"); + } + // 1.获取此暂存位的生产区域和上下位置 JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("冷却区内此点位不存在!"); @@ -474,9 +509,9 @@ public class BakingServiceImpl implements BakingService { public JSONObject release(JSONObject whereJson) { JSONArray rows = new JSONArray(); JSONObject jo = new JSONObject(); - jo.put("device_code",whereJson.getString("point_code")); - jo.put("code","to_command"); - jo.put("value","0"); + jo.put("device_code", whereJson.getString("point_code")); + jo.put("code", "to_command"); + jo.put("value", "0"); rows.add(jo); new WmsToAcsServiceImpl().action(rows); JSONObject result = new JSONObject(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/EmptyVehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/EmptyVehicleServiceImpl.java index 6991cc000..6acc88086 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/EmptyVehicleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/EmptyVehicleServiceImpl.java @@ -18,21 +18,21 @@ public class EmptyVehicleServiceImpl implements EmptyVehicleService { @Override public JSONObject pointStatusQuery(JSONObject whereJson) { String point_code = whereJson.getString("point_code"); - if (StrUtil.isEmpty(point_code)){ + if (StrUtil.isEmpty(point_code)) { throw new BadRequestException("点位不能为空!"); } String empty_vehicle_code = ""; - JSONObject point_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '"+point_code+"'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point_jo)){ + JSONObject point_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '" + point_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point_jo)) { empty_vehicle_code = point_jo.getString("empty_vehicle_code"); } JSONObject vehicle_jo = new JSONObject(); - vehicle_jo.put("vehicle_code",empty_vehicle_code); + vehicle_jo.put("vehicle_code", empty_vehicle_code); JSONObject jo = new JSONObject(); - jo.put("data",vehicle_jo); - jo.put("message","操作成功!"); + jo.put("data", vehicle_jo); + jo.put("message", "操作成功!"); return jo; } @@ -40,29 +40,33 @@ public class EmptyVehicleServiceImpl implements EmptyVehicleService { public JSONObject pointOperate(JSONObject whereJson) { String point_code = whereJson.getString("point_code"); String vehicle_code = whereJson.getString("vehicle_code"); - if (StrUtil.isEmpty(point_code)){ + if (StrUtil.isEmpty(point_code)) { throw new BadRequestException("点位不能为空!"); } - if (StrUtil.isEmpty(vehicle_code)){ + if (StrUtil.isEmpty(vehicle_code)) { throw new BadRequestException("载具码不能为空!"); } String option = whereJson.getString("option"); - JSONObject point_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '"+point_code+"'").uniqueResult(0); - if (ObjectUtil.isEmpty(point_jo)){ + JSONObject point_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '" + point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(point_jo)) { throw new BadRequestException("空轴点位不存在!"); } - if (option.equals("0")){ - point_jo.put("empty_vehicle_code",""); - point_jo.put("empty_point_status","01"); + if (option.equals("0")) { + point_jo.put("empty_vehicle_code", ""); + point_jo.put("empty_point_status", "01"); } - if (option.equals("1")){ - point_jo.put("empty_vehicle_code",vehicle_code); - point_jo.put("empty_point_status","02"); + if (option.equals("1")) { + //绑定的时候判断点位上是否存在母卷存在母卷不允许进行绑定 + if (point_jo.getString("full_point_status").equals("02")) { + throw new BadRequestException("该点位上存在母卷,不能进行绑定空轴!"); + } + point_jo.put("empty_vehicle_code", vehicle_code); + point_jo.put("empty_point_status", "02"); } WQLObject.getWQLObject("st_ivt_coolpointivt").update(point_jo); JSONObject jo = new JSONObject(); - jo.put("message","操作成功!"); + jo.put("message", "操作成功!"); return jo; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 4ae655b17f2f639e173476e0058bdbb43e8606e6..94fd2a07cdb0edc70530d3d5805decdb991bba7c 100644 GIT binary patch delta 18826 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 K-tQjOyZj$H?KZan diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java index db0e71b55..ca44f35a0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java @@ -209,6 +209,7 @@ public class CallEmpReelTask extends AbstractAcsTask { jsonIvt2.put("container_name", jsonRaw.getString("container_name")); jsonIvt2.put("workorder_id", jsonRaw.getString("workorder_id")); jsonIvt2.put("ivt_qty", jsonRaw.getString("productin_qty")); + jsonIvt2.put("cool_ivt_status", "01"); ivtTab.update(jsonIvt2); // 插入入库单 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java index 8d7d73b09..46c60eb4c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java @@ -26,6 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; @Service @@ -47,10 +48,10 @@ public class InCoolIvtTask extends AbstractAcsTask { String product_area = json.getString("product_area"); String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")){ + if (product_area.equals("A1") || product_area.equals("A2")) { agv_system_type = "2"; } - if (product_area.equals("A3") || product_area.equals("A4")){ + if (product_area.equals("A3") || product_area.equals("A4")) { agv_system_type = "3"; } @@ -81,15 +82,15 @@ public class InCoolIvtTask extends AbstractAcsTask { String task_id = taskObj.getString("task_id"); JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - if (StrUtil.equals(status,"0")) { + if (StrUtil.equals(status, "0")) { // 取消删除任务 - taskTab.delete("task_id = '"+task_id+"'");// 更新删除字段 - jsonTask.put("is_delete","1"); + taskTab.delete("task_id = '" + task_id + "'");// 更新删除字段 + jsonTask.put("is_delete", "1"); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); // 删除冷却区出入表 - coolTab.delete("task_id = '"+task_id+"'"); + coolTab.delete("task_id = '" + task_id + "'"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { @@ -100,9 +101,9 @@ public class InCoolIvtTask extends AbstractAcsTask { taskTab.update(jsonTask); } - if(StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { // 更改任务状态为完成 - jsonTask.put("task_status",TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); jsonTask.put("update_time", DateUtil.now()); @@ -122,8 +123,8 @@ public class InCoolIvtTask extends AbstractAcsTask { // 更新暂存位状态为空位 JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - jsonPoint.put("point_status","1"); - jsonPoint.put("material_code",""); + jsonPoint.put("point_status", "1"); + jsonPoint.put("material_code", ""); pointTab.update(jsonPoint); // 更新冷却库存状态 @@ -150,9 +151,16 @@ public class InCoolIvtTask extends AbstractAcsTask { //判断该接口是否需要回传 JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollSemiFGInboundComplete'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")){ + if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")) { new LmsToMesServiceImpl().momRollSemiFGInboundComplete(param); } + + //将该母卷的入烘箱标识改为0 + HashMap map = new HashMap<>(); + map.put("is_instor", "0"); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + jsonTask.getString("material_code") + "'"); + log.info("母卷:" + jsonTask.getString("material_code") + "对应的入冷却任务完成,请求入半成品库标识改为0"); + } } @@ -177,16 +185,16 @@ public class InCoolIvtTask extends AbstractAcsTask { String point_code1 = form.getString("point_code1"); String point_code2 = form.getString("point_code2"); - if (cutConveyorTask.isSingleTask(point_code1)){ - throw new BadRequestException("点位:"+point_code1+"存在未完成的任务!"); + if (cutConveyorTask.isSingleTask(point_code1)) { + throw new BadRequestException("点位:" + point_code1 + "存在未完成的任务!"); } - if (cutConveyorTask.isSingleTask(point_code2)){ - throw new BadRequestException("点位:"+point_code2+"存在未完成的任务!"); + if (cutConveyorTask.isSingleTask(point_code2)) { + throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!"); } JSONObject json = new JSONObject(); - json.put("task_id",IdUtil.getSnowflake(1,1).nextId()); - json.put("task_code", IdUtil.getSnowflake(1,1).nextId()); + json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); json.put("task_type", "010204"); json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); json.put("point_code1", point_code1); @@ -199,13 +207,13 @@ public class InCoolIvtTask extends AbstractAcsTask { json.put("create_name", currentUsername); json.put("create_time", DateUtil.now()); //根据类型获取对应的任务优先级 - JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag","3").addParam("task_type",json.getString("task_type")).process().uniqueResult(0); - if (ObjectUtil.isEmpty(priority_jo)){ + JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", json.getString("task_type")).process().uniqueResult(0); + if (ObjectUtil.isEmpty(priority_jo)) { json.put("priority", "1"); - }else { + } else { json.put("priority", priority_jo.getString("value")); } - json.put("acs_task_type","3" ); + json.put("acs_task_type", "3"); tab.insert(json); this.immediateNotifyAcs(null); @@ -221,7 +229,6 @@ public class InCoolIvtTask extends AbstractAcsTask { } - @Override public void cancel(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java index cc6ab6d04..8534c20be 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java @@ -24,6 +24,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; @Service @@ -205,6 +206,12 @@ public class InHotTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")) { new LmsToMesServiceImpl().momRollBakeInBound(param); } + + //将该母卷的入烘箱标识改为0 + HashMap map = new HashMap<>(); + map.put("is_baking","0"); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map,"container_name = '"+jsonHotMst.getString("container_name")+"'"); + log.info("母卷:"+jsonHotMst.getString("container_name")+"对应的入烘箱任务完成,请求烘烤标识改为0"); } } diff --git a/lms/nladmin-ui/src/views/wms/pdm/order/rawfoilworkorder/index.vue b/lms/nladmin-ui/src/views/wms/pdm/order/rawfoilworkorder/index.vue index 767f64a82..8fc1829eb 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/order/rawfoilworkorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/order/rawfoilworkorder/index.vue @@ -232,6 +232,8 @@ + +