From 0473d9529ece08bcb98c26a2552f7ba093db60ef Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 26 Jun 2024 17:13:34 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E7=A9=BA=E6=9C=A8=E7=AE=B1?= =?UTF-8?q?=E5=85=A5=E5=BA=93=EF=BC=9A=E4=BC=98=E5=85=88=E5=B0=86=E7=9B=B8?= =?UTF-8?q?=E5=90=8C=E6=9C=A8=E7=AE=B1=E8=A7=84=E6=A0=BC=E7=9A=84=E6=9C=A8?= =?UTF-8?q?=E7=AE=B1=E6=94=BE=E5=9C=A8=E5=90=8C=E4=B8=80=E6=B7=B1=E6=B5=85?= =?UTF-8?q?=E8=B4=A7=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/impl/InBoxManageServiceImpl.java | 91 ++++++++++++++++++- .../service/iostorInv/util/wql/BST_INBOX.wql | 65 ++++++++++++- 2 files changed, 154 insertions(+), 2 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java index 84a41f20d..0cfd69156 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java @@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -132,7 +133,15 @@ public class InBoxManageServiceImpl implements InBoxManageService { jsonParam.put("box_high", boxDao.getBox_high()); jsonParam.put("vehicle_type", boxDao.getVehicle_type()); jsonParam.put("height", height); - JSONObject jsonAttr = getStruct(jsonParam); + + // 优先找相同规格的木箱:如果未找到在执行负载均衡策略 + JSONObject jsonAttr; + jsonAttr = queryEqualBox(jsonParam); + + if (ObjectUtil.isEmpty(jsonAttr)) { + jsonAttr = getStruct(jsonParam); + } + if (ObjectUtil.isEmpty(jsonAttr)) { notInRowList.clear(); notInBlockList.clear(); @@ -412,6 +421,84 @@ public class InBoxManageServiceImpl implements InBoxManageService { return jsonAttrNow; } + /** + * 根据木箱规格找相同规格的仓位 + * @param jsonParam { + * stor_id:仓库标识 + * sect_id:库区标识 + * box_length:木箱长度 + * box_width:木箱宽度 + * box_high:木箱高度 + * vehicle_type: 载具类型 + * height: 仓位高度 + * } + * @return JSONObject : 仓位对象 + */ + private JSONObject queryEqualBox(JSONObject jsonParam) { + // 需要返回的仓位 + JSONObject result = new JSONObject(); + + // 1.匹配相同木箱规格的排(row_num) + jsonParam.put("flag", "6"); + List rowList = WQL.getWO("BST_INBOX").addParamMap(jsonParam) + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 查询此排的所有仓位 + String row_in = rowList.stream() + .map(row -> row.getString("row_num")) + .collect(Collectors.joining("','")); + + List attrRowAllList = WQL.getWO("BST_INBOX").addParam("flag", "7").addParam("sect_id", jsonParam.getString("sect_id")) + .addParam("row_in", "('" + row_in + "')").process().getResultJSONArray(0).toJavaList(JSONObject.class); + + + outerLoop: for (JSONObject jsonRow : rowList) { + // 查询这一排相同木箱规格的仓位 + List attrRowList = attrRowAllList.stream() + .filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num"))) + .filter(row -> row.getDoubleValue("box_length") == jsonParam.getDoubleValue("box_length") + && row.getDoubleValue("box_width") == jsonParam.getDoubleValue("box_width") + && row.getDoubleValue("box_high") == jsonParam.getDoubleValue("box_high") + && ObjectUtil.isNotEmpty(row.getString("storagevehicle_code")) + ) + .collect(Collectors.toList()); + + // 匹配货位 + for (JSONObject json : attrRowList) { + // 判断此货位是深位还是浅位 + if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) + || json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无")) + ) { + continue; + } + + // 如果是深位:找出对应浅位 + JSONObject lowAttr = attrRowAllList.stream() + .filter(row -> row.getString("col_num").equals(json.getString("col_num")) && + row.getString("layer_num").equals(json.getString("layer_num")) && + row.getString("row_num").equals(json.getString("row_num")) && + row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(lowAttr)) { + throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!"); + } + + // 判断此仓位是否有货、是否被锁住 + if (ObjectUtil.isNotEmpty(lowAttr.getString("storagevehicle_code")) + || !lowAttr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定")) + ) { + continue; + } + + result = lowAttr; + break outerLoop; + } + + } + return result; + } + /** * 找一个空仓位(木箱区) * @@ -502,6 +589,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { * box_length:木箱长度 * box_width:木箱宽度 * box_high:木箱高度 + * vehicle_type: 载具类型 * } * @return String 巷道 */ @@ -562,6 +650,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { * box_length:木箱长度 * box_width:木箱宽度 * box_high:木箱高度 + * vehicle_type: 载具类型 * } * @return String 排 */ diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql index 795a6f307..a3c17f1f2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/wql/BST_INBOX.wql @@ -20,6 +20,9 @@ 输入.height TYPEAS s_string 输入.row_num TYPEAS s_string 输入.vehicle_type TYPEAS s_string + 输入.box_length TYPEAS s_string + 输入.box_width TYPEAS s_string + 输入.box_high TYPEAS s_string 输入.block_in TYPEAS f_string 输入.row_in TYPEAS f_string 输入.not_row_in TYPEAS f_string @@ -184,4 +187,64 @@ ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + attr.row_num + FROM + st_ivt_structattr attr + INNER JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.stor_id = 输入.stor_id + AND attr.sect_id = 输入.sect_id + AND attr.storagevehicle_type = 输入.vehicle_type + AND box.is_packing = '0' + AND IFNULL(attr.storagevehicle_code,'') <> '' + + OPTION 输入.box_length <> "" + box.box_length = 输入.box_length + ENDOPTION + + OPTION 输入.box_width <> "" + box.box_width = 输入.box_width + ENDOPTION + + OPTION 输入.box_high <> "" + box.box_high = 输入.box_high + ENDOPTION + + GROUP BY attr.row_num + + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "7" + QUERY + SELECT + attr.*, + box.box_length, + box.box_width, + box.box_high + FROM + st_ivt_structattr attr + LEFT JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code AND box.is_packing = '0' + WHERE + attr.is_used = '1' + AND attr.is_delete = '0' + AND attr.sect_id = 输入.sect_id + + OPTION 输入.row_in <> "" + attr.row_num IN 输入.row_in + ENDOPTION + + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF