From 049b9126ca61686a5858f6670cede42a7602ad46 Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Thu, 21 Dec 2023 14:35:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E4=B8=8A=E6=9E=B6=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=BA=93=E4=BD=8D=E6=8E=A5=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../location/LocationController.java | 10 +++- .../location/vo/LocationValidateVO.java | 27 +++++++++ .../wms/service/location/LocationService.java | 8 +++ .../service/location/LocationServiceImpl.java | 56 +++++++++++++++++++ .../module/wms/service/rule/RuleService.java | 10 ++++ .../wms/service/rule/RuleServiceImpl.java | 36 ++++++++++-- 6 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationValidateVO.java diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java index 119707b5..63e57153 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java @@ -120,7 +120,7 @@ public class LocationController { @PostMapping("/senior") @Operation(summary = "高级搜索获得账期日历分页") - @PreAuthorize("@ss.hasPermission('wms:accountcalendar:query')") + @PreAuthorize("@ss.hasPermission('wms:location:query')") public CommonResult> getLocationSenior(@Valid @RequestBody CustomConditions conditions) { PageResult pageResult = locationService.getLocationSenior(conditions); PageResult result = LocationConvert.INSTANCE.convertPage(pageResult); @@ -212,10 +212,18 @@ public class LocationController { @PermitAll @GetMapping("/inspectLocation") @Operation(summary = "推荐库位(测试用)") + @PreAuthorize("@ss.hasPermission('wms:location:inspectLocation')") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult inspectLocation(@RequestParam("supplierCode") String supplierCode,@RequestParam("itemCode") String itemCode, @RequestParam("batch") String batch, @RequestParam("batch") String inventoryStatus) { RuleRespVO ruleRespVO = ruleService.grounding(supplierCode, null, itemCode, inventoryStatus, null, null, null, null, null); return success(locationService.inspectLocation(ruleRespVO, itemCode, batch, inventoryStatus)); } + @PostMapping("/validate") + @Operation(summary = "校验库位和物品是否能上架") + @PreAuthorize("@ss.hasPermission('wms:location:validate')") + public CommonResult>> validate(@Valid @RequestBody List locationValidateVOList) { + return success(locationService.validateLocationAndItem(locationValidateVOList)); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationValidateVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationValidateVO.java new file mode 100644 index 00000000..9c3e16ff --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationValidateVO.java @@ -0,0 +1,27 @@ +package com.win.module.wms.controller.location.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Schema(description = "APP直接上架校验库位和item") +@Data +public class LocationValidateVO { + + @Schema(description = "物品代码") + @NotBlank(message = "物品代码不能为空") + private String itemCode; + + @Schema(description = "库位代码") + @NotBlank(message = "库位代码不能为空") + private String locationCode; + + @Schema(description = "批次") + @NotBlank(message = "批次不能为空") + private String batch; + + @Schema(description = "库存状态") + @NotBlank(message = "库存状态不能为空") + private String inventoryStatus; +} 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 b05dc158..ab710017 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 @@ -8,6 +8,7 @@ import com.win.module.wms.dal.dataobject.location.LocationDO; import javax.validation.Valid; import java.util.List; +import java.util.Map; /** * 库位 Service 接口 @@ -116,4 +117,11 @@ public interface LocationService { * @return 线边安全库存 */ List getSafeLocationList(); + + /** + * pda直接上架判断库位和item + * @param locationValidateVOList 库位和item + * @return 校验结果 + */ + List> validateLocationAndItem(List locationValidateVOList); } 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 f0440da6..99e4ddb2 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 @@ -24,7 +24,9 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.win.module.wms.enums.ErrorCodeConstants.*; @@ -408,6 +410,60 @@ public class LocationServiceImpl implements LocationService { return LocationConvert.INSTANCE.convertList(locationDOList); } + @Override + public List> validateLocationAndItem(List locationValidateVOList) { + List> result = new ArrayList<>(); + for(LocationValidateVO locationValidateVO : locationValidateVOList) { + LocationDO locationDO = locationMapper.selectByCode(locationValidateVO.getLocationCode()); + List ruleRespVOList = ruleService.getGroundingList(locationValidateVO.getItemCode(), locationValidateVO.getInventoryStatus()); + boolean validateResult = false; + String msg = ""; + for(RuleRespVO ruleRespVO : ruleRespVOList) { + JSONObject jsonObject = JSONUtil.parseObj(ruleRespVO.getConfiguration()); + String enableMixItem = jsonObject.getStr("EnableMixItem"); + String enableMixLot = jsonObject.getStr("EnableMixLot"); + String enableMixStatus = jsonObject.getStr("EnableMixStatus"); + List balanceDOList = balanceMapper.getBalanceList(null, null, null, null, locationDO.getCode()); + //库位上存在物品,判断可以混物品、可以混批次、可以混状态 + boolean flag1 = false; + for (BalanceDO balanceDO : balanceDOList) { + boolean flag2 = true; + if ("TRUE".equals(enableMixItem) && !locationValidateVO.getItemCode().equals(balanceDO.getItemCode())) { + break; + } + if ("TRUE".equals(enableMixLot) && !locationValidateVO.getBatch().equals(balanceDO.getBatch())) { + flag2 = false; + if(!msg.contains("不能混批次;")) { + msg = msg + "不能混批次;"; + } + } + if ("TRUE".equals(enableMixStatus) && !locationValidateVO.getInventoryStatus().equals(balanceDO.getInventoryStatus())) { + flag2 = false; + if(!msg.contains("不能混状态;")) { + msg = msg + "不能混状态;"; + } + } + if(flag2) { + flag1 = true; + } + } + if(flag1) { + validateResult = true; + msg = ""; + break; + } + } + Map map = new HashMap<>(); + map.put("itemCode", locationValidateVO.getItemCode()); + map.put("batch", locationValidateVO.getBatch()); + map.put("inventoryStatus", locationValidateVO.getInventoryStatus()); + map.put("result", validateResult); + map.put("msg", msg); + result.add(map); + } + return result; + } + /** * 判断优先空库位和非空库位 * diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java index 93ae05ac..2c036b57 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java @@ -217,4 +217,14 @@ public interface RuleService { * @return */ List> getPrecisionStrategy(List reqVO2List); + + /** + * 获取上架列表 + * + * @param itemCode 物品代码 + * @param inventoryStatus 库存状态 + * @return + */ + List getGroundingList(String itemCode, String inventoryStatus); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java index 0273f42f..26a794aa 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java @@ -504,8 +504,8 @@ public class RuleServiceImpl implements RuleService { List> list = new ArrayList<>(); for (String code : reqVO.getItemCodes()) { HashMap map = new HashMap<>(); - RuleRespVO RespVO = management(null, null, code, reqVO.getLocationCode(), null, null); - JSONObject entries = JSONUtil.parseObj(RespVO.getConfiguration()); + RuleRespVO respVO = management(null, null, code, reqVO.getLocationCode(), null, null); + JSONObject entries = JSONUtil.parseObj(respVO.getConfiguration()); map.put("ManagementPrecision", entries.get("ManagementPrecision")); map.put("itemCode", code); list.add(map); @@ -518,8 +518,8 @@ public class RuleServiceImpl implements RuleService { List> list = new ArrayList<>(); for (PrecisionStrategyReqVO2 reqVO2 : reqVO2List) { HashMap map = new HashMap<>(); - RuleRespVO RespVO = management(null, null, reqVO2.getItemCode(), reqVO2.getLocationCode(), null, null); - JSONObject entries = JSONUtil.parseObj(RespVO.getConfiguration()); + RuleRespVO respVO = management(null, null, reqVO2.getItemCode(), reqVO2.getLocationCode(), null, null); + JSONObject entries = JSONUtil.parseObj(respVO.getConfiguration()); map.put("ManagementPrecision", entries.get("ManagementPrecision")); map.put("itemCode", reqVO2.getItemCode()); map.put("locationCode", reqVO2.getLocationCode()); @@ -528,6 +528,34 @@ public class RuleServiceImpl implements RuleService { return list; } + @Override + public List getGroundingList(String itemCode, String inventoryStatus) { + List ruleRespVOList = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("strategy_code", "S005"); + queryWrapper.orderByDesc("priority"); + List ruleDOList = ruleMapper.selectList(queryWrapper); + for (RuleDO ruleDO : ruleDOList) { + String condition = ruleDO.getCondition(); + if (condition == null || condition.isEmpty()) { + ruleRespVOList.add(RuleConvert.INSTANCE.convert(ruleDO)); + } else { + JSONArray conditionArray = JSONUtil.parseArray(condition); + Map params = new HashMap<>(); + if (itemCode != null && !itemCode.isEmpty()) { + params.put("ItemCode", itemCode); + } + if (inventoryStatus != null && !inventoryStatus.isEmpty()) { + params.put("InventoryStatus", inventoryStatus); + } + if (this.forEachParams(params, conditionArray)) { + ruleRespVOList.add(RuleConvert.INSTANCE.convert(ruleDO)); + } + } + } + return ruleRespVOList; + } + /** * 循环校验参数 *