From 6c03f3a96bfead03945d8de020b994766cda387d Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Fri, 3 Apr 2026 15:50:05 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E4=BA=8C=E6=A5=BC?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E6=89=98=E7=9B=98=E5=85=A5=E5=BA=93=E9=80=BB?= =?UTF-8?q?=E8=BE=91;=20opt:=E4=BC=98=E5=8C=96=E6=90=9C=E7=B4=A2=E7=9B=B8?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/MdPbStoragevehicleextMapper.xml | 5 +- .../service/impl/StructattrServiceImpl.java | 69 +++++++++++++------ .../impl/base/NearbyRuleHandler.java | 3 +- .../service/impl/InBillServiceImpl.java | 1 + .../service/impl/WmsToIWmsServiceImpl.java | 8 +-- 5 files changed, 57 insertions(+), 29 deletions(-) diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml index 9ef4770..1fd8a28 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml @@ -93,7 +93,10 @@ (attr.struct_code LIKE #{param.struct_code} or attr.struct_name LIKE #{param.struct_code} ) - + + AND + attr.storagevehicle_code LIKE #{param.storagevehicle_code} + AND (mater.material_code LIKE #{param.material_code} or diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index eae1ede..78cf859 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java @@ -348,57 +348,82 @@ public class StructattrServiceImpl extends ServiceImpl inBoundSectDiv(StrategyStructParam param) { //批号,单据暂时不校验,具体业务具体校验 - Assert.noNullElements(new Object[]{param.getStrategyMaters(),param.getStor_code(),param.getSect_code()},"请求参数不能为空"); + Assert.noNullElements(new Object[]{param.getStrategyMaters(), param.getStor_code(), param.getSect_code()}, "请求参数不能为空"); StSectStrategy one = iStSectStrategyService.getOne(new LambdaQueryWrapper() .eq(StSectStrategy::getSect_code, param.getSect_code()) .eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("入库"))); - if (one==null){ - throw new BadRequestException("当前库区"+param.getSect_code()+"未配置入库规则"); + if (one == null) { + throw new BadRequestException("当前库区" + param.getSect_code() + "未配置入库规则"); + } + //最高层数 + Integer maxLayerNum = structattrMapper.selectList( + new QueryWrapper() + .select("MAX(layer_num) as layer_num") + .eq("sect_code", param.getSect_code()) + ).stream().findFirst().map(Structattr::getLayer_num).orElse(null); + if (maxLayerNum == null) { + maxLayerNum = 0; } List strategy = one.getStrategy(); Map decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); QueryWrapper query = new QueryWrapper(); - if ("3".equals(param.getSuitable_car())) { - query.eq("is_used", true) - .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) - .eq("sect_code", param.getSect_code()) - .isNull("width") - .isNull("stor_type") + if ("2FCP3C".equals(param.getStoragevehicle_type())) { + query.eq("is_used", true) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("sect_code", param.getSect_code()) + .eq("layer_num", maxLayerNum) .and(wrapper -> wrapper.isNull("storagevehicle_code") .or() .eq("storagevehicle_code", " ")); - } else if("2".equals(param.getSuitable_car())){ + } else if ("3".equals(param.getSuitable_car())) { query.eq("is_used", true) - .eq("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) .eq("sect_code", param.getSect_code()) - .eq("width",1) - .ne("layer_num",4) + .isNull("width") .isNull("stor_type") .and(wrapper -> wrapper.isNull("storagevehicle_code") .or() .eq("storagevehicle_code", " ")); - } else if ("1".equals(param.getSuitable_car())){ + } else if ("2".equals(param.getSuitable_car())) { query.eq("is_used", true) - .eq("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) .eq("sect_code", param.getSect_code()) - .eq("layer_num",4) + .eq("width", 1) + .ne("layer_num", maxLayerNum) + .isNull("stor_type") + .and(wrapper -> wrapper.isNull("storagevehicle_code") + .or() + .eq("storagevehicle_code", " ")); + } else if ("1".equals(param.getSuitable_car())) { + query.eq("is_used", true) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("sect_code", param.getSect_code()) + .eq("layer_num", maxLayerNum) .isNull("stor_type") .and(wrapper -> wrapper.isNull("storagevehicle_code") .or() .eq("storagevehicle_code", " ")); } List list = this.list(query); - if("BCPCTZB".equals(param.getStoragevehicle_type())){ - list=structattrMapper.getctnextcode(); + if ("BCPCTZB".equals(param.getStoragevehicle_type())) { + list = structattrMapper.getctnextcode(); + } + if ("2FCP3C".equals(param.getStoragevehicle_type()) && ObjectUtil.isEmpty(list)) { + query.eq("is_used", true) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("sect_code", param.getSect_code()) + .and(wrapper -> wrapper.isNull("storagevehicle_code") + .or() + .eq("storagevehicle_code", " ")); + list = this.list(query); } - for (String decisionerType : strategy) { Decisioner decisioner = decisionerMap.get(decisionerType); - log.info("执行入库规格:"+decisioner.strategyConfig.getStrategy_name()); + log.info("执行入库规格:" + decisioner.strategyConfig.getStrategy_name()); JSONObject params = (JSONObject) JSON.toJSON(param); list = decisioner.handler(list, params); - if (CollectionUtils.isEmpty(list)){ - throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+list.size()); + if (CollectionUtils.isEmpty(list)) { + throw new BadRequestException("当前策略" + decisioner.strategyConfig.getStrategy_name() + ",当前仓库:" + param.getStor_code() + ",当前库区:" + param.getSect_code() + "无可用货位,分配前数量:" + list.size()); } } return list; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/NearbyRuleHandler.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/NearbyRuleHandler.java index 8d68e49..278254a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/NearbyRuleHandler.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/decision_manage/service/strategyConfig/decisioner/impl/base/NearbyRuleHandler.java @@ -46,9 +46,8 @@ public class NearbyRuleHandler extends Decisioner { */ @Override public List handler(List list, JSONObject param) { - if (CollectionUtils.isEmpty(list)) { - throw new BadRequestException("当前分配策略无可用货位"); + throw new BadRequestException("当前策略:就近放置策略"+",当前仓库:"+param.getString("stor_code")+",当前库区:"+param.getString("sect_code")+",当前载具:"+param.getString("storagevehicle_code")+",当前载具类型:"+param.getString("storagevehicle_type")+",系统暂无空余库位,分配前数量:"+list.size()); } List before = list.subList(0, list.size() > 10 ? 10 : list.size()); log.info("就近分配前:" + before.stream().map(Structattr::getStruct_code).collect(Collectors.joining(","))); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java index d50229a..a479120 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/InBillServiceImpl.java @@ -638,6 +638,7 @@ public class InBillServiceImpl extends ServiceImpl i .storagevehicle_type(param.getString("storagevehicle_type")) .suitable_car(suitable_car) .strategyMaters(maters) + .storagevehicle_type(storagevehicle_stype) .build()); Structattr struct = structattrs.get(0); sect_id = struct.getSect_id(); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java index a81b11f..a37bf3b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java @@ -182,7 +182,7 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { } String car_type=null; String car_width="685"; - if(parm.getString("task_type").equals("1")){ + if("1".equals(parm.getString("task_type"))){ List regionCode = structattrMapper.selectList(new LambdaQueryWrapper() .eq(Structattr::getSect_code, "1BCDJQ") .eq(Structattr::getIs_used,true) @@ -192,7 +192,7 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { if(StringUtils.isBlank(pointCode)){ throw new BadRequestException("待检区域无库存"); } - if(parm.getString("storagevehicle_type").equals("BCPHDL")){ + if("BCPHDL".equals(parm.getString("storagevehicle_type"))||"2FCP3C".equals(parm.getString("storagevehicle_type"))){ car_type="1"; }else{ car_type="2"; @@ -208,8 +208,8 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { task_form.put("car_width",car_width); CheckInTask checkInTask = SpringContextHolder.getBean("CheckInTask"); String task_id = checkInTask.create(task_form); - } else if(parm.getString("task_type").equals("2")){ - if(parm.getString("storagevehicle_type").equals("BCPHDL")){ + } else if("2".equals(parm.getString("task_type"))){ + if("BCPHDL".equals(parm.getString("storagevehicle_type"))||"2FCP3C".equals(parm.getString("storagevehicle_type"))){ car_type="1"; }else{ car_type="2";