From d2eb57a2beb94b9fef32473a763b33799e893213 Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Fri, 8 Dec 2023 10:27:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=87=E8=B4=AD=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E6=8E=A8=E8=8D=90=E5=BA=93=E4=BD=8D=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/service/location/LocationService.java | 7 +- .../service/location/LocationServiceImpl.java | 89 +++++++++++++++---- ...roductionreturnRequestMainServiceImpl.java | 16 ++-- .../PutawayRequestMainServiceImpl.java | 6 +- 4 files changed, 87 insertions(+), 31 deletions(-) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java index 280b7b41..9b9976a8 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java @@ -4,6 +4,7 @@ import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.location.vo.*; import com.win.module.wms.controller.rule.vo.RuleRespVO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.location.LocationDO; import javax.validation.Valid; @@ -92,10 +93,8 @@ public interface LocationService { /** * 上架推荐策略 * @param ruleRespVO 上架策略 - * @param packingNumber 包装号 - * @param itemCode 物料编码 - * @param batch 批次 + * @param itembasicDO 物品 * @return */ - LocationDO inspectLocation(RuleRespVO ruleRespVO, String packingNumber, String itemCode, String batch); + LocationDO inspectLocation(RuleRespVO ruleRespVO, ItembasicDO itembasicDO); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java index cb6f7f94..385fa2df 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java @@ -12,16 +12,14 @@ import com.win.framework.common.pojo.PageResult; import com.win.framework.datapermission.core.util.DataPermissionUtils; import com.win.module.wms.controller.location.vo.*; import com.win.module.wms.controller.rule.vo.RuleRespVO; -import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.convert.location.LocationConvert; -import com.win.module.wms.dal.dataobject.bom.BomDO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.location.LocationDO; import com.win.module.wms.dal.mysql.balance.BalanceMapper; import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper; import com.win.module.wms.dal.mysql.location.LocationMapper; import com.win.module.wms.service.rule.RuleService; import org.springframework.stereotype.Service; -import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; @@ -306,38 +304,99 @@ public class LocationServiceImpl implements LocationService { //{"WarehouseCode":"W1","AreaCode":"A1","LocationGroupCode":"LG1","LocationCode":"H01","EmptyLocationFirst":"FALSE","NotEmptyLocationFirst":"FALSE", // "EnableMixItem":"TRUE","EnableMixLot":"TRUE","EnableMixStatus":"TRUE"} @Override - public LocationDO inspectLocation(RuleRespVO ruleRespVO, String packingNumber, String itemCode, String batch) { + public LocationDO inspectLocation(RuleRespVO ruleRespVO, ItembasicDO itembasicDO) { JSONObject jsonObject = JSONUtil.parseObj(ruleRespVO.getConfiguration()); Object locationCode = jsonObject.get("LocationCode"); //设置了库位直接返回 if(locationCode != null) { return this.selectLocation(String.valueOf(locationCode)); } + //增加过滤条件 QueryWrapper queryWrapper = new QueryWrapper<>(); List locationTypeList = new ArrayList<>(); locationTypeList.add("RAW"); locationTypeList.add("SEMI"); locationTypeList.add("FG"); queryWrapper.in("`type`", locationTypeList); - Object warehouseCode = String.valueOf(jsonObject.get("WarehouseCode")); - if(!warehouseCode.equals("")) { + Object warehouseCode = jsonObject.get("WarehouseCode"); + if(!"".equals(warehouseCode)) { queryWrapper.eq("warehouse_code", warehouseCode); } Object areaCode = jsonObject.get("AreaCode"); - if(!areaCode.equals("")) { + if(!"".equals(areaCode)) { queryWrapper.eq("area_code", areaCode); } - Object locationGroupCode = String.valueOf(jsonObject.get("LocationGroupCode")); - if(!locationGroupCode.equals("")) { + Object locationGroupCode = jsonObject.get("LocationGroupCode"); + if(!"".equals(locationGroupCode)) { queryWrapper.eq("location_group_code", locationGroupCode); } - String emptyLocationFirst = String.valueOf(jsonObject.get("EmptyLocationFirst")); - if("TRUE".equals(emptyLocationFirst)) { - queryWrapper.notExists("SELECT id FROM transaction_balance WHERE packing_number=? AND item_code=? AND batch=? AND QTY > 0", packingNumber, itemCode,batch); + //排序 + Object aisleOrder = jsonObject.get("AisleOrder"); + if("DESC".equals(aisleOrder)) { + queryWrapper.orderByDesc("aisle"); + } else { + queryWrapper.orderByAsc("aisle"); + } + Object shelfOrder = jsonObject.get("ShelfOrder"); + if("DESC".equals(shelfOrder)) { + queryWrapper.orderByDesc("shelf"); } else { - queryWrapper.exists("SELECT id FROM transaction_balance WHERE packing_number=? AND item_code=? AND batch=?", packingNumber, itemCode,batch); + queryWrapper.orderByAsc("shelf"); } - queryWrapper.last("LIMIT 1"); - return locationMapper.selectOne(queryWrapper); + Object rowOrder = jsonObject.get("RowOrder"); + if("DESC".equals(rowOrder)) { + queryWrapper.orderByDesc("location_row"); + } else { + queryWrapper.orderByAsc("location_row"); + } + Object columOrder = jsonObject.get("ColumOrder"); + if("DESC".equals(columOrder)) { + queryWrapper.orderByDesc("location_colum"); + } else { + queryWrapper.orderByAsc("location_colum"); + } + List locationDOList = locationMapper.selectList(queryWrapper); + //查询符合条件的库位之后过滤 + //优先空库位 + Object emptyLocationFirst = jsonObject.get("EmptyLocationFirst"); + //优先非空库位 + Object notEmptyLocationFirst = jsonObject.get("NotEmptyLocationFirst"); + //可以混物品 + Object enableMixItem = jsonObject.get("EnableMixItem"); + //可以混批次 + Object enableMixLot = jsonObject.get("EnableMixLot"); + //可以混状态 + Object enableMixStatus = jsonObject.get("EnableMixStatus"); + if("TRUE".equals(emptyLocationFirst)) { + locationDOList = this.emptyLocationFirst(locationDOList, enableMixItem, enableMixLot, enableMixStatus); + } else if("TRUE".equals(notEmptyLocationFirst)) { + locationDOList = this.notEmptyLocationFirst(locationDOList, enableMixItem, enableMixLot, enableMixStatus); + } + return locationDOList.get(0); + } + + /** + * 优先空库位过滤 + * @param locationDOList 库位list + * @param enableMixItem 可以混物品 + * @param enableMixLot 可以混批次 + * @param enableMixStatus 可以混状态 + * @return 过滤之后的库位list + */ + private List emptyLocationFirst(List locationDOList, Object enableMixItem, Object enableMixLot, Object enableMixStatus) { + return locationDOList; } + + /** + * 优先非空库位过滤 + * @param locationDOList 库位list + * @param enableMixItem 可以混物品 + * @param enableMixLot 可以混批次 + * @param enableMixStatus 可以混状态 + * @return 过滤之后的库位list + */ + private List notEmptyLocationFirst(List locationDOList, Object enableMixItem, Object enableMixLot, Object enableMixStatus) { + return locationDOList; + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java index a5f3a674..36f44411 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java @@ -14,10 +14,8 @@ import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.enums.serialNumber.RuleCodeEnum; import com.win.module.wms.controller.expectin.vo.ExpectinCreateReqVO; import com.win.module.wms.controller.productionreturnRequest.vo.*; -import com.win.module.wms.controller.productionreturnRequest.vo.*; import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; -import com.win.module.wms.convert.productionreturnRequest.ProductionreturnRequestMainConvert; import com.win.module.wms.convert.productionreturnRequest.ProductionreturnRequestDetailConvert; import com.win.module.wms.convert.productionreturnRequest.ProductionreturnRequestMainConvert; import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; @@ -25,8 +23,6 @@ import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.itempackaging.ItempackagingDO; import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; import com.win.module.wms.dal.dataobject.location.LocationDO; -import com.win.module.wms.dal.dataobject.packageMassage.PackageDO; -import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO; import com.win.module.wms.dal.dataobject.productionreturnJob.ProductionreturnJobDetailDO; import com.win.module.wms.dal.dataobject.productionreturnJob.ProductionreturnJobMainDO; @@ -34,8 +30,6 @@ import com.win.module.wms.dal.dataobject.productionreturnRecord.Productionreturn import com.win.module.wms.dal.dataobject.productionreturnRecord.ProductionreturnRecordMainDO; import com.win.module.wms.dal.dataobject.productionreturnRequest.ProductionreturnRequestDetailDO; import com.win.module.wms.dal.dataobject.productionreturnRequest.ProductionreturnRequestMainDO; -import com.win.module.wms.dal.dataobject.productionreturnRequest.ProductionreturnRequestDetailDO; -import com.win.module.wms.dal.dataobject.productionreturnRequest.ProductionreturnRequestMainDO; import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; @@ -682,9 +676,10 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR productionreturnRecordDetailDO.setFromBatch(item.getBatch()); productionreturnRecordDetailDO.setToBatch(item.getBatch()); productionreturnRecordDetailDO.setFromLocationCode(item.getFromLocationCode()); + ItembasicDO itembasicDO = itembasicService.selectItembasic(productionreturnRecordDetailDO.getItemCode()); // 获取上架策略 并赋值 to库位 - RuleRespVO ruleRespVO = ruleService.grounding(null,null,null,null,null,null,productionreturnRecordDetailDO.getItemCode(),null,null,null,null,null,null); - LocationDO locationDO = locationService.inspectLocation(ruleRespVO,null,productionreturnRecordDetailDO.getItemCode(),null); + RuleRespVO ruleRespVO = ruleService.grounding(null,null,itembasicDO.getAbcClass(),itembasicDO.getType(),itembasicDO.getItemGroup(),itembasicDO.getProject(), itembasicDO.getCode(),null,null,null,null,null,null); + LocationDO locationDO = locationService.inspectLocation(ruleRespVO,itembasicDO); productionreturnRecordDetailDO.setToLocationCode(locationDO.getCode()); // 获取库位信息 并赋值 LocationDO locationDOFrom = locationService.selectLocation(item.getFromLocationCode()); @@ -791,6 +786,7 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR List expectinCreateReqVOList = new ArrayList<>(); detailDO.forEach(item -> { ProductionreturnJobDetailDO productionreturnJobDetailDO = new ProductionreturnJobDetailDO(); + ItembasicDO itembasicDO = itembasicService.selectItembasic(item.getItemCode()); BeanUtils.copyProperties(item, productionreturnJobDetailDO); productionreturnJobDetailDO.setId(null); productionreturnJobDetailDO.setCreateTime(null); @@ -800,8 +796,8 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR productionreturnJobDetailDO.setMasterId(productionreturnJobMainDO.getId()); productionreturnJobDetailDO.setNumber(number); // 获取上架策略 并赋值 to库位 - RuleRespVO ruleRespVO = ruleService.grounding(null,null,null,null,null,null,productionreturnJobDetailDO.getItemCode(),null,null,null,null,null,null); - LocationDO locationDO = locationService.inspectLocation(ruleRespVO,null,productionreturnJobDetailDO.getItemCode(),null); + RuleRespVO ruleRespVO = ruleService.grounding(null,null, itembasicDO.getAbcClass(), itembasicDO.getType(), itembasicDO.getItemGroup(), itembasicDO.getProject(), productionreturnJobDetailDO.getItemCode(),null,null,null,null,null,null); + LocationDO locationDO = locationService.inspectLocation(ruleRespVO, itembasicDO); productionreturnJobDetailDO.setToLocationCode(locationDO.getCode()); // 判断合格 不合格 if (!mainDO.getBusinessType().equals("ReturnToStore")) { diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/putawayRequest/PutawayRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/putawayRequest/PutawayRequestMainServiceImpl.java index 98966bcb..50a389c2 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/putawayRequest/PutawayRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/putawayRequest/PutawayRequestMainServiceImpl.java @@ -363,9 +363,11 @@ public class PutawayRequestMainServiceImpl implements PutawayRequestMainService List putawayJobDetailDOList = new ArrayList<>(); for(PutawayRequestDetailDO putawayRequestDetailDO : detailDOList) { PutawayJobDetailDO putawayJobDetailDO = PutawayJobDetailConvert.INSTANCE.convert(putawayRequestDetailDO); - RuleRespVO ruleRespVO = ruleService.grounding(null, null, null, null, null, null, + ItembasicDO itembasicDO = itembasicService.selectItembasic(putawayRequestDetailDO.getItemCode()); + RuleRespVO groundingRuleRespVO = ruleService.grounding(putawayJobMainDO.getSupplierCode(), null, itembasicDO.getAbcClass(), itembasicDO.getType(), itembasicDO.getItemGroup(), itembasicDO.getProject(), putawayJobDetailDO.getItemCode(), putawayJobDetailDO.getInventoryStatus(), null, null, null, null, null); - LocationDO locationDO = locationService.inspectLocation(ruleRespVO, putawayJobDetailDO.getPackingNumber(), putawayJobDetailDO.getItemCode(), putawayJobDetailDO.getItemCode()); + + LocationDO locationDO = locationService.inspectLocation(groundingRuleRespVO, itembasicDO); putawayJobDetailDO.setToLocationCode(locationDO.getCode()); putawayJobDetailDO.setNumber(number); putawayJobDetailDO.setMasterId(putawayJobDetailDO.getId());