diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java index b60cd7fcd..c04aabbae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java @@ -109,9 +109,6 @@ public class OutTask extends AbstractAcsTask { json.put("create_id", currentUserId); json.put("create_name", currentUsername); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "5"); - WQLObject.getWQLObject("SCH_BASE_Task").insert(json); return json.getString("task_id"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index 710f9abd0..437fc6dd0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -17,6 +17,7 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.dto.TaskDto; +import org.nl.wms.sch.tasks.OutTask; import org.nl.wms.st.inbill.service.CheckOutBillService; import org.nl.wms.st.inbill.service.StorPublicService; import org.springframework.beans.factory.annotation.Autowired; @@ -959,13 +960,12 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); //出库主表 WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //仓位表 + WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr"); String struct_id = whereJson.getString("struct_id"); String point_code = whereJson.getString("point_code"); // 终点 String iostorinv_id = whereJson.getString("iostorinv_id"); - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String nowtime = DateUtil.now(); //查询主表信息 JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); @@ -973,9 +973,9 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { throw new BadRequestException("未查到相关出库单"); } - JSONObject point = wo_Point.query("lock_type='1' and (vehicle_code='' or vehicle_code IS NULL) and point_code='" + point_code + "'").uniqueResult(0); + JSONObject jsonPoint2 = wo_Point.query("lock_type='1' and (vehicle_code='' or vehicle_code IS NULL) and point_code='" + point_code + "'").uniqueResult(0); //如果终点站点被锁定或者有载具号,则不允许设置点位 - if (ObjectUtil.isEmpty(point)) { + if (ObjectUtil.isEmpty(jsonPoint2)) { throw new BadRequestException("该站点被锁定或者有载具号,不允许设置!"); } @@ -993,8 +993,6 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { throw new BadRequestException("分配明细不存在或已执行、完成、!"); } - HashMap map = new HashMap(); - String storagevehicle_code = dis.getString("storagevehicle_code"); String task_status = dis.getString("task_status"); String task_id = dis.getString("task_id"); @@ -1006,34 +1004,193 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { //若任务不为空,则为变更出库目的站点 JSONObject task = wo_Task.query("task_id='" + task_id + "'").uniqueResult(0); //更新任务 - task.put("point_code2", point.getString("point_code")); + task.put("point_code2", jsonPoint2.getString("point_code")); wo_Task.update(task); } else { /* * 生成任务: * 1.判断此条分配明细的 ‘仓位’在此主表下的分配明细是否有相同的 ‘仓位’ - * a.如果有:有则只生成一条任务 - * b.没有:则生成生成 + * a.如果有:有则合并只生成一条任务 + * b.没有:则正常生成 * 2.判断此货位是否被挡住 * a.挡住:判断哪边的货位比较少 , 生成移库单 * b.没挡住:正常生成 */ - JSONObject jsonMap = new JSONObject(); - jsonMap.put("flag", "2"); - jsonMap.put("struct_id", dis.getString("struct_id")); + JSONObject jsonPoint1 = wo_Point.query("source_id = '" + dis.getString("struct_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint1)) throw new BadRequestException("起点点位不存在"); + // 创建任务 + JSONObject param = new JSONObject(); + param.put("task_type", "010301"); + param.put("vehicle_code", dis.getString("box_no")); + param.put("task_name", "task_name"); + param.put("point_code1", jsonPoint1.getString("point_code")); + param.put("point_code2", jsonPoint2.getString("point_code")); + param.put("material_id", dis.getString("material_id")); + param.put("task_group_id", ""); // 任务组 + param.put("sort_seq", ""); // 任务组顺序号 + + OutTask outTask = new OutTask(); + String create_task_id = outTask.createTask(param); + + // 更新分配状态、任务标识、出库点位 + JSONObject jsonTask = wo_Task.query("task_id = '" + create_task_id + "'").uniqueResult(0); + JSONObject jsonUpdateMap = new JSONObject(); + jsonUpdateMap.put("work_status", "01"); + jsonUpdateMap.put("task_id", jsonTask.getLong("task_id")); + jsonUpdateMap.put("point_id", jsonPoint2.getLong("point_id")); + wo_dis.update(jsonUpdateMap, "iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'"); + + // 1.判断此条分配明细的 ‘仓位’在此主表下的分配明细是否有相同的 ‘仓位’ + JSONArray disArr = wo_dis.query("struct_id = '" + dis.getString("struct_id") + + "' and iostorinv_id = '" + dis.getString("iostorinv_id") + + "' and iostorinvdis_id <> '" + dis.getString("iostorinvdis_id") + + "' and work_status = '00'").getResultJSONArray(0); + + // 依次更新相同仓位的分配明细状态、任务标识、出库点位 + for (int i = 0; i < disArr.size(); i++) { + JSONObject jsonObject = disArr.getJSONObject(i); + jsonObject.put("work_status", "01"); + jsonObject.put("task_id", jsonTask.getLong("task_id")); + jsonObject.put("point_id", jsonPoint2.getLong("point_id")); + wo_dis.update(jsonObject); + } + + // 2.判断此货位是否被挡住 + JSONObject jsonAttr = attrTab.query("struct_id = '" + dis.getString("struct_id") + "'").uniqueResult(0); + + // 判断此仓位是‘双通’还是’单通‘ + if (StrUtil.equals(jsonAttr.getString("placement_type"), "01")) { + + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("struct_code", jsonAttr.getString("struct_code")); + map.put("sect_id", jsonAttr.getString("sect_id")); + + // 判断左边是否被挡住 + JSONObject jsonIsBlockL = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().uniqueResult(0); + + // 判断右边是否被挡住 + map.put("flag", "1"); + JSONObject jsonIsBlockR = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonIsBlockL) && ObjectUtil.isNotEmpty(jsonIsBlockR)) { + // 都被挡住判断哪边被挡住的货位少 + map.put("flag", "3"); + map.put("out_order_seq", jsonAttr.getString("out_order_seq")); + JSONArray jsonIsBlockAll = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().getResultJSONArray(0); + + int blockLeft = 0; // 左边个数 + int blockRigth = 0; // 右边个数 + for (int i = 0; i < jsonIsBlockAll.size(); i++) { + JSONObject json = jsonIsBlockAll.getJSONObject(i); + + if (i == 0) blockRigth = json.getIntValue("num"); + if (i == 1) blockRigth = json.getIntValue("num"); + } + + // 更新第一个任务 任务组、任务顺序号 + jsonTask.put("task_group_id", IdUtil.getSnowflake(1,1).nextId()); + jsonTask.put("sort_seq", 1); + wo_Task.update(jsonTask); + + JSONArray jsonAllBlockPoint = new JSONArray(); + if (blockLeft > blockRigth) { + // 从右边生成移库单 + map.put("flag", "4"); + map.put("block_num",jsonAttr.getString("block_num")); + map.put("row_num",jsonAttr.getString("row_num")); + + jsonAllBlockPoint = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().getResultJSONArray(0); + + } else { + // 从左边生成移库单 + map.put("flag", "5"); + map.put("block_num",jsonAttr.getString("block_num")); + map.put("row_num",jsonAttr.getString("row_num")); + + jsonAllBlockPoint = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().getResultJSONArray(0); + } + + for (int i = 0; i < jsonAllBlockPoint.size(); i++) { + JSONObject json = jsonAllBlockPoint.getJSONObject(i); + // TODO 创建移库单 + + // 生成任务 + JSONObject param2 = new JSONObject(); + param2.put("task_type", "010301"); + param2.put("vehicle_code", json.getString("storagevehicle_code")); + param2.put("task_name", "task_name"); + param2.put("point_code1", json.getString("point_code")); + param2.put("point_code2", ""); // TODO 移入仓位 + param2.put("task_group_id", jsonTask.getLongValue("task_group_id")); // 任务组 + param2.put("sort_seq", jsonTask.getIntValue("sort_seq") + i + 1); // 任务组顺序号 + outTask.createTask(param2); + } + } + } else { + JSONObject map = new JSONObject(); + map.put("struct_code", jsonAttr.getString("struct_code")); + map.put("sect_id", jsonAttr.getString("sect_id")); + map.put("out_order_seq", jsonAttr.getString("out_order_seq")); + map.put("block_num",jsonAttr.getString("block_num")); + map.put("row_num",jsonAttr.getString("row_num")); + + JSONArray jsonAllBlockPoint = new JSONArray(); + if (StrUtil.equals(jsonAttr.getString("placement_type"), "02")) { + // 02-左通 + map.put("flag", "2"); + // 判断左边是否被挡住 + JSONObject jsonIsBlockL = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonIsBlockL)) { + // 更新第一个任务 任务组、任务顺序号 + jsonTask.put("task_group_id", IdUtil.getSnowflake(1,1).nextId()); + jsonTask.put("sort_seq", 1); + wo_Task.update(jsonTask); + // 从左边生成移库单 + map.put("flag", "5"); + jsonAllBlockPoint = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().getResultJSONArray(0); + } + } + + if (StrUtil.equals(jsonAttr.getString("placement_type"), "03")) { + // 03-右通 + map.put("flag", "1"); + JSONObject jsonIsBlockR = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonIsBlockR)) { + // 更新第一个任务 任务组、任务顺序号 + jsonTask.put("task_group_id", IdUtil.getSnowflake(1,1).nextId()); + jsonTask.put("sort_seq", 1); + wo_Task.update(jsonTask); + // 从右边生成移库单 + map.put("flag", "4"); + jsonAllBlockPoint = WQL.getWO("ST_OUTIVT03").addParamMap(map).process().getResultJSONArray(0); + } + } + + for (int i = 0; i < jsonAllBlockPoint.size(); i++) { + JSONObject json = jsonAllBlockPoint.getJSONObject(i); + // TODO 创建移库单 + + // 生成任务 + JSONObject param2 = new JSONObject(); + param2.put("task_type", "010301"); + param2.put("vehicle_code", json.getString("storagevehicle_code")); + param2.put("task_name", "task_name"); + param2.put("point_code1", json.getString("point_code")); + param2.put("point_code2", ""); // TODO 移入仓位 + param2.put("task_group_id", jsonTask.getLongValue("task_group_id")); // 任务组 + param2.put("sort_seq", jsonTask.getIntValue("sort_seq") + i + 1); // 任务组顺序号 + outTask.createTask(param2); + } + + } } - - //更新分配表状态、任务号 - map.put("work_status", "01"); - map.put("task_id", task_id); - map.put("point_id", point.getString("point_id")); -// map.put("point_code", point.getString("point_code")); -// map.put("point_name", point.getString("point_name")); - wo_dis.update(map, "iostorinv_id='" + iostorinv_id + "' and storagevehicle_code='" + storagevehicle_code + "'"); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql index 5781e7ed6..30049aaa1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql @@ -54,29 +54,6 @@ WHERE ivt.pcsn <> 输入.pcsn - OPTION 输入.struct_id <> "" - ivt.struct_id = 输入.struct_id - ENDOPTION - - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - ivt.*, - attr.storagevehicle_code AS box_no, - mater.base_unit_id AS qty_unit_id, - unit.unit_name AS qty_unit_name - FROM - ST_IVT_StructIvt ivt - LEFT JOIN ST_IVT_StructAttr attr ON ivt.struct_id = attr.struct_id - LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id - LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mater.base_unit_id - WHERE - ivt.pcsn <> 输入.pcsn - OPTION 输入.struct_id <> "" ivt.struct_id = 输入.struct_id ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT03.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT03.wql new file mode 100644 index 000000000..132afe190 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT03.wql @@ -0,0 +1,250 @@ +[交易说明] + 交易名: 货位判断 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.struct_code TYPEAS s_string + 输入.sect_id TYPEAS s_string + 输入.out_order_seq TYPEAS s_string + 输入.block_num TYPEAS s_string + 输入.row_num TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + * + FROM + ( + SELECT + sa.block_num, + sa.row_num, + sa.placement_type, + sa.out_order_seq + FROM + st_ivt_structattr sa + WHERE + sa.is_delete = '0' + AND is_used = '1' + + OPTION 输入.struct_code <> "" + sa.struct_code = 输入.struct_code + ENDOPTION + + OPTION 输入.sect_id <> "" + sa.sect_id = 输入.sect_id + ENDOPTION + + ) a + WHERE + EXISTS ( + SELECT + * + FROM + ( + SELECT + block_num, + row_num, + placement_type, + out_order_seq + FROM + st_ivt_structattr sa3 + WHERE + IFNULL( sa3.storagevehicle_code, '' ) <> '' + ) c + WHERE + c.block_num = a.block_num + AND c.row_num = a.row_num + AND c.placement_type = a.placement_type + AND c.out_order_seq < a.out_order_seq + ) + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + ( + SELECT + sa.block_num, + sa.row_num, + sa.placement_type, + sa.out_order_seq + FROM + st_ivt_structattr sa + WHERE + sa.is_delete = '0' + AND is_used = '1' + + OPTION 输入.struct_code <> "" + sa.struct_code = 输入.struct_code + ENDOPTION + + OPTION 输入.sect_id <> "" + sa.sect_id = 输入.sect_id + ENDOPTION + ) a + WHERE + EXISTS ( + SELECT + * + FROM + ( + SELECT + block_num, + row_num, + placement_type, + sa2.out_order_seq + FROM + st_ivt_structattr sa2 + WHERE + IFNULL( sa2.storagevehicle_code, '' ) <> '' + ) b + WHERE + b.block_num = a.block_num + AND b.row_num = a.row_num + AND b.placement_type = a.placement_type + AND b.out_order_seq > a.out_order_seq + ) + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + COUNT(*) AS num + FROM + st_ivt_structattr sa + INNER JOIN + ( + SELECT + a.block_num, + a.row_num + FROM + st_ivt_structattr a + WHERE + a.struct_code = 输入.struct_code + ) b ON b.block_num = sa.block_num + AND b.row_num = sa.row_num + WHERE + sa.out_order_seq < 输入.out_order_seq + AND IFNULL( sa.storagevehicle_code, '' ) <> '' + AND sa.lock_type = '1' + + UNION + + SELECT + COUNT(*) AS num + FROM + st_ivt_structattr sa + INNER JOIN + ( + SELECT + a.block_num, + a.row_num + FROM + st_ivt_structattr a + WHERE + a.struct_code = 输入.struct_code + ) b ON b.block_num = sa.block_num + AND b.row_num = sa.row_num + WHERE + sa.out_order_seq > 输入.out_order_seq + AND IFNULL( sa.storagevehicle_code, '' ) <> '' + AND sa.lock_type = '1' + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + attr.*, + point.point_code + FROM + ST_IVT_StructAttr attr + LEFT JOIN SCH_BASE_Point point ON attr.struct_id = point.source_id + WHERE + attr.out_order_seq < 输入.out_order_seq + AND IFNULL(attr.storagevehicle_code,'') <> '' + AND attr.lock_type = '1' + + OPTION 输入.block_num <> "" + attr.block_num = 输入.block_num + ENDOPTION + + OPTION 输入.row_num <> "" + attr.row_num = 输入.row_num + ENDOPTION + + order by attr.out_order_seq DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + attr.*, + point.point_code + FROM + ST_IVT_StructAttr attr + LEFT JOIN SCH_BASE_Point point ON attr.struct_id = point.source_id + WHERE + attr.out_order_seq > 输入.out_order_seq + AND IFNULL(attr.storagevehicle_code,'') <> '' + AND attr.lock_type = '1' + + OPTION 输入.block_num <> "" + attr.block_num = 输入.block_num + ENDOPTION + + OPTION 输入.row_num <> "" + attr.row_num = 输入.row_num + ENDOPTION + + order by attr.out_order_seq ASC + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file