From 08fbf1ea8e1f65d22fe24aaba09ecadd262c551b Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 12 Apr 2024 18:06:55 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A1.=E7=A7=BB=E5=BA=93=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=89=A9=E5=AE=B92.=E8=99=9A=E6=8B=9F=E5=8C=BA?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=89=A9=E5=AE=B93.=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=BB=BB=E5=8A=A1=E6=8A=A5=E9=94=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=BF=A1=E6=81=AF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/RawAssistIStorServiceImpl.java | 125 +++++++++- .../st/inbill/wql/ST_UPDATESTRUCTSECT_01.wql | 214 ++++++++++++++++++ .../service/impl/CheckOutBillServiceImpl.java | 12 +- 3 files changed, 342 insertions(+), 9 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_UPDATESTRUCTSECT_01.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java index a7645375e..c71d93e28 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java @@ -24,7 +24,9 @@ import org.nl.wms.basedata.st.service.StorattrService; import org.nl.wms.basedata.st.service.StructattrService; import org.nl.wms.basedata.st.service.dto.StorattrDto; import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl; import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; +import org.nl.wms.pda.mps.eum.RegionTypeEnum; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; @@ -41,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * PC端出入库新增 @@ -64,6 +67,7 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { private final RedissonClient redissonClient; + private JSONObject struct_jo = null; @Override public Map pageQuery(Map whereJson, Pageable page) { @@ -551,6 +555,18 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { //判断是否为主存区,主存区调用自动分配,虚拟区调用普通查询 if (StrUtil.isNotEmpty(need_sect) && !"00".equals(need_sect_jo.getString("sect_type_attr"))) { struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0); + // 如果为空则扩容 + if (ObjectUtil.isEmpty(struct_jo)) { + JSONObject jsonParam = new JSONObject(); + jsonParam.put("sect_id", whereJson.get("sect_id")); + jsonParam.put("stor_id", whereJson.get("stor_id")); + jsonParam.put("num", 50); + + StructattrServiceImpl bean = SpringContextHolder.getBean(StructattrServiceImpl.class); + bean.oneCreate(jsonParam); + + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0); + } } else { jo_form.put("sect_id", whereJson.get("sect_id")); struct_jo = this.autoDis(jo_form); @@ -1359,8 +1375,6 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { * */ - JSONObject struct_jo = new JSONObject(); - String box_no = whereJson.getString("box_no"); String sect_id = whereJson.getString("sect_id"); @@ -1728,7 +1742,9 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { } if (ObjectUtil.isEmpty(struct_jo)) { - throw new BadRequestException("未查询到可用的仓位!"); + // 主存区类型更改成中转区类型:找一排主存区的更改中转区、把一排中转区的更改成主存区(只允许调用一次) + updateStructSect(col_num); + autoDisMove(whereJson); } return struct_jo; } @@ -2115,4 +2131,107 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService { map.put("bill_status", "99"); dtl_wql.update(map, "iostorinv_id = '" + mst_row.get("iostorinv_id") + "'"); } + + private void updateStructSect(String layer_num) { + WQLObject attr = WQLObject.getWQLObject("st_ivt_structattr"); + WQLObject point = WQLObject.getWQLObject("sch_base_point"); + /* + * 1.将主存区的一排更改为中转区 + * 2.将中转区的一排更改为主存区 + */ + String block_num = ""; + String row_num = ""; + // 1.找主存区数量小的一排转为中转区 + // 根据块、排进行分组,优先空排 -> 有货数量少的 + List attrListAllEmp = WQL.getWO("ST_UPDATESTRUCTSECT_01").addParam("flag", "1") + .addParam("layer_num", layer_num).process().getResultJSONArray(0) + .toJavaList(JSONObject.class); + + if (ObjectUtil.isEmpty(attrListAllEmp)) { + // 如果为空则查找有空位的排 + List attrListEmp = WQL.getWO("ST_UPDATESTRUCTSECT_01").addParam("flag", "2") + .addParam("layer_num", layer_num).process().getResultJSONArray(0) + .toJavaList(JSONObject.class); + + if (ObjectUtil.isEmpty(attrListEmp)) { + throw new BadRequestException("自动扩容失败,主存区没有空位可扩容!"); + } + + // 判断是这排是否被锁住 + String block_num_in = attrListEmp.stream() + .map(row -> row.getString("block_num")) + .collect(Collectors.joining("','")); + + String row_num_in = attrListEmp.stream() + .map(row -> row.getString("row_num")) + .collect(Collectors.joining("','")); + + List rowList = attr.query("block_num in ('" + block_num_in + "') AND row_num in ('" + row_num_in + "') and layer_num = '" + layer_num + "' and sect_code = 'ZC01'") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + for (int i = 0; i < attrListEmp.size(); i++) { + JSONObject json = attrListEmp.get(i); + + List collect = rowList.stream() + .filter(row -> row.getString("block_num").equals(json.getString("block_num")) && + row.getString("row_num").equals(json.getString("row_num")) + ) + .collect(Collectors.toList()); + + // 判断是否全部都为未锁定 + boolean isLock = collect.stream() + .allMatch(row -> row.getString("lock_type").equals("1")); + + if (!isLock) { + continue; + } + + block_num = json.getString("block_num"); + row_num = json.getString("row_num"); + break; + } + } else { + JSONObject json = attrListAllEmp.get(0); + block_num = json.getString("block_num"); + row_num = json.getString("row_num"); + } + + // 2.将中转区的一排更改为主存区 + // 查询中转区满的一排 + List attrListAllNoEmp = WQL.getWO("ST_UPDATESTRUCTSECT_01").addParam("flag", "3") + .addParam("layer_num", layer_num).process().getResultJSONArray(0) + .toJavaList(JSONObject.class); + + if (ObjectUtil.isNotEmpty(attrListAllNoEmp)) { + // 更新仓位为主存区 + JSONObject jsonParam2 = new JSONObject(); + jsonParam2.put("sect_id", RegionTypeEnum.ZC01.getId()); + jsonParam2.put("sect_code", "ZC01"); + jsonParam2.put("sect_name", RegionTypeEnum.ZC01.getName()); + + JSONObject json = attrListAllNoEmp.get(0); + // 更新仓位 + attr.update(jsonParam2,"sect_code = 'ZZ01' AND block_num = '"+json.getString("block_num")+"' AND row_num = '"+json.getString("row_num")+"' AND layer_num = '"+layer_num+"'"); + + // 更新点位 + jsonParam2.put("region_id", RegionTypeEnum.ZC01.getId()); + jsonParam2.put("region_code", "ZC01"); + jsonParam2.put("region_name", RegionTypeEnum.ZC01.getName()); + point.update(jsonParam2,"region_code = 'ZZ01' AND block_num = '"+json.getString("block_num")+"' AND row_num = '"+json.getString("row_num")+"' AND layer_num = '"+layer_num+"'"); + + } + + // 更新仓位为中转区 + JSONObject jsonParam = new JSONObject(); + jsonParam.put("sect_id", RegionTypeEnum.ZZ01.getId()); + jsonParam.put("sect_code", "ZZ01"); + jsonParam.put("sect_name", RegionTypeEnum.ZZ01.getName()); + attr.update(jsonParam,"sect_code = 'ZC01' AND block_num = '"+block_num+"' AND row_num = '"+row_num+"' AND layer_num = '"+layer_num+"'"); + + // 更新点位 + jsonParam.put("region_id", RegionTypeEnum.ZZ01.getId()); + jsonParam.put("region_code", "ZZ01"); + jsonParam.put("region_name", RegionTypeEnum.ZZ01.getName()); + point.update(jsonParam,"region_code = 'ZC01' AND block_num = '"+block_num+"' AND row_num = '"+row_num+"' AND layer_num = '"+layer_num+"'"); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_UPDATESTRUCTSECT_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_UPDATESTRUCTSECT_01.wql new file mode 100644 index 000000000..d550707a5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_UPDATESTRUCTSECT_01.wql @@ -0,0 +1,214 @@ +[交易说明] + 交易名: 更新仓位属性查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.layer_num TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + * + FROM + ( + SELECT + sa.block_num, + sa.row_num, + COUNT( sa.struct_code ) AS struct_num + FROM + st_ivt_structattr sa + WHERE + sa.is_delete = '0' + AND sa.is_used = '1' + AND sa.sect_code = 'ZC01' + OPTION 输入.layer_num <> "" + sa.layer_num = 输入.layer_num + ENDOPTION + GROUP BY + sa.block_num, + sa.row_num + ) a + WHERE + EXISTS ( + SELECT + * + FROM + ( + SELECT + block_num, + row_num, + COUNT( sa2.struct_code ) AS struct_num + FROM + st_ivt_structattr sa2 + WHERE + sa2.lock_type = '1' + AND sa2.is_used = '1' + AND sa2.is_delete = '0' + AND sa2.sect_code = 'ZC01' + AND IFNULL( sa2.storagevehicle_code, '' ) = '' + OPTION 输入.layer_num <> "" + sa2.layer_num = 输入.layer_num + ENDOPTION + GROUP BY + sa2.block_num, + sa2.row_num + ) b + WHERE + b.block_num = a.block_num + AND b.row_num = a.row_num + AND a.struct_num = b.struct_num + ) ORDER BY struct_num DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + ( + SELECT + sa.block_num, + sa.row_num, + COUNT( sa.struct_code ) AS struct_num + FROM + st_ivt_structattr sa + WHERE + sa.is_delete = '0' + AND sa.is_used = '1' + AND sa.lock_type = '1' + AND sa.sect_code = 'ZC01' + OPTION 输入.layer_num <> "" + sa.layer_num = 输入.layer_num + ENDOPTION + GROUP BY + sa.block_num, + sa.row_num + ) a + WHERE + EXISTS ( + SELECT + * + FROM + ( + SELECT + block_num, + row_num, + COUNT( sa2.struct_code ) AS struct_num + FROM + st_ivt_structattr sa2 + WHERE + sa2.lock_type = '1' + AND sa2.is_used = '1' + AND sa2.is_delete = '0' + AND sa2.sect_code = 'ZC01' + AND IFNULL( sa2.storagevehicle_code, '' ) = '' + OPTION 输入.layer_num <> "" + sa2.layer_num = 输入.layer_num + ENDOPTION + GROUP BY + sa2.block_num, + sa2.row_num + ) b + WHERE + b.block_num = a.block_num + AND b.row_num = a.row_num + ) ORDER BY struct_num DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + * + FROM + ( + SELECT + sa.block_num, + sa.row_num, + COUNT( sa.struct_code ) AS struct_num + FROM + st_ivt_structattr sa + WHERE + sa.is_delete = '0' + AND sa.is_used = '1' + AND sa.lock_type = '1' + AND sa.sect_code = 'ZZ01' + OPTION 输入.layer_num <> "" + sa.layer_num = 输入.layer_num + ENDOPTION + GROUP BY + sa.block_num, + sa.row_num + ) a + WHERE + EXISTS ( + SELECT + * + FROM + ( + SELECT + block_num, + row_num, + COUNT( sa2.struct_code ) AS struct_num + FROM + st_ivt_structattr sa2 + WHERE + sa2.lock_type = '1' + AND sa2.is_used = '1' + AND sa2.is_delete = '0' + AND sa2.sect_code = 'ZZ01' + AND IFNULL( sa2.storagevehicle_code, '' ) <> '' + OPTION 输入.layer_num <> "" + sa2.layer_num = 输入.layer_num + ENDOPTION + GROUP BY + sa2.block_num, + sa2.row_num + ) b + WHERE + b.block_num = a.block_num + AND b.row_num = a.row_num + AND a.struct_num = b.struct_num + ) ORDER BY struct_num DESC + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file 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 7d31b2d3c..c6bcf40fe 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 @@ -2671,7 +2671,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int k = 0; k < numArr.size(); k++) { JSONObject json = numArr.getJSONObject(k); - error += json.getString("struct_code") + ","; + error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code"); } throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!"); @@ -2705,7 +2705,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int k = 0; k < numArr.size(); k++) { JSONObject json = numArr.getJSONObject(k); - error += json.getString("struct_code") + ","; + error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code"); } throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!"); @@ -2739,7 +2739,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int k = 0; k < numArr.size(); k++) { JSONObject json = numArr.getJSONObject(k); - error += json.getString("struct_code") + ","; + error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code"); } throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!"); @@ -3131,7 +3131,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int k = 0; k < numArr.size(); k++) { JSONObject json = numArr.getJSONObject(k); - error += json.getString("struct_code") + ","; + error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code"); } throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!"); @@ -3163,7 +3163,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int k = 0; k < numArr.size(); k++) { JSONObject json = numArr.getJSONObject(k); - error += json.getString("struct_code") + ","; + error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code"); } throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!"); @@ -3195,7 +3195,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int k = 0; k < numArr.size(); k++) { JSONObject json = numArr.getJSONObject(k); - error += json.getString("struct_code") + ","; + error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code"); } throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");