diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java index 016a476f..84549d02 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java @@ -954,6 +954,7 @@ public interface ErrorCodeConstants { //盘点调整申请ErrorCode ErrorCode COUNTADJUST_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_156_000, "盘点调整申请主不存在"); ErrorCode COUNTADJUST_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_000_156_001, "盘点调整申请子不存在"); + ErrorCode COUNTADJUST_REQUEST_EXISTS = new ErrorCode(1_000_156_001, "不能重复生成盘点调整"); ErrorCode COUNTADJUST_REQUEST_RECORD_EXISTS = new ErrorCode(1_000_078_003, "盘点调整申请存在盘点调整记录单"); ErrorCode COUNTADJUST_REQUEST_CANNOT_CLOSE = new ErrorCode(1_000_078_004, "盘点调整申请状态不支持关闭"); ErrorCode COUNTADJUST_REQUEST_CANNOT_SUBMIT = new ErrorCode(1_000_078_005, "盘点调整申请状态不支持提交"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRecord/CountRecordMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRecord/CountRecordMainController.java index a98ab6f9..54860d34 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRecord/CountRecordMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRecord/CountRecordMainController.java @@ -19,6 +19,7 @@ import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.countRecord.CountRecordDetailService; import com.win.module.wms.service.countRecord.CountRecordMainService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -119,4 +120,13 @@ public class CountRecordMainController { return resultList; } + @PutMapping("/generate") + @Operation(summary = "生成盘点调整") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:count-record-main:generate')") + public CommonResult handleCountRequestMain(@RequestParam("id") Long id) { + int count = countRecordMainService.generateCountadjustRequest(id); + return success(count > 0); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailBaseVO.java index 7cbb5d6d..dc4b480b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailBaseVO.java @@ -1,13 +1,11 @@ package com.win.module.wms.controller.countRequest.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + import java.math.BigDecimal; import java.time.LocalDateTime; -import javax.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailCreateReqVO.java index 8dab709d..b60cbcf0 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestDetailCreateReqVO.java @@ -1,12 +1,31 @@ package com.win.module.wms.controller.countRequest.vo; -import lombok.*; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; @Schema(description = "管理后台 - 盘点申请子创建 Request VO") @Data -@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class CountRequestDetailCreateReqVO extends CountRequestDetailBaseVO { + @Override + public boolean equals(Object anObject) { + if (this == anObject) { //判断一下如果是同一个对象直接返回true,提高效率 + return true; + } + if (anObject == null || anObject.getClass() != this.getClass()) { //如果传进来的对象为null或者二者为不同类,直接返回false + return false; + } + CountRequestDetailCreateReqVO obj = (CountRequestDetailCreateReqVO) anObject; + return this.getPackingNumber().equals(obj.getPackingNumber()) && this.getItemCode().equals(obj.getItemCode()) + && this.getBatch().equals(obj.getBatch()) && this.getInventoryStatus().equals(obj.getInventoryStatus()) + && this.getLocationCode().equals(obj.getLocationCode()); + } + + @Override + public int hashCode() { + return (this.getPackingNumber() + this.getItemCode() + this.getBatch() + this.getInventoryStatus() + this.getLocationCode()).hashCode(); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countadjustRequest/CountadjustRequestMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countadjustRequest/CountadjustRequestMainController.java index 2b351b13..e6fc72eb 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countadjustRequest/CountadjustRequestMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countadjustRequest/CountadjustRequestMainController.java @@ -20,6 +20,7 @@ import com.win.module.wms.enums.request.RequestStatusEnum; import com.win.module.wms.service.countadjustRequest.CountadjustRequestDetailService; import com.win.module.wms.service.countadjustRequest.CountadjustRequestMainService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -118,4 +119,49 @@ public class CountadjustRequestMainController { return resultList; } + @PutMapping("/close") + @Operation(summary = "关闭盘点调整申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:countadjust-request-main:close')") + public CommonResult closeCountadjustRequestMain(@RequestParam("id") Long id) { + Integer count = countadjustRequestMainService.closeCountadjustRequestMain(id); + return success(count > 0); + } + + @PutMapping("/submit") + @Operation(summary = "提交盘点调整申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:countadjust-request-main:submit')") + public CommonResult submitCountadjustRequestMain(@RequestParam("id") Long id) { + Integer count = countadjustRequestMainService.submitCountadjustRequestMain(id); + return success(count > 0); + } + + @PutMapping("/agree") + @Operation(summary = "审批通过盘点调整申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:countadjust-request-main:agree')") + public CommonResult agreeCountadjustRequestMain(@RequestParam("id") Long id) { + Integer count = countadjustRequestMainService.agreeCountadjustRequestMain(id); + return success(count > 0); + } + + @PutMapping("/handle") + @Operation(summary = "执行盘点调整申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:countadjust-request-main:handle')") + public CommonResult handleCountadjustRequestMain(@RequestParam("id") Long id) { + Integer count = countadjustRequestMainService.handleCountadjustRequestMain(id); + return success(count > 0); + } + + @PutMapping("/abort") + @Operation(summary = "审批拒绝盘点调整申请主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:count-request-main:abort')") + public CommonResult abortCountadjustRequestMain(@RequestParam("id") Long id) { + Integer count = countadjustRequestMainService.abortCountadjustRequestMain(id); + return success(count > 0); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java index f73d2063..d29bdc3e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java @@ -94,6 +94,29 @@ public interface BalanceMapper extends BaseMapperX { return selectOne(queryWrapper); } + /** + * 更新库存余额数量,出库qty是负数 + */ + default List getBalanceList(String packingNumber, String itemCode, String batch, String inventoryStatus, String locationCode) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if(packingNumber != null && !packingNumber.isEmpty()) { + queryWrapper.eq("packing_number", packingNumber); + } + if(itemCode != null && !itemCode.isEmpty()) { + queryWrapper.eq("item_code", itemCode); + } + if(batch != null && !batch.isEmpty()) { + queryWrapper.eq("batch", batch); + } + if(inventoryStatus != null && !inventoryStatus.isEmpty()) { + queryWrapper.eq("inventory_status", inventoryStatus); + } + if(locationCode != null && !locationCode.isEmpty()) { + queryWrapper.eq("location_code", locationCode); + } + return selectList(queryWrapper); + } + default PageResult selectPage(BalancePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(BalanceDO::getPackingNumber, reqVO.getPackingNumber()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/countadjustRequest/CountadjustRequestMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/countadjustRequest/CountadjustRequestMainMapper.java index a98bc598..b89a0041 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/countadjustRequest/CountadjustRequestMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/countadjustRequest/CountadjustRequestMainMapper.java @@ -74,4 +74,8 @@ public interface CountadjustRequestMainMapper extends BaseMapperX selectPage(PurchasereturnJobMainPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .inIfPresent(PurchasereturnJobMainDO::getStatus, reqVO.getTypes()) .eqIfPresent(PurchasereturnJobMainDO::getRequestNumber, reqVO.getRequestNumber()) .eqIfPresent(PurchasereturnJobMainDO::getPurchaseReceiptRecordNumber, reqVO.getPurchaseReceiptRecordNumber()) .eqIfPresent(PurchasereturnJobMainDO::getAsnNumber, reqVO.getAsnNumber()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countJob/CountJobMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countJob/CountJobMainServiceImpl.java index d6a83e5e..c4d7f064 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countJob/CountJobMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countJob/CountJobMainServiceImpl.java @@ -18,14 +18,10 @@ import com.win.module.wms.dal.dataobject.countJob.CountJobMainDO; import com.win.module.wms.dal.dataobject.countRecord.CountRecordDetailDO; import com.win.module.wms.dal.dataobject.countRecord.CountRecordMainDO; import com.win.module.wms.dal.dataobject.countRequest.CountRequestMainDO; -import com.win.module.wms.dal.dataobject.countadjustRequest.CountadjustRequestDetailDO; -import com.win.module.wms.dal.dataobject.countadjustRequest.CountadjustRequestMainDO; import com.win.module.wms.dal.mysql.countJob.CountJobMainMapper; import com.win.module.wms.dal.mysql.countRecord.CountRecordDetailMapper; import com.win.module.wms.dal.mysql.countRecord.CountRecordMainMapper; import com.win.module.wms.dal.mysql.countRequest.CountRequestMainMapper; -import com.win.module.wms.dal.mysql.countadjustRequest.CountadjustRequestDetailMapper; -import com.win.module.wms.dal.mysql.countadjustRequest.CountadjustRequestMainMapper; import com.win.module.wms.enums.job.JobStatusEnum; import com.win.module.wms.enums.job.JobStatusState; import com.win.module.wms.enums.request.RequestStatusEnum; @@ -64,10 +60,6 @@ public class CountJobMainServiceImpl implements CountJobMainService { private SerialNumberApi serialNumberApi; @Resource private CountRequestMainMapper countRequestMainMapper; - @Resource - private CountadjustRequestMainMapper countadjustRequestMainMapper; - @Resource - private CountadjustRequestDetailMapper countadjustRequestDetailMapper; @Override public CountJobMainDO getCountJobMain(Long id) { @@ -178,9 +170,7 @@ public class CountJobMainServiceImpl implements CountJobMainService { countRecordMainDO.setUpdateTime(null); countRecordMainMapper.insert(countRecordMainDO); List countJobDetailUpdateReqVOList = countJobMainUpdateReqVO.getSubList(); - List countadjustRequestDetailDOList = new ArrayList<>(); List countRecordDetailDOList = new ArrayList<>(); - int countDetailNumber = 1; for(CountJobDetailUpdateReqVO countJobDetailUpdateReqVO : countJobDetailUpdateReqVOList) { CountRecordDetailDO countRecordDetailDO = new CountRecordDetailDO(); BeanUtils.copyProperties(countJobDetailUpdateReqVO, countRecordDetailDO); @@ -193,47 +183,8 @@ public class CountJobMainServiceImpl implements CountJobMainService { countRecordDetailDO.setUpdater(null); countRecordDetailDO.setUpdateTime(null); countRecordDetailDOList.add(countRecordDetailDO); - //盘点记录数量不一致时生成盘点调整申请 - if(countRecordDetailDO.getCountQty().compareTo(countRecordDetailDO.getQty()) != 0) { - CountadjustRequestDetailDO countadjustRequestDetailDO = new CountadjustRequestDetailDO(); - BeanUtils.copyProperties(countRecordDetailDO, countadjustRequestDetailDO); - countadjustRequestDetailDO.setCountDetailNumber(String.valueOf(countDetailNumber)); - countadjustRequestDetailDO.setInventoryQty(countRecordDetailDO.getQty()); - countadjustRequestDetailDO.setCountQty(countRecordDetailDO.getCountQty()); - //库存数量减盘点数量等于调整数量 - countadjustRequestDetailDO.setAdjustQty(countRecordDetailDO.getQty().subtract(countRecordDetailDO.getCountQty())); - //调整数量的绝对值 - countadjustRequestDetailDO.setQty(countadjustRequestDetailDO.getAdjustQty().abs()); - countadjustRequestDetailDO.setId(null); - countadjustRequestDetailDO.setCreator(null); - countadjustRequestDetailDO.setCreateTime(null); - countadjustRequestDetailDO.setUpdater(null); - countadjustRequestDetailDO.setUpdateTime(null); - countadjustRequestDetailDOList.add(countadjustRequestDetailDO); - countDetailNumber++; - } } countRecordDetailMapper.insertBatch(countRecordDetailDOList); - //增加库存跳转 - if(!countadjustRequestDetailDOList.isEmpty()) { - CountadjustRequestMainDO countadjustRequestMainDO = new CountadjustRequestMainDO(); - BeanUtils.copyProperties(countRecordMainDO, countadjustRequestMainDO); - String adjustNumber = serialNumberApi.generateCode(RuleCodeEnum.COUNT_ADJUST_REQUEST.getCode()); - countadjustRequestMainDO.setNumber(adjustNumber); - countadjustRequestMainDO.setCountRecordNumber(number); - countadjustRequestMainDO.setStatus(RequestStatusEnum.NEW.getCode()); - countadjustRequestMainDO.setId(null); - countadjustRequestMainDO.setCreator(null); - countadjustRequestMainDO.setCreateTime(null); - countadjustRequestMainDO.setUpdater(null); - countadjustRequestMainDO.setUpdateTime(null); - countadjustRequestMainMapper.insert(countadjustRequestMainDO); - for(CountadjustRequestDetailDO countadjustRequestDetailDO : countadjustRequestDetailDOList) { - countadjustRequestDetailDO.setMasterId(countadjustRequestMainDO.getId()); - countadjustRequestDetailDO.setNumber(adjustNumber); - } - countadjustRequestDetailMapper.insertBatch(countadjustRequestDetailDOList); - } List typeList = new ArrayList<>(); typeList.add(JobStatusEnum.PENDING.getCode()); typeList.add(JobStatusEnum.PROCESSING.getCode()); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java index 5ea80823..c30b210f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java @@ -41,9 +41,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.win.module.wms.enums.ErrorCodeConstants.*; @@ -298,42 +296,58 @@ public class CountPlanMainServiceImpl implements CountPlanMainService { countRequestMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); countRequestMainCreateReqVO.setRequestTime(LocalDateTime.now()); countRequestMainCreateReqVO.setDueTime(LocalDateTime.now()); - List subList = new ArrayList<>(); - int countDetailNumber = 1; + List countBanlanceDOList = new ArrayList<>(); for (BalanceDO balanceDO : balanceDOList) { + if(balanceDO.getQty().compareTo(BigDecimal.ZERO) == 0) { + if ("TRUE".equals(mainDO.getIsCountZeroInventory())) {//盘点零库存 + countBanlanceDOList.add(balanceDO); + } + } else if (balanceDO.getQty().compareTo(BigDecimal.ZERO) < 0) { + if ("TRUE".equals(mainDO.getIsCountNegativeInventory())) {//盘点负库存 + countBanlanceDOList.add(balanceDO); + } + } else { + countBanlanceDOList.add(balanceDO); + } + //维度,按照库存扩大范围,比如维度是库位时,盘点库位上某一个物品,那要扩大到这个物品所在库位的所有物品,BY_INVENTORY,按库存 BY_ITEM,按物品 BY_BATCH,按批次 BY_LOCATION,按库位 + switch (mainDO.getDimension()) { + case "BY_ITEM": { + List balanceDOListDimension = balanceMapper.getBalanceList(null, balanceDO.getItemCode(), null, null, null); + countBanlanceDOList.addAll(balanceDOListDimension); + break; + } + case "BY_BATCH": { + List balanceDOListDimension = balanceMapper.getBalanceList(null, null, balanceDO.getBatch(), null, null); + countBanlanceDOList.addAll(balanceDOListDimension); + break; + } + case "BY_LOCATION": { + List balanceDOListDimension = balanceMapper.getBalanceList(null, null, null, null, balanceDO.getLocationCode()); + countBanlanceDOList.addAll(balanceDOListDimension); + break; + } + } + } + //利用set去重 + Set subSet = new HashSet<>(); + for(BalanceDO balanceDO : countBanlanceDOList) { //忽略物品或者忽略库位直接continue if(mainDO.getIgnoreListOfItem().contains(balanceDO.getItemCode()) || mainDO.getIgnoreListOfLocation().contains(balanceDO.getLocationCode())) { continue; } - //维度,按照库存扩大范围,比如维度是库位时,盘点库位上某一个物品,那要扩大到这个物品所在库位的所有物品,BY_INVENTORY,按库存 BY_ITEM,按物品 BY_BATCH,按批次 BY_LOCATION,按库位 - //if(mainDO.getDimension().equals("BY_INVENTORY")) { - - //} CountRequestDetailCreateReqVO countRequestDetailCreateReqVO = new CountRequestDetailCreateReqVO(); BeanUtils.copyProperties(balanceDO, countRequestDetailCreateReqVO); ItembasicDO itembasicDO = itembasicService.selectItembasic(balanceDO.getItemCode()); countRequestDetailCreateReqVO.setItemName(itembasicDO.getName()); countRequestDetailCreateReqVO.setItemDesc1(itembasicDO.getDesc1()); countRequestDetailCreateReqVO.setItemDesc2(itembasicDO.getDesc2()); + subSet.add(countRequestDetailCreateReqVO); + } + List subList = new ArrayList<>(); + int countDetailNumber = 1; + for(CountRequestDetailCreateReqVO countRequestDetailCreateReqVO : subSet) { countRequestDetailCreateReqVO.setCountDetailNumber(String.valueOf(countDetailNumber)); - int listSize1 = subList.size(); - if(countRequestDetailCreateReqVO.getQty().compareTo(BigDecimal.ZERO) == 0) { - if ("TRUE".equals(mainDO.getIsCountZeroInventory())) {//盘点零库存 - subList.add(countRequestDetailCreateReqVO); - } - } else if (countRequestDetailCreateReqVO.getQty().compareTo(BigDecimal.ZERO) < 0) { - if ("TRUE".equals(mainDO.getIsCountNegativeInventory())) {//盘点负库存 - subList.add(countRequestDetailCreateReqVO); - } - } else { - subList.add(countRequestDetailCreateReqVO); - } - //增加了数据并且冻结盘点时,冻结库存余额 - if(subList.size() > listSize1 && "TRUE".equals(mainDO.getIsFreeze())) { - balanceDO.setFrozen("TRUE"); - balanceDO.setFrozenReason("冻结盘点"); - balanceMapper.updateById(balanceDO); - } + subList.add(countRequestDetailCreateReqVO); countDetailNumber++; } //盘点空库位,补齐空库位,在生成任务时拆分为只有主的盘点任务 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainService.java index ed203a03..a398145b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainService.java @@ -46,4 +46,10 @@ public interface CountRecordMainService { */ List getCountRecordMainList(CustomConditions conditions); + /** + * 根据盘点记录生成库存调整申请 + * @param countRecordMainId + * @return + */ + int generateCountadjustRequest(Long countRecordMainId); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainServiceImpl.java index 36ef4d47..160cd5c9 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRecord/CountRecordMainServiceImpl.java @@ -1,17 +1,33 @@ package com.win.module.wms.service.countRecord; +import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.api.trends.TrendsApi; +import com.win.module.infra.enums.TrendsTypeEnum; +import com.win.module.system.api.serialnumber.SerialNumberApi; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; import com.win.module.wms.controller.countRecord.vo.CountRecordMainExportReqVO; import com.win.module.wms.controller.countRecord.vo.CountRecordMainPageReqVO; +import com.win.module.wms.dal.dataobject.countRecord.CountRecordDetailDO; import com.win.module.wms.dal.dataobject.countRecord.CountRecordMainDO; +import com.win.module.wms.dal.dataobject.countadjustRequest.CountadjustRequestDetailDO; +import com.win.module.wms.dal.dataobject.countadjustRequest.CountadjustRequestMainDO; +import com.win.module.wms.dal.mysql.countRecord.CountRecordDetailMapper; import com.win.module.wms.dal.mysql.countRecord.CountRecordMainMapper; +import com.win.module.wms.dal.mysql.countadjustRequest.CountadjustRequestDetailMapper; +import com.win.module.wms.dal.mysql.countadjustRequest.CountadjustRequestMainMapper; +import com.win.module.wms.enums.request.RequestStatusEnum; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; +import static com.win.module.wms.enums.ErrorCodeConstants.COUNTADJUST_REQUEST_EXISTS; + /** * 盘点记录主 Service 实现类 * @@ -23,6 +39,16 @@ public class CountRecordMainServiceImpl implements CountRecordMainService { @Resource private CountRecordMainMapper countRecordMainMapper; + @Resource + private CountRecordDetailMapper countRecordDetailMapper; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private CountadjustRequestMainMapper countadjustRequestMainMapper; + @Resource + private CountadjustRequestDetailMapper countadjustRequestDetailMapper; + @Resource + private TrendsApi trendsApi; @Override public PageResult getCountRecordMainPage(CountRecordMainPageReqVO pageReqVO) { @@ -42,4 +68,60 @@ public class CountRecordMainServiceImpl implements CountRecordMainService { return countRecordMainMapper.selectList(conditions); } + @Override + public int generateCountadjustRequest(Long countRecordMainId) { + CountRecordMainDO countRecordMainDO = countRecordMainMapper.selectById(countRecordMainId); + CountadjustRequestMainDO countadjustRequestMainDOExists = countadjustRequestMainMapper.selectByCountRecordNumber(countRecordMainDO.getNumber()); + if(countadjustRequestMainDOExists != null) { + throw new ServiceException(COUNTADJUST_REQUEST_EXISTS); + } + List countRecordDetailDOList = countRecordDetailMapper.selectList(countRecordMainId); + List countadjustRequestDetailDOList = new ArrayList<>(); + int countDetailNumber = 1; + for(CountRecordDetailDO countRecordDetailDO : countRecordDetailDOList) { + //盘点记录数量不一致时生成盘点调整申请 + if(countRecordDetailDO.getCountQty().compareTo(countRecordDetailDO.getQty()) != 0) { + CountadjustRequestDetailDO countadjustRequestDetailDO = new CountadjustRequestDetailDO(); + BeanUtils.copyProperties(countRecordDetailDO, countadjustRequestDetailDO); + countadjustRequestDetailDO.setCountDetailNumber(String.valueOf(countDetailNumber)); + countadjustRequestDetailDO.setInventoryQty(countRecordDetailDO.getQty()); + countadjustRequestDetailDO.setCountQty(countRecordDetailDO.getCountQty()); + //库存数量减盘点数量等于调整数量 + countadjustRequestDetailDO.setAdjustQty(countRecordDetailDO.getQty().subtract(countRecordDetailDO.getCountQty())); + //调整数量的绝对值 + countadjustRequestDetailDO.setQty(countadjustRequestDetailDO.getAdjustQty().abs()); + countadjustRequestDetailDO.setId(null); + countadjustRequestDetailDO.setCreator(null); + countadjustRequestDetailDO.setCreateTime(null); + countadjustRequestDetailDO.setUpdater(null); + countadjustRequestDetailDO.setUpdateTime(null); + countadjustRequestDetailDOList.add(countadjustRequestDetailDO); + countDetailNumber++; + } + } + int result = 0; + //增加库存调整 + if(!countadjustRequestDetailDOList.isEmpty()) { + CountadjustRequestMainDO countadjustRequestMainDO = new CountadjustRequestMainDO(); + BeanUtils.copyProperties(countRecordMainDO, countadjustRequestMainDO); + String adjustNumber = serialNumberApi.generateCode(RuleCodeEnum.COUNT_ADJUST_REQUEST.getCode()); + countadjustRequestMainDO.setNumber(adjustNumber); + countadjustRequestMainDO.setCountRecordNumber(countRecordMainDO.getNumber()); + countadjustRequestMainDO.setStatus(RequestStatusEnum.NEW.getCode()); + countadjustRequestMainDO.setId(null); + countadjustRequestMainDO.setCreator(null); + countadjustRequestMainDO.setCreateTime(null); + countadjustRequestMainDO.setUpdater(null); + countadjustRequestMainDO.setUpdateTime(null); + result = countadjustRequestMainMapper.insert(countadjustRequestMainDO); + for(CountadjustRequestDetailDO countadjustRequestDetailDO : countadjustRequestDetailDOList) { + countadjustRequestDetailDO.setMasterId(countadjustRequestMainDO.getId()); + countadjustRequestDetailDO.setNumber(adjustNumber); + } + countadjustRequestDetailMapper.insertBatch(countadjustRequestDetailDOList); + trendsApi.createTrends(countadjustRequestMainDO.getId(), "countadjustRequest", "生成了盘点调整申请", TrendsTypeEnum.CREATE); + } + return result; + } + }