From 43d06b019e0cf51423b9c2d373727abaf76db4dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Mon, 8 May 2023 09:49:27 +0800 Subject: [PATCH] =?UTF-8?q?rev=20=E6=B7=B7=E6=96=99=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dto/MaterialDetailDto.java | 21 +- .../basedata/service/dto/MaterialbaseDto.java | 2 + .../impl/MaterialDetailServiceImpl.java | 14 +- .../service/impl/MaterialbaseServiceImpl.java | 37 ++- .../nl/wms/basedata/wql/QMD_ME_MATERIAL.wql | 8 +- .../basedata/wql/QMD_ME_MATERIAL_DETAIL.wql | 56 ++++ .../acs/service/impl/AcsToWmsServiceImpl.java | 64 +++- .../pdm/service/impl/DeviceServiceImpl.java | 2 +- .../sch/task/call/empty/HLCallEmptyTask.java | 180 ++++++----- .../task/call/empty/wql/CALL_EMPTY_TASK.wql | 21 ++ .../send/material/FJSendMaterialTask.java | 6 +- .../send/material/HLSendMaterialTask.java | 211 +++++++------ .../send/material/SZSendMaterialTask.java | 2 +- .../send/material/YZSendMaterialTask.java | 5 +- .../send/material/wql/SEND_MATERIAL_TASK.wql | 38 +++ .../src/main/java/org/nl/wms/wms.xls | Bin 270848 -> 314368 bytes .../src/test/java/org/nl/test/PointTest.java | 23 +- .../src/views/wms/basedata/bom/index.vue | 287 ++++++++++++++++++ .../wms/basedata/material/detail/index.vue | 139 +++++++-- .../src/views/wms/basedata/material/index.vue | 37 +-- .../src/views/wms/pdm/workerorder/index.vue | 59 ++-- .../src/views/wms/pub/BOMDialog.vue | 202 ++++++++++++ .../src/views/wms/pub/MaterDialog.vue | 12 +- .../src/views/wms/sch/point/index.vue | 7 +- 24 files changed, 1125 insertions(+), 308 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL_DETAIL.wql create mode 100644 lms/nladmin-ui/src/views/wms/basedata/bom/index.vue create mode 100644 lms/nladmin-ui/src/views/wms/pub/BOMDialog.vue diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java index 0e784e9..ba6021e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialDetailDto.java @@ -31,20 +31,15 @@ public class MaterialDetailDto implements Serializable { */ private String material_name; - /** - * 订单编号 - */ - private String order_number; + private String furnace; - /** - * 客户名称 - */ - private String customer_name; + private String material_brick_type; - /** - * 产品名称 - */ - private String product_name; + private String bom_code; + + private String order_code; + + private String customer_code; /** * 产品牌号 @@ -85,4 +80,6 @@ public class MaterialDetailDto implements Serializable { * 修改时间 */ private String update_time; + + private String is_delete; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java index caa2692..a8a75ff 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java @@ -55,4 +55,6 @@ public class MaterialbaseDto implements Serializable { private String is_used; private Double weight; + + private String material_type; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java index 82ed9ef..1902838 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialDetailServiceImpl.java @@ -2,9 +2,11 @@ package org.nl.wms.basedata.service.impl; +import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; import org.nl.wms.basedata.service.MaterialDetailService; import org.nl.wms.basedata.service.dto.MaterialDetailDto; import org.springframework.stereotype.Service; @@ -12,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Pageable; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -38,10 +41,10 @@ public class MaterialDetailServiceImpl implements MaterialDetailService { @Override public Map queryAll(Map whereJson, Pageable page) { - WQLObject wo = WQLObject.getWQLObject("md_me_material_detail"); - ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete = '0'", "update_time desc"); - final JSONObject json = rb.pageResult(); - return json; + HashMap map = new HashMap<>(); + map.put("flag", "1"); + + return WQL.getWO("QMD_ME_MATERIAL_DETAIL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "md.create_time DESC"); } @Override @@ -82,9 +85,6 @@ public class MaterialDetailServiceImpl implements MaterialDetailService { dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); dto.setCreate_id(currentUserId); dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); dto.setCreate_time(now); WQLObject wo = WQLObject.getWQLObject("md_me_material_detail"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java index 7af0aff..c30058b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java @@ -50,6 +50,7 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { HashMap map = new HashMap<>(); map.put("flag", "1"); map.put("search", name); + map.put("material_type", MapUtil.getStr(whereJson, "material_type")); return WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "create_time DESC"); } @@ -104,11 +105,11 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { dto.setMaterial_id(id); dto.setCreate_id(currentUserId); dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); + dto.setCreate_time(now); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); wo.insert(json); - // 解析物料编码 ZLMCZ1001C122211GM001BD20-8 + // 解析物料编码 JSONObject material_detail = new JSONObject(); material_detail.put("material_id", id); material_detail.put("material_code", material_code); @@ -118,22 +119,40 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { if (ObjectUtil.isEmpty(furnace_name)) { throw new BadRequestException("物料编码解析错误:未知炉型!"); } - material_detail.put("product_name", furnace_name.getString("label") + "镁碳砖"); - material_detail.put("order_number", material_code.substring(11, 16)); - material_detail.put("customer_name", material_code.substring(16, 21)); + material_detail.put("furnace", furnace_code); + String material_brick_code = material_code.substring(2, 5); + JSONObject material_brick_type = dict_detail_table.query("name = 'material_brick_type' AND value = '" + material_brick_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(material_brick_type)) { + throw new BadRequestException("物料编码解析错误:未知物料砖类型!"); + } + material_detail.put("material_brick_type", material_brick_code); + + String bom_code = material_code.substring(5, 11); + JSONObject bom = new JSONObject(); + bom.put("material_id", IdUtil.getSnowflake(1, 1).nextId()); + bom.put("material_code", bom_code); + bom.put("material_type", "2"); + bom.put("create_id", currentUserId); + bom.put("create_name", nickName); + bom.put("create_time", now); + JSONObject old_bom = wo.query("material_code = '" + bom_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(old_bom)) { + wo.insert(bom); + } + + material_detail.put("bom_code", bom_code); + material_detail.put("order_code", material_code.substring(11, 16)); + material_detail.put("customer_code", material_code.substring(16, 21)); String product_grade_code = material_code.substring(21, 23); JSONObject product_grade = dict_detail_table.query("name = 'product_grade' AND value = '" + product_grade_code + "'").uniqueResult(0); if (ObjectUtil.isEmpty(product_grade)) { throw new BadRequestException("物料编码解析错误:未知牌号!"); } - material_detail.put("product_grade", product_grade.getString("label")); + material_detail.put("product_grade", product_grade_code); material_detail.put("brick_type", material_code.substring(23)); material_detail.put("create_id", currentUserId); material_detail.put("create_name", nickName); material_detail.put("create_time", now); - material_detail.put("update_optid", currentUserId); - material_detail.put("update_optname", nickName); - material_detail.put("update_time", now); WQLObject.getWQLObject("md_me_material_detail").insert(material_detail); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql index fc9468f..738919a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql @@ -18,6 +18,7 @@ 输入.class_code TYPEAS s_string 输入.idssql TYPEAS f_string 输入.classIds TYPEAS f_string + 输入.material_type TYPEAS f_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -50,11 +51,10 @@ WHERE is_delete = '0' OPTION 输入.search <> "" - ( mb.material_code like '%' 输入.search '%' - OR - mb.material_name like '%' 输入.search '%' - ) + ENDOPTION + OPTION 输入.material_type <> "" + mb.material_type = 输入.material_type ENDOPTION ENDSELECT ENDPAGEQUERY diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL_DETAIL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL_DETAIL.wql new file mode 100644 index 0000000..f19d666 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL_DETAIL.wql @@ -0,0 +1,56 @@ +[交易说明] + 交易名: 物料详情分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + md.*, + d1.label AS 'furnace_name', + d2.label AS 'material_brick_type_name', + d3.label AS 'product_grade_name' + FROM + md_me_material_detail md + LEFT JOIN sys_dict_detail d1 ON d1.`value` = md.furnace AND d1.`name` = 'furnace' + LEFT JOIN sys_dict_detail d2 ON d2.`value` = md.material_brick_type AND d2.`name` = 'material_brick_type' + LEFT JOIN sys_dict_detail d3 ON d3.`value` = md.product_grade AND d3.`name` = 'product_grade' + WHERE + md.is_delete = '0' + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file 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 a11ab59..aa78061 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 @@ -225,16 +225,49 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { switch (type) { case "1": // 送料 - String vehicle_code = TaskUtils.formatVehicleCode(param.getString("vehicle_code")); - if ("0000".equals(vehicle_code)) { - throw new BadRequestException("载具编码不能为空!"); - } - method_param.put("vehicle_code", vehicle_code); - switch (region) { case HL: JSONObject workorder = TaskUtils.hasWorkOrder(point); method_param.put("workorder", workorder); + String vehicle_code = TaskUtils.formatVehicleCode(param.getString("vehicle_code")); + if ("0000".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + method_param.put("vehicle_code", vehicle_code); + String weight = param.getString("weight"); + if (StrUtil.isBlank(weight)) { + throw new BadRequestException("重量不能为空!"); + } + String is_full = param.getString("is_full"); + if (StrUtil.isBlank(is_full)) { + throw new BadRequestException("是否满垛不能为空!"); + } + WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); + JSONObject vd_update = new JSONObject(); + vd_update.put("is_delete", "1"); + vd_update.put("update_optid", ACSSystem.id); + vd_update.put("update_optname", ACSSystem.nick_name); + String now = DateUtil.now(); + vd_update.put("update_time", now); + vd_table.update(vd_update, "vehicle_type = '1' AND vehicle_code = '" + vehicle_code + "' AND is_delete = '0'"); + + JSONObject vd = new JSONObject(); + vd.put("vd_id", IdUtil.getSnowflake(1L, 1L).nextId()); + vd.put("vehicle_type", VehicleType.CUP.value()); + vd.put("vehicle_code", vehicle_code); + vd.put("material_id", workorder.getString("material_id")); + vd.put("weight", weight); + vd.put("is_full", is_full); + vd.put("workorder_id", workorder.getString("workorder_id")); + vd.put("point_code", point_code); + vd.put("create_id", ACSSystem.id); + vd.put("create_name", ACSSystem.nick_name); + vd.put("create_time", now); + vd.put("is_in_kiln", "0"); + vd.put("stand_status", "2"); + vd_table.insert(vd); + method_param.put("vd", vd); + task_code = hlSendMaterialTask.createTask(method_param); break; case YZ: @@ -243,8 +276,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { task_code = yzSendMaterialTask.createTask(method_param); break; case SZ: - WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); - JSONObject vd = vd_table + vehicle_code = TaskUtils.formatVehicleCode(param.getString("vehicle_code")); + if ("0000".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + method_param.put("vehicle_code", vehicle_code); + vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); + vd = vd_table .query("is_delete = '0' AND vehicle_type = '2' AND vehicle_code = '" + vehicle_code + "'") .uniqueResult(0); if (ObjectUtil.isEmpty(vd)) { @@ -281,11 +319,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { break; case "3": // 送空 - vehicle_code = TaskUtils.formatVehicleCode(param.getString("vehicle_code")); + String vehicle_code = TaskUtils.formatVehicleCode(param.getString("vehicle_code")); if ("0000".equals(vehicle_code)) { vehicle_code = point.getString("vehicle_code"); if (StrUtil.isBlank(vehicle_code) || "0000".equals(vehicle_code)) { - throw new BadRequestException("未知载具编码!"); + throw new BadRequestException("载具编码不能为空!"); } } method_param.put("vehicle_code", vehicle_code); @@ -307,19 +345,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 叫空 switch (region) { case HL: - String device_code = point.getString("device_code"); workorder = WQLObject .getWQLObject("pdm_bd_workorder") - .query("is_delete = '0' AND device_code = '" + device_code + "' AND order_status = '3'") + .query("is_delete = '0' AND device_code = '" + point.getString("device_code") + "' AND order_status = '3'") .uniqueResult(0); method_param.put("workorder", workorder); task_code = hlCallEmptyTask.createTask(method_param); break; case YZ: - device_code = point.getString("device_code"); workorder = WQLObject .getWQLObject("pdm_bd_workorder") - .query("is_delete = '0' AND device_code = '" + device_code + "' AND order_status = '3'") + .query("is_delete = '0' AND device_code = '" + point.getString("device_code") + "' AND order_status = '3'") .uniqueResult(0); method_param.put("workorder", workorder); task_code = yzCallEmptyTask.createTask(method_param); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java index e98afad..a49143f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java @@ -46,7 +46,7 @@ public class DeviceServiceImpl implements DeviceService { if (!StrUtil.isEmpty(search)) { map.put("search", "%" + search + "%"); } - JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.device_code"); + JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.device_model ASC, device.device_code ASC"); return json; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java index f0dd13b..56a8957 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.call.empty; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -36,17 +37,17 @@ public class HLCallEmptyTask extends AbstractAcsTask { } } - @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); - - TaskUtils.isEmptyPoint(point); - TaskUtils.isLocked(point); - JSONObject work_order = TaskUtils.hasWorkOrder(point); + JSONObject work_order = form.getJSONObject("workorder"); + int priority = 1; + if (ObjectUtil.isNotEmpty(work_order)) { + priority = TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1; + } JSONObject task = TaskUtils.buildTask( - "混料机叫空托盘", + "混料区叫空", TaskType.CALL_EMPTY.value(), TaskStatus.SURE_END.value(), null, @@ -55,7 +56,7 @@ public class HLCallEmptyTask extends AbstractAcsTask { null, VehicleType.CUP.value(), null, - TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1, + priority, HLCallEmptyTask.class.getName(), form.getString("create_mode"), form.getString("request_param"), @@ -64,10 +65,14 @@ public class HLCallEmptyTask extends AbstractAcsTask { ); WQLObject.getWQLObject("sch_base_task").insert(task); + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addFormUpdateColum(point, form); + WQLObject.getWQLObject("sch_base_point").update(point); + return task.getString("task_code"); } - @Override public void findStartPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); @@ -75,34 +80,35 @@ public class HLCallEmptyTask extends AbstractAcsTask { .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + HLCallEmptyTask.class.getName() + "'", "priority DESC, create_time ASC") .getResultJSONArray(0); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - for (int i = 0; i < tasks.size(); i++) { - JSONObject task = tasks.getJSONObject(i); - - JSONObject point = WQL - .getWO("CALL_EMPTY_TASK") - .addParam("flag", "1") - .addParam("vehicle_type", task.getString("vehicle_type")) - .process() - .uniqueResult(0); - - if (ObjectUtil.isNotEmpty(point)) { - task.put("task_status", TaskStatus.START_AND_END.value()); - task.put("point_code1", point.getString("point_code")); - task.put("vehicle_code", point.getString("vehicle_code")); - task.put("remark", ""); - task_table.update(task); - - point.put("lock_type", LockType.TASK_LOCKED.value()); - point_table.update(point); - } else { - task.put("remark", "未找到合适的叫空载具点位!"); - task_table.update(task); + if (ObjectUtil.isNotEmpty(tasks)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("CALL_EMPTY_TASK") + .addParam("flag", "5") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code1", point.getString("point_code")); + task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); + task.put("remark", ""); + TaskUtils.addAutoUpdateColum(task); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addAutoUpdateColum(point); + point_table.update(point); + } } } } - @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -112,7 +118,7 @@ public class HLCallEmptyTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -122,7 +128,6 @@ public class HLCallEmptyTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -134,41 +139,47 @@ public class HLCallEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - - public void finishTask(JSONObject task, OperationType operation_type) { + public void finishTask(JSONObject task, OperationType operation_type) { int current_task_status = task.getIntValue("task_status"); if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { if (operation_type == OperationType.MANUAL - && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); } - + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -178,30 +189,43 @@ public class HLCallEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - TaskUtils.addCurrentUpdateColum(point1); - point_table.update(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1)) { + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql index 731215e..6a47352 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql @@ -113,3 +113,24 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN st_ivt_vehicle_detail vd ON point.vehicle_type = vd.vehicle_type + AND point.vehicle_code = vd.vehicle_code + AND vd.is_delete = '0' + WHERE + is_used = '1' + AND lock_type = '1' + AND region_code = 'KLHJ' + AND point_type = '1' + AND point_status = '1' + AND point.vehicle_type = '1' + AND vd.vd_id IS NULL + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java index cdf52cc..5acbba8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java @@ -52,7 +52,7 @@ public class FJSendMaterialTask extends AbstractAcsTask { TaskStatus.SURE_START.value(), point.getString("point_code"), null, - null, + vd.getLong("vd_id"), vd.getString("material_id"), vd.getString("vehicle_type"), vd.getString("vehicle_code"), @@ -67,7 +67,7 @@ public class FJSendMaterialTask extends AbstractAcsTask { if (TrueOrFalse.trueOrFalse(vd.getString("is_full"))) { JSONObject pn = TaskUtils.buildPN(PickType.CP, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); WQLObject.getWQLObject("das_produce_number").insert(pn); - material_task.put("group_id", pn.getLong("data_id")); + material_task.put("table_fk_id", pn.getLong("data_id")); JSONObject empty_task = TaskUtils.buildTask( "分拣区叫空", @@ -243,7 +243,7 @@ public class FJSendMaterialTask extends AbstractAcsTask { point_table.update(point2, "point_code = '" + point_code2 + "'"); } - String data_id = task.getString("group_id"); + String data_id = task.getString("table_fk_id"); if (TaskType.SEND_MATERIAL.value().equals(task.getString("task_type")) && StrUtil.isNotBlank(data_id)) { WQLObject.getWQLObject("das_produce_number").delete("data_id = " + data_id); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java index cec8c3f..373136b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.send.material; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -8,11 +9,10 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.basedata.eum.TrueOrFalse; -import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.common.PickType; import org.nl.wms.sch.manage.*; import org.nl.wms.sch.task.util.TaskUtils; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; /** * 辽宁晟华混料 送料入库 任务类 @@ -38,74 +38,95 @@ public class HLSendMaterialTask extends AbstractAcsTask { } } + @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); + JSONObject work_order = form.getJSONObject("workorder"); + int priority = TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1; + JSONObject vd = form.getJSONObject("vd"); - TaskUtils.isLocked(point); - JSONObject work_order = TaskUtils.hasWorkOrder(point); - - String vehicle_code = form.getString("vehicle_code"); - if ("0000".equals(vehicle_code)) { - throw new BadRequestException("载具编码不能为空!"); - } - - // todo 组盘 + JSONObject pn = TaskUtils.buildPN(PickType.YL, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); + WQLObject.getWQLObject("das_produce_number").insert(pn); JSONObject task = TaskUtils.buildTask( - "混料机送料入库", + "混料区送料", TaskType.SEND_MATERIAL.value(), TaskStatus.SURE_START.value(), point.getString("point_code"), null, - null, - work_order.getString("material_id"), - VehicleType.CUP.value(), - vehicle_code, - TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1, + vd.getLong("vd_id"), + vd.getString("material_id"), + vd.getString("vehicle_type"), + vd.getString("vehicle_code"), + priority, HLSendMaterialTask.class.getName(), form.getString("create_mode"), form.getString("request_param"), form.getString("create_id"), form.getString("create_name") ); + task.put("table_fk_id", pn.getLong("data_id")); WQLObject.getWQLObject("sch_base_task").insert(task); + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addFormUpdateColum(point, form); + WQLObject.getWQLObject("sch_base_point").update(point); + return task.getString("task_code"); } - + @Override public void findNextPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); JSONArray tasks = task_table - .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + YZSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + HLSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") .getResultJSONArray(0); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - - for (int i = 0; i < tasks.size(); i++) { - JSONObject task = tasks.getJSONObject(i); - - JSONObject point = WQL - .getWO("SEND_MATERIAL_TASK") - .addParam("flag", "1") - .process() - .uniqueResult(0); - - if (ObjectUtil.isNotEmpty(point)) { - task.put("task_status", TaskStatus.START_AND_END.value()); - task.put("point_code2", point.getString("point_code")); - task.put("remark", ""); - task_table.update(task); - - point.put("lock_type", LockType.TASK_LOCKED.value()); - point.put("task_code", task.getString("task_code")); - point_table.update(point); + + if (ObjectUtil.isNotEmpty(tasks)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + JSONObject point2 = null; + if (ObjectUtil.isNotEmpty(point1) && "2".equals(point1.getString("point_type"))) { + point2 = WQL + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "4") + .addParam("material_id", task.getString("material_id")) + .process() + .uniqueResult(0); + } + + if (ObjectUtil.isEmpty(point2)) { + point2 = WQL + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "5") + .process() + .uniqueResult(0); + } + + if (ObjectUtil.isNotEmpty(point2)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code2", point2.getString("point_code")); + task.put("remark", ""); + TaskUtils.addAutoUpdateColum(task); + task_table.update(task); + + point2.put("lock_type", LockType.TASK_LOCKED.value()); + point2.put("task_code", task.getString("task_code")); + TaskUtils.addAutoUpdateColum(point2); + point_table.update(point2); + } } } } - + @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -115,7 +136,7 @@ public class HLSendMaterialTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -125,7 +146,7 @@ public class HLSendMaterialTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - + public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -137,40 +158,49 @@ public class HLSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } + + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); + TaskUtils.addACSUpdateColum(point2); } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + TaskUtils.addCurrentUpdateColum(point2); } - point_table.update(point1); + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); - } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("table_fk_id")); } } - - public void finishTask(JSONObject task, OperationType operation_type) { + + public void finishTask(JSONObject task, OperationType operation_type) { int current_task_status = task.getIntValue("task_status"); if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { if (operation_type == OperationType.MANUAL - && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); } - + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -180,31 +210,42 @@ public class HLSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - TaskUtils.addCurrentUpdateColum(point1); - point_table.update(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java index afbfd1e..18a9ea9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java @@ -46,7 +46,7 @@ public class SZSendMaterialTask extends AbstractAcsTask { TaskStatus.SURE_START.value(), point.getString("point_code"), null, - null, + vd.getLong("vd_id"), vd.getString("material_id"), vd.getString("vehicle_type"), vd.getString("vehicle_code"), diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java index c440ff2..305121e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java @@ -53,7 +53,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { TaskStatus.SURE_START.value(), point.getString("point_code"), null, - pn.getLongValue("data_id"), + vd.getLong("vd_id"), vd.getString("material_id"), vd.getString("vehicle_type"), vd.getString("vehicle_code"), @@ -64,6 +64,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { form.getString("create_id"), form.getString("create_name") ); + task.put("table_fk_id", pn.getLong("data_id")); WQLObject.getWQLObject("sch_base_task").insert(task); point.put("lock_type", LockType.TASK_LOCKED.value()); @@ -172,7 +173,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { point_table.update(point2, "point_code = '" + point_code2 + "'"); } - WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("group_id")); + WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("table_fk_id")); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql index de23e30..bd4d063 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql @@ -16,6 +16,7 @@ 输入.flag TYPEAS s_string 输入.is_full TYPEAS s_string 输入.vehicle_type TYPEAS s_string + 输入.material_id TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -98,3 +99,40 @@ ENDQUERY ENDIF + IF 输入.flag = "4" + QUERY + SELECT + point.* + FROM + sch_base_point point + JOIN pdm_bi_device device ON point.device_code = device.device_code + LEFT JOIN pdm_bd_workorder workorder ON device.device_id = workorder.device_id AND workorder.order_status = '3' + LEFT JOIN md_me_materialbase mb1 ON workorder.material_id = mb1.material_id AND mb1.material_type = '1' + LEFT JOIN md_me_material_detail md1 ON mb1.material_id = md1.material_id + LEFT JOIN md_me_materialbase mb2 ON md1.bom_code = mb2.material_code AND mb2.material_type = '2' + WHERE + point.is_used = '1' + AND point.lock_type = '1' + AND point.region_code = 'KLHJ' + AND point.point_type = '2' + AND point.point_status = '0' + AND mb2.material_id = 输入.material_id + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND region_code = 'KLHJ' + AND point_type = '1' + AND point_status = '0' + 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 bbd53a2d94c0232d9aa92e998c8f552786c54c06..2cbb58c5fbffa95647b512c062ded9259b06049b 100644 GIT binary patch delta 54044 zcmdRX30zf0`~S?j7q}oGAR-Fl_2PmGdRatpWmRxRaX~W$8;ds*7vU+?et`5zo-&NI(E&oj@= zJTvp0Gv}7?^(kN1t|Ec!S0}dfsAG(ka>i_2&iGU^ZY^HMACdGtdz*_iNAk}8=;06F zDnH4W1FO8K@^<|aY1FpL>-v%I(SXDtm@B*LJ9zu}J-mnT4qw0dt+&c6OI#)!Vv%XX zCHtoGux-~|+H=k;z1;?LW93<|4$l8~G)jEsO_}2&nLpdkII~%IN+`_kHCB%IAk01P z9nzg}>YCs<${uJH-kSw-J54<^R)!iPKy$pIgEQY#B(1dqiV%F4I_LIfPPrTuwi+V4 z7+rWGD`5pJhZQoCTn{dB%q}^1Z$iJ0=~*{M^f}clvT1I9)3Q14RO{7k#s4C0*MnVe z&BO4*hae!pzXTxW=L`jV)NGo)qOnY)tvTM+c0jwVODQ|q`3 z-J8`xJmReQ)QxeGfd75S{s=v7qrZEcjP|VJeM&K2bYgp<_>n`^0v+RGB(ta zOZ75|_A*fmI@g7UqrrhmeZVAo0`NszDNFh^J?-ujQ8|7{TBZAtv~BB$_~`UsEed>m z+m?ixQ>n#NHW~Q47rsMhdo9=2qld$&WD_Ga3B$QFkdnAB=uz;CcV`zfO73n!UEcCw^qg zM_FSgbWD9zpIG6!rXsHQugeU1?Uy}&YmV!W4+P{)tlgTw+5Z)TDZd~oVk7Ucdd1OS zKL6#%_flP#eX+Xe$M|oau-$h0u4$%{c86m;pPA7n>!w4gKYnH!^vE}3S7b%GzuNx# zgtzZ4EbPD{^J#2>yKQCElb#@y#?unuNsOMc#4}Ws|g(K1%-7WWL z-m|45W>Z}EYhGD7Imyz7le&S?d?8T|G%0Ais!M+Wj-S=u{gl^rWstca+Q{K%R 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 EzaErSZ2$lO delta 20619 zcmd74cU)9Q7dJk0_bx0*Q|W>(OI6w~O;pgOid_W7L=!ZbbNVI&lzTVjp0-WCn!|E6_}^;-cMuxf4iCE9O$bR(n&X=}KH7~AxSiyB56*=`yOFX^bctUCV>Y@1$*FQXR6c^<4X8m_dCU(268?Qq* z^&=5?LatpD7>8?3DCtO<_&}I9ZK!=^yRN?f8h^(%j+|;~!=yC@njBds#6TRc{h@(V zmvr` zyK50C7rl5@kH*P9;noO`cd@y&5r9`f_K>6h1iDYrjzKsWm3Q9+Mq z%^4c^S^n0S*F3pu)!RG$7C4Od3>$Re@eA+8vm*V~z`I|ssQ&4$<=4;O2sJd)LE{RS zZmUh~>^-e`&ej#l)x-8J@@x6svU+1eS!Wr0Z#=$_ zI5FdoGo~fuubxhv(z`!PzPUI*XmH^6Cr_ono=@g^bqHJc%+nDuV;ftNmzTWpW=Y3h z85tQ1O7}Sa`CM>x^O7$;9M`<)=ijcwd&NFCk9_mX#nD5C*M0NxhLoct7r*$yscut` z9XsZ2NhuG`=vX#!)P@fhy)^W#>X_JApOnD8@8nKfI(%fDwEUrKN4~1k9(Uf`Kp#u` z^RwPZmQVLPuwmJj_%BCCziRsM$FJ6TP8e0(v+r0+Pq~aZ+w|KXXI57my`O)7(ZE-Btqj;%F!Qm` ze%*dP^43nbuP5|==ZE2k&*a|Dd-mAsaj)-MvUcDXL)<=(ywGXUjMJVoUjJglQ+J=s zu1GBDGv#VPO5Yb>xiKPo{?sj;%NGxY{5m=6cK`PuaIAiV-0r`kFwnJjWzU=U3ctSc zilOF-Xm?9S!O!s*_WTroyCY4W|6}L*S&yWyIDSQ1Aa&fg^PMrXu7ylFJ>&6vXFmF~ z;hozS%ebfl?~1Tf)$^D8-n~0D>d1Q!f4N+muy<+yuD9-0f7<2D?Mb2EKe6=prC+z| z9P3^ga6J6M$HPy(*id<;-&-%I#cqnebuMl~+Na-+tf}gm)HU+CbDb?iUc39*y6RuU zUN89g>4m11=cX@=I-K|ChK1Wl_Zao{2JMhnJ~`Td;jxc4RJ(6}rT({Or(306pU6nA zm^E(4ke#~MYW-_3tfGaT%oo1z<1;D!&%6 z>}1Ir|nNUpo>qV*?>`FfJY5MqqX#qygn#ln=gx zzRu`}@;b^Z8wvRZ>Q`?fY7J8XyG4upj7Af&q|QrUL_dlB*@%6lla?-AmK{Pstb_fUSi z3�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 +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue b/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue index 62c777d..387b13a 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/material/detail/index.vue @@ -14,25 +14,70 @@ > - + - - + + - - + + + + - - + + + + - - + + - - + + + + + + + + + + - +