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 3ec22bbf..1a649a3a 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 @@ -1101,6 +1101,8 @@ public interface ErrorCodeConstants { // 翻包记录子 ErrorCode PACKAGEOVER_DETAIL_NOT_EXISTS = new ErrorCode(1_000_170_002, "翻包记录子不存在"); + ErrorCode PACKAGEOVER_DETAIL_PACKING_ERROR = new ErrorCode(1_000_170_002, "请先配置【基础包装信息】【替代包装数1】"); + // 拆包记录主 ErrorCode PACKAGESPLIT_MAIN_NOT_EXISTS = new ErrorCode(1_000_171_001, "拆包记录主不存在"); // 拆包记录子 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/PackagemergeMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/PackagemergeMainController.java index 5b8b4881..53afbdcc 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/PackagemergeMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/PackagemergeMainController.java @@ -52,7 +52,7 @@ public class PackagemergeMainController { @PostMapping("/create") @Operation(summary = "创建合包记录主") @PreAuthorize("@ss.hasPermission('wms:packagemerge-main:create')") - public CommonResult createPackagemergeMain(@Valid @RequestBody PackagemergeMainCreateReqVO createReqVO) { + public CommonResult createPackagemergeMain(@Valid @RequestBody PackagemergeMainCreateReqVO createReqVO) { return success(packagemergeMainService.createPackagemergeMain(createReqVO)); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainBaseVO.java index 27584141..db63f1b7 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainBaseVO.java @@ -21,6 +21,9 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @Data public class PackagemergeMainBaseVO { + @Schema(description = "id", example = "id") + private Long id; + @Schema(description = "仓库代码") private String warehouseCode; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainCreateReqVO.java index d0da4b12..486cb843 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainCreateReqVO.java @@ -1,5 +1,7 @@ package com.win.module.wms.controller.packagemergemain.vo; +import com.win.framework.excel.core.annotations.SubObject; +import com.win.module.wms.controller.production.vo.ProductionDetailCreateReqVO; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -11,4 +13,7 @@ import javax.validation.constraints.*; @ToString(callSuper = true) public class PackagemergeMainCreateReqVO extends PackagemergeMainBaseVO { + @SubObject + @Schema(description = "子表数据") + private List subList; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainPageReqVO.java index c72ac3b2..86a4dbff 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainPageReqVO.java @@ -15,6 +15,9 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @ToString(callSuper = true) public class PackagemergeMainPageReqVO extends PageParam { + @Schema(description = "id", example = "id") + private Long id; + @Schema(description = "仓库代码") private String warehouseCode; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/PackageoverMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/PackageoverMainController.java index 49c4f293..091eb4bf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/PackageoverMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/PackageoverMainController.java @@ -52,7 +52,7 @@ public class PackageoverMainController { @PostMapping("/create") @Operation(summary = "创建翻包记录主") @PreAuthorize("@ss.hasPermission('wms:packageover-main:create')") - public CommonResult createPackageoverMain(@Valid @RequestBody PackageoverMainCreateReqVO createReqVO) { + public CommonResult createPackageoverMain(@Valid @RequestBody PackageoverMainCreateReqVO createReqVO) { return success(packageoverMainService.createPackageoverMain(createReqVO)); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainBaseVO.java index f78c245f..ae794b93 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainBaseVO.java @@ -21,6 +21,8 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @Data public class PackageoverMainBaseVO { + @Schema(description = "id", example = "id") + private Long id; @Schema(description = "仓库代码") private String warehouseCode; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainCreateReqVO.java index 44323b81..e2876c01 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainCreateReqVO.java @@ -1,5 +1,7 @@ package com.win.module.wms.controller.packageovermain.vo; +import com.win.framework.excel.core.annotations.SubObject; +import com.win.module.wms.controller.packagemergemain.vo.PackagemergeDetailCreateReqVO; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -10,5 +12,7 @@ import javax.validation.constraints.*; @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class PackageoverMainCreateReqVO extends PackageoverMainBaseVO { - + @SubObject + @Schema(description = "子表数据") + private List subList; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainPageReqVO.java index 8a3d2ca2..4a9d443e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainPageReqVO.java @@ -15,6 +15,9 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @ToString(callSuper = true) public class PackageoverMainPageReqVO extends PageParam { + @Schema(description = "id", example = "id") + private Long id; + @Schema(description = "仓库代码") private String warehouseCode; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/PackagesplitMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/PackagesplitMainController.java index 425c4819..a0f04c8f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/PackagesplitMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/PackagesplitMainController.java @@ -52,7 +52,7 @@ public class PackagesplitMainController { @PostMapping("/create") @Operation(summary = "创建拆包记录主") @PreAuthorize("@ss.hasPermission('wms:packagesplit-main:create')") - public CommonResult createPackagesplitMain(@Valid @RequestBody PackagesplitMainCreateReqVO createReqVO) { + public CommonResult createPackagesplitMain(@Valid @RequestBody PackagesplitMainCreateReqVO createReqVO) { return success(packagesplitMainService.createPackagesplitMain(createReqVO)); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainBaseVO.java index 57fd62ae..379dee7e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainBaseVO.java @@ -21,6 +21,8 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @Data public class PackagesplitMainBaseVO { + @Schema(description = "id", example = "id") + private Long id; @Schema(description = "仓库代码") private String warehouseCode; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainCreateReqVO.java index e9f02377..87cb119a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainCreateReqVO.java @@ -1,5 +1,7 @@ package com.win.module.wms.controller.packagesplitmain.vo; +import com.win.framework.excel.core.annotations.SubObject; +import com.win.module.wms.controller.packagemergemain.vo.PackagemergeDetailCreateReqVO; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -10,5 +12,7 @@ import javax.validation.constraints.*; @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class PackagesplitMainCreateReqVO extends PackagesplitMainBaseVO { - + @SubObject + @Schema(description = "子表数据") + private List subList; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainPageReqVO.java index 9a772dae..e374369b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainPageReqVO.java @@ -15,6 +15,9 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @ToString(callSuper = true) public class PackagesplitMainPageReqVO extends PageParam { + @Schema(description = "id", example = "id") + private Long id; + @Schema(description = "仓库代码") private String warehouseCode; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRecord/vo/RepleinshRecordMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRecord/vo/RepleinshRecordMainBaseVO.java index e5dcc115..368e210b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRecord/vo/RepleinshRecordMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRecord/vo/RepleinshRecordMainBaseVO.java @@ -22,8 +22,7 @@ public class RepleinshRecordMainBaseVO { @Schema(description = "id", example = "id") private Long id; - @Schema(description = "申请单号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "申请单号不能为空") + @Schema(description = "申请单号") private String requestNumber; @Schema(description = "任务单号") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageMassage/PackageConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageMassage/PackageConvert.java index 42d7e7ae..fc93bc57 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageMassage/PackageConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageMassage/PackageConvert.java @@ -34,4 +34,6 @@ public interface PackageConvert { PageResult convertPage(PageResult page); List convertList02(List list); + + PackageCreateReqVO convert01(PackageDO labelExist); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagemergemain/PackagemergeDetailConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagemergemain/PackagemergeDetailConvert.java index a317b900..5a5370cf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagemergemain/PackagemergeDetailConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagemergemain/PackagemergeDetailConvert.java @@ -31,4 +31,5 @@ public interface PackagemergeDetailConvert { List convertList02(List list); + List convertList03(List subList); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageovermain/PackageoverDetailConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageovermain/PackageoverDetailConvert.java index 7019ac1d..f2796624 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageovermain/PackageoverDetailConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageovermain/PackageoverDetailConvert.java @@ -4,6 +4,7 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; +import com.win.module.wms.controller.packagemergemain.vo.PackagemergeDetailCreateReqVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.controller.packageovermain.vo.*; @@ -31,4 +32,5 @@ public interface PackageoverDetailConvert { List convertList02(List list); + List convertList03(List subList); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagesplitmain/PackagesplitDetailConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagesplitmain/PackagesplitDetailConvert.java index 92455f2d..1cb01687 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagesplitmain/PackagesplitDetailConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagesplitmain/PackagesplitDetailConvert.java @@ -31,4 +31,5 @@ public interface PackagesplitDetailConvert { List convertList02(List list); + List convertList03(List subList); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainService.java index b484f0b3..077caf5f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainService.java @@ -21,7 +21,7 @@ public interface PackagemergeMainService { * @param createReqVO 创建信息 * @return 编号 */ - Long createPackagemergeMain(@Valid PackagemergeMainCreateReqVO createReqVO); + String createPackagemergeMain(@Valid PackagemergeMainCreateReqVO createReqVO); /** * 更新合包记录主 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainServiceImpl.java index 36e8f2dc..d2869973 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainServiceImpl.java @@ -1,10 +1,42 @@ package com.win.module.wms.service.packagemergemain; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.win.framework.common.pojo.CustomConditions; +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.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; +import com.win.module.wms.convert.issueRecord.IssueRecordDetailConvert; +import com.win.module.wms.convert.packagemergemain.PackagemergeDetailConvert; +import com.win.module.wms.convert.purchasereturnRecord.PurchasereturnRecordDetailConvert; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +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.packagemergemain.PackagemergeDetailDO; +import com.win.module.wms.dal.dataobject.purchasereturnRecord.PurchasereturnRecordDetailDO; +import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; +import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; +import com.win.module.wms.dal.mysql.packageMassage.PackageMapper; +import com.win.module.wms.dal.mysql.packagemergemain.PackagemergeDetailMapper; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.recordsetting.RecordsettingService; +import com.win.module.wms.service.transaction.TransactionService; +import com.win.module.wms.util.JobUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import com.win.module.wms.controller.packagemergemain.vo.*; import com.win.module.wms.dal.dataobject.packagemergemain.PackagemergeMainDO; @@ -14,6 +46,7 @@ import com.win.module.wms.convert.packagemergemain.PackagemergeMainConvert; import com.win.module.wms.dal.mysql.packagemergemain.PackagemergeMainMapper; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.win.module.wms.enums.ErrorCodeConstants.*; /** @@ -25,16 +58,164 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Validated public class PackagemergeMainServiceImpl implements PackagemergeMainService { + @Resource + private TransactionService transactionService; + @Resource + private PackagemergeDetailMapper packagemergeDetailMapper; + @Resource + private PackageMapper packageMapper; @Resource private PackagemergeMainMapper packagemergeMainMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private JobUtils jobUtils; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private AdminUserApi userApi; + @Resource + private RecordsettingService recordsettingService; + @Resource + private LocationService locationService; + @Resource + private ItembasicService itembasicService; @Override - public Long createPackagemergeMain(PackagemergeMainCreateReqVO createReqVO) { + @Transactional + public String createPackagemergeMain(PackagemergeMainCreateReqVO createReqVO) { // 插入 - PackagemergeMainDO packagemergeMain = PackagemergeMainConvert.INSTANCE.convert(createReqVO); - packagemergeMainMapper.insert(packagemergeMain); + Long userId = getLoginUserId(); + AdminUserRespDTO userRespDTO = userApi.getUser(userId); + PackagemergeMainDO mainDO = PackagemergeMainConvert.INSTANCE.convert(createReqVO); + List subDOList = PackagemergeDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); + String number = serialNumberApi.generateCode(RuleCodeEnum.MERGE_PACKAGE_RECORD.getCode()); + mainDO.setNumber(number); + mainDO.setDepartmentCode(String.valueOf(userRespDTO.getDeptId())); + mainDO.setExecuteTime(LocalDateTime.now()); + mainDO.setActiveDate(LocalDateTime.now()); + mainDO.setAvailable("TRUE"); + mainDO.setId(null); + // 业务类型 + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("MergePackageRecord"); + mainDO.setBusinessType(businesstypeDO.getCode()); + mainDO.setInTransactionType(businesstypeDO.getInTransactionType()); + mainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); + // 接口类型 + RecordsettingDO recordsettingDO = recordsettingService.selectRecordsettingExist("MergePackageRecord"); + mainDO.setInterfaceType(recordsettingDO.getInterfaceType()); + packagemergeMainMapper.insert(mainDO); + //库存事务 + List transactionCreateReqVOList = new ArrayList<>(); + // 合并数量总和 + BigDecimal sumQty = BigDecimal.ZERO; + for (PackagemergeDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDO.getId()); + detailDO.setNumber(number); + LocationDO locationDOFrom = locationService.selectLocation(detailDO.getLocationCode()); + if(locationDOFrom != null) { + detailDO.setAreaCode(locationDOFrom.getAreaCode()); + detailDO.setLocationGroupCode(locationDOFrom.getLocationGroupCode()); + } else { + throw exception(LOCATION_NOT_EXISTS); + } + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); + if (itembasicDO != null) { + detailDO.setItemName(itembasicDO.getName()); + detailDO.setItemDesc1(itembasicDO.getDesc1()); + detailDO.setItemDesc2(itembasicDO.getDesc2()); + detailDO.setProjectCode(itembasicDO.getProject()); + detailDO.setUom(itembasicDO.getUom()); + } else { + throw exception(ITEMBASIC_NOT_EXISTS); + } + //查询库存余额 + List inventoryStatusList = new ArrayList<>(); + inventoryStatusList.add(detailDO.getFromInventoryStatus()); + List balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(detailDO.getItemCode(),detailDO.getFromPackingNumber(),detailDO.getFromBatch(),detailDO.getLocationCode(), inventoryStatusList); + if (balanceDO == null || balanceDO.size() == 0) { + throw exception(BALANCE_NOT_EXISTS); + } + // 库存事务——出 + TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); + BeanUtils.copyProperties(detailDO, transactionCreateReqVOOut); + transactionCreateReqVOOut.setBusinessType(businesstypeDO.getCode()); + TransactiontypeDO transactiontypeDOOut = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); + transactionCreateReqVOOut.setInventoryAction(transactiontypeDOOut.getInventoryAction()); + transactionCreateReqVOOut.setTransactionType(transactiontypeDOOut.getCode()); + transactionCreateReqVOOut.setRecordNumber(number); + transactionCreateReqVOOut.setInventoryStatus(detailDO.getFromInventoryStatus()); + transactionCreateReqVOOut.setWorker(String.valueOf(userRespDTO.getId())); + transactionCreateReqVOOut.setBatch(detailDO.getFromBatch()); + transactionCreateReqVOOut.setPackingNumber(detailDO.getFromPackingNumber()); + transactionCreateReqVOOut.setLocationCode(detailDO.getLocationCode()); + transactionCreateReqVOOut.setSinglePrice(balanceDO.get(0).getSinglePrice()); + transactionCreateReqVOOut.setAmount(balanceDO.get(0).getAmount()); + transactionCreateReqVOOut.setArriveDate(balanceDO.get(0).getArriveDate()); + transactionCreateReqVOOut.setProduceDate(balanceDO.get(0).getProduceDate()); + transactionCreateReqVOOut.setExpireDate(balanceDO.get(0).getExpireDate()); + transactionCreateReqVOOut.setWarehouseCode(mainDO.getWarehouseCode()); + transactionCreateReqVOOut.setQty(detailDO.getFromQty()); + transactionCreateReqVOOut.setId(null); + transactionCreateReqVOList.add(transactionCreateReqVOOut); + // 更新包装信息——来源包装 + updatePackageDO(detailDO.getFromPackingNumber(),balanceDO.get(0).getQty().subtract(detailDO.getFromQty())); + sumQty = sumQty.add(detailDO.getFromQty()); + } + //查询库存余额 + List inventoryStatusList = new ArrayList<>(); + inventoryStatusList.add(subDOList.get(0).getToInventoryStatus()); + List balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(subDOList.get(0).getItemCode(),subDOList.get(0).getToPackingNumber(),subDOList.get(0).getToBatch(),subDOList.get(0).getLocationCode(), inventoryStatusList); +// if (balanceDO == null || balanceDO.size() == 0) { +// throw exception(BALANCE_NOT_EXISTS); +// } + // 库存事务——入 + TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); + BeanUtils.copyProperties(subDOList.get(0), transactionCreateReqVOIn); + transactionCreateReqVOIn.setBusinessType(businesstypeDO.getCode()); + TransactiontypeDO transactiontypeDOIn = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); + transactionCreateReqVOIn.setInventoryAction(transactiontypeDOIn.getInventoryAction()); + transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); + transactionCreateReqVOIn.setWorker(String.valueOf(userRespDTO.getId())); + transactionCreateReqVOIn.setBatch(subDOList.get(0).getToBatch()); + transactionCreateReqVOIn.setPackingNumber(subDOList.get(0).getToPackingNumber()); + transactionCreateReqVOIn.setInventoryStatus(subDOList.get(0).getToInventoryStatus()); + transactionCreateReqVOIn.setLocationCode(subDOList.get(0).getLocationCode()); + transactionCreateReqVOIn.setSinglePrice(balanceDO==null?BigDecimal.ZERO:balanceDO.get(0).getSinglePrice()); + transactionCreateReqVOIn.setAmount(balanceDO==null?BigDecimal.ZERO:balanceDO.get(0).getAmount()); + transactionCreateReqVOIn.setArriveDate(balanceDO==null?LocalDateTime.now():balanceDO.get(0).getArriveDate()); + transactionCreateReqVOIn.setProduceDate(balanceDO==null?LocalDateTime.now():balanceDO.get(0).getProduceDate()); + transactionCreateReqVOIn.setExpireDate(balanceDO==null?LocalDateTime.now():balanceDO.get(0).getExpireDate()); + transactionCreateReqVOIn.setWarehouseCode(mainDO.getWarehouseCode()); + transactionCreateReqVOIn.setRecordNumber(number); + transactionCreateReqVOIn.setQty(sumQty); + transactionCreateReqVOIn.setId(null); + transactionCreateReqVOList.add(transactionCreateReqVOIn); + // 更新包装信息——目标包装 + updatePackageDO(subDOList.get(0).getToPackingNumber(),balanceDO==null?sumQty:balanceDO.get(0).getQty().add(sumQty)); + packagemergeDetailMapper.insertBatch(subDOList); + //增加库存事务 + transactionService.createTransaction(transactionCreateReqVOList); + //增加操作记录 + trendsApi.createTrends(mainDO.getId(), "packagemergeMain", "增加了合包记录", TrendsTypeEnum.CREATE); // 返回 - return packagemergeMain.getId(); + return mainDO.getNumber(); + } + + /** + * 更新包装信息 + * @param number + * @param qty + */ + private void updatePackageDO(String number, BigDecimal qty) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("number", number); + PackageDO packageDO = packageMapper.selectOne(queryWrapper); + if (packageDO == null) { + throw exception(PACKAGE_NOT_EXISTS); + } + packageDO.setQty(qty); + packageMapper.updateById(packageDO); } @Override diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainService.java index 3219f3fb..44a75b22 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainService.java @@ -21,7 +21,7 @@ public interface PackageoverMainService { * @param createReqVO 创建信息 * @return 编号 */ - Long createPackageoverMain(@Valid PackageoverMainCreateReqVO createReqVO); + String createPackageoverMain(@Valid PackageoverMainCreateReqVO createReqVO); /** * 更新翻包记录主 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainServiceImpl.java index 26e13201..da9207b6 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainServiceImpl.java @@ -1,10 +1,48 @@ package com.win.module.wms.service.packageovermain; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.win.framework.common.pojo.CustomConditions; +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.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.packageMassage.vo.PackageCreateReqVO; +import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; +import com.win.module.wms.convert.packageMassage.PackageConvert; +import com.win.module.wms.convert.packagemergemain.PackagemergeDetailConvert; +import com.win.module.wms.convert.packageovermain.PackageoverDetailConvert; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +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.location.LocationDO; +import com.win.module.wms.dal.dataobject.packageMassage.PackageDO; +import com.win.module.wms.dal.dataobject.packagemergemain.PackagemergeDetailDO; +import com.win.module.wms.dal.dataobject.packageovermain.PackageoverDetailDO; +import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; +import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; +import com.win.module.wms.dal.mysql.packageMassage.PackageMapper; +import com.win.module.wms.dal.mysql.packagemergemain.PackagemergeDetailMapper; +import com.win.module.wms.dal.mysql.packagemergemain.PackagemergeMainMapper; +import com.win.module.wms.dal.mysql.packageovermain.PackageoverDetailMapper; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.itempackaging.ItempackagingService; +import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.packageMassage.PackageService; +import com.win.module.wms.service.recordsetting.RecordsettingService; +import com.win.module.wms.service.transaction.TransactionService; +import com.win.module.wms.util.JobUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import com.win.module.wms.controller.packageovermain.vo.*; import com.win.module.wms.dal.dataobject.packageovermain.PackageoverMainDO; @@ -14,6 +52,7 @@ import com.win.module.wms.convert.packageovermain.PackageoverMainConvert; import com.win.module.wms.dal.mysql.packageovermain.PackageoverMainMapper; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.win.module.wms.enums.ErrorCodeConstants.*; /** @@ -25,16 +64,216 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Validated public class PackageoverMainServiceImpl implements PackageoverMainService { + @Resource + private PackageService packageService; + @Resource + private ItempackagingService itempackagingService; + @Resource + private TransactionService transactionService; + @Resource + private PackagemergeDetailMapper packagemergeDetailMapper; + @Resource + private PackageMapper packageMapper; + @Resource + private PackagemergeMainMapper packagemergeMainMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private JobUtils jobUtils; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private AdminUserApi userApi; + @Resource + private RecordsettingService recordsettingService; + @Resource + private LocationService locationService; + @Resource + private ItembasicService itembasicService; @Resource private PackageoverMainMapper packageoverMainMapper; + @Resource + private PackageoverDetailMapper packageoverDetailMapper; @Override - public Long createPackageoverMain(PackageoverMainCreateReqVO createReqVO) { + @Transactional + public String createPackageoverMain(PackageoverMainCreateReqVO createReqVO) { // 插入 - PackageoverMainDO packageoverMain = PackageoverMainConvert.INSTANCE.convert(createReqVO); - packageoverMainMapper.insert(packageoverMain); + Long userId = getLoginUserId(); + AdminUserRespDTO userRespDTO = userApi.getUser(userId); + PackageoverMainDO mainDO = PackageoverMainConvert.INSTANCE.convert(createReqVO); + List subDOList = PackageoverDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); + String number = serialNumberApi.generateCode(RuleCodeEnum.OVER_PACKAGE_RECORD.getCode()); + mainDO.setNumber(number); + mainDO.setDepartmentCode(String.valueOf(userRespDTO.getDeptId())); + mainDO.setExecuteTime(LocalDateTime.now()); + mainDO.setActiveDate(LocalDateTime.now()); + mainDO.setAvailable("TRUE"); + mainDO.setId(null); + // 业务类型 + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("OverPackageRecord"); + mainDO.setBusinessType(businesstypeDO.getCode()); + mainDO.setInTransactionType(businesstypeDO.getInTransactionType()); + mainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); + // 接口类型 + RecordsettingDO recordsettingDO = recordsettingService.selectRecordsettingExist("OverPackageRecord"); + mainDO.setInterfaceType(recordsettingDO.getInterfaceType()); + packageoverMainMapper.insert(mainDO); + //库存事务 + List transactionCreateReqVOList = new ArrayList<>(); + for (PackageoverDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDO.getId()); + detailDO.setNumber(number); + LocationDO locationDOFrom = locationService.selectLocation(detailDO.getLocationCode()); + if(locationDOFrom != null) { + detailDO.setAreaCode(locationDOFrom.getAreaCode()); + detailDO.setLocationGroupCode(locationDOFrom.getLocationGroupCode()); + } else { + throw exception(LOCATION_NOT_EXISTS); + } + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); + if (itembasicDO != null) { + detailDO.setItemName(itembasicDO.getName()); + detailDO.setItemDesc1(itembasicDO.getDesc1()); + detailDO.setItemDesc2(itembasicDO.getDesc2()); + detailDO.setProjectCode(itembasicDO.getProject()); + detailDO.setUom(itembasicDO.getUom()); + } else { + throw exception(ITEMBASIC_NOT_EXISTS); + } + //查询库存余额 + List inventoryStatusList = new ArrayList<>(); + inventoryStatusList.add(detailDO.getFromInventoryStatus()); + List balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(detailDO.getItemCode(),detailDO.getFromPackingNumber(),detailDO.getFromBatch(),detailDO.getLocationCode(), inventoryStatusList); + if (balanceDO == null || balanceDO.size() == 0) { + throw exception(BALANCE_NOT_EXISTS); + } + // 库存事务——出 + TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); + BeanUtils.copyProperties(detailDO, transactionCreateReqVOOut); + transactionCreateReqVOOut.setBusinessType(businesstypeDO.getCode()); + TransactiontypeDO transactiontypeDOOut = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); + transactionCreateReqVOOut.setInventoryAction(transactiontypeDOOut.getInventoryAction()); + transactionCreateReqVOOut.setTransactionType(transactiontypeDOOut.getCode()); + transactionCreateReqVOOut.setRecordNumber(number); + transactionCreateReqVOOut.setInventoryStatus(detailDO.getFromInventoryStatus()); + transactionCreateReqVOOut.setWorker(String.valueOf(userRespDTO.getId())); + transactionCreateReqVOOut.setBatch(detailDO.getFromBatch()); + transactionCreateReqVOOut.setPackingNumber(detailDO.getFromPackingNumber()); + transactionCreateReqVOOut.setLocationCode(detailDO.getLocationCode()); + transactionCreateReqVOOut.setSinglePrice(balanceDO.get(0).getSinglePrice()); + transactionCreateReqVOOut.setAmount(balanceDO.get(0).getAmount()); + transactionCreateReqVOOut.setArriveDate(balanceDO.get(0).getArriveDate()); + transactionCreateReqVOOut.setProduceDate(balanceDO.get(0).getProduceDate()); + transactionCreateReqVOOut.setExpireDate(balanceDO.get(0).getExpireDate()); + transactionCreateReqVOOut.setWarehouseCode(mainDO.getWarehouseCode()); + transactionCreateReqVOOut.setQty(detailDO.getFromQty()); + transactionCreateReqVOOut.setId(null); + transactionCreateReqVOList.add(transactionCreateReqVOOut); + // 更新包装信息——来源包装 + updatePackageDO(detailDO.getFromPackingNumber(),detailDO.getFromQty()); + // 查询一翻几的规则 在基础包装中 翻几 = 标包数量/替代标包数量 库存余额中不够分配的 向上取整 + // 例如:库存余额24 翻3包 每包10 那么第一包数量10 第二包数量10 第三包数量4 + // 例如:库存余额5 翻3包 每包10 那么第一包数量5 + // 查询基础包装信息 + ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDO.getItemCode()); + if (itempackagingDO == null) { + throw exception(ITEMPACKAGING_NOT_EXISTS); + } + List packageoverDetailDOList = new ArrayList<>(); + // 判断替代标包数量不为空 并且 大于 0 并且 标包数大于等于替代标包数 + if (itempackagingDO.getAltPackQty1() != null && itempackagingDO.getAltPackQty1().compareTo(BigDecimal.ZERO) == 1 && itempackagingDO.getStdPackQty().compareTo(itempackagingDO.getAltPackQty1()) != -1 ) { + // 翻几包 overCount = 标包数量/替代标包数量 + BigDecimal overCount = itempackagingDO.getStdPackQty().divide(itempackagingDO.getAltPackQty1(),0, BigDecimal.ROUND_UP); + // 替代标包数量 + BigDecimal altPackQty = itempackagingDO.getAltPackQty1(); + // 库存余额数量 + BigDecimal balanceQty = balanceDO.get(0).getQty(); + for (int i =0; i< overCount.intValue();i++) { + // 创建 子表数据 + PackageoverDetailDO packageoverDetailDO = new PackageoverDetailDO(); + BeanUtils.copyProperties(detailDO,packageoverDetailDO); + packageoverDetailDO.setId(null).setCreator(null).setCreateTime(null).setUpdater(null).setUpdateTime(null); + packageoverDetailDO.setMasterId(mainDO.getId()); + packageoverDetailDO.setToBatch(packageoverDetailDO.getFromBatch()); + packageoverDetailDO.setToContainerNumber(packageoverDetailDO.getFromContainerNumber()); + packageoverDetailDO.setToOwnerCode(packageoverDetailDO.getFromOwnerCode()); + packageoverDetailDO.setToInventoryStatus(packageoverDetailDO.getFromInventoryStatus()); + // 创建 包装及标签 + PackageCreateReqVO packagecreateReqVO = PackageConvert.INSTANCE.convert01(packageService.LabelExist(detailDO.getFromPackingNumber())); + packagecreateReqVO.setId(null); + packagecreateReqVO.setCreator(null); + PackageDO packageDO; + // 替代标包数量 >= 库存余额数量 只能创建一个包装标签 结束循环 + if (itempackagingDO.getAltPackQty1().compareTo(balanceQty) != -1) { + packagecreateReqVO.setQty(balanceQty); + packageDO = packageService.createPackageLabel(packagecreateReqVO); + packageoverDetailDO.setToPackingNumber(packageDO.getNumber()); + packageoverDetailDO.setToQty(balanceQty); + break; + } else { + //库存余额数量 < 替代标包数量 + packagecreateReqVO.setQty(altPackQty); + packageDO = packageService.createPackageLabel(packagecreateReqVO); + packageoverDetailDO.setToPackingNumber(packageDO.getNumber()); + packageoverDetailDO.setToQty(altPackQty); + balanceQty = balanceQty.subtract(altPackQty); + } + packageoverDetailDOList.add(packageoverDetailDO); + // 库存事务——入 + TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); + BeanUtils.copyProperties(packageoverDetailDO, transactionCreateReqVOIn); + transactionCreateReqVOIn.setBusinessType(businesstypeDO.getCode()); + TransactiontypeDO transactiontypeDOIn = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); + transactionCreateReqVOIn.setInventoryAction(transactiontypeDOIn.getInventoryAction()); + transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); + transactionCreateReqVOIn.setWorker(String.valueOf(userRespDTO.getId())); + transactionCreateReqVOIn.setBatch(packageoverDetailDO.getToBatch()); + transactionCreateReqVOIn.setPackingNumber(packageoverDetailDO.getToPackingNumber()); + transactionCreateReqVOIn.setInventoryStatus(packageoverDetailDO.getToInventoryStatus()); + transactionCreateReqVOIn.setLocationCode(packageoverDetailDO.getLocationCode()); + transactionCreateReqVOIn.setSinglePrice(BigDecimal.ZERO); + transactionCreateReqVOIn.setAmount(BigDecimal.ZERO); + transactionCreateReqVOIn.setArriveDate(LocalDateTime.now()); + transactionCreateReqVOIn.setProduceDate(LocalDateTime.now()); + transactionCreateReqVOIn.setExpireDate(LocalDateTime.now()); + transactionCreateReqVOIn.setWarehouseCode(mainDO.getWarehouseCode()); + transactionCreateReqVOIn.setRecordNumber(number); + transactionCreateReqVOIn.setQty(packageoverDetailDO.getToQty()); + transactionCreateReqVOIn.setId(null); + transactionCreateReqVOList.add(transactionCreateReqVOIn); + } + // 更新旧包装信息 + updatePackageDO(detailDO.getFromPackingNumber(),BigDecimal.ZERO); + } else { + throw exception(PACKAGEOVER_DETAIL_PACKING_ERROR); + } + if (packageoverDetailDOList != null && packageoverDetailDOList.size() > 0) { + packageoverDetailMapper.insertBatch(packageoverDetailDOList); + } + } + //增加库存事务 + transactionService.createTransaction(transactionCreateReqVOList); + //增加操作记录 + trendsApi.createTrends(mainDO.getId(), "packageoverMain", "增加了翻包记录", TrendsTypeEnum.CREATE); // 返回 - return packageoverMain.getId(); + return mainDO.getNumber(); + } + + /** + * 更新包装信息 + * @param number + * @param qty + */ + private void updatePackageDO(String number, BigDecimal qty) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("number", number); + PackageDO packageDO = packageMapper.selectOne(queryWrapper); + if (packageDO == null) { + throw exception(PACKAGE_NOT_EXISTS); + } + packageDO.setQty(qty); + packageMapper.updateById(packageDO); } @Override diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainService.java index 8a5076ad..4d192145 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainService.java @@ -21,7 +21,7 @@ public interface PackagesplitMainService { * @param createReqVO 创建信息 * @return 编号 */ - Long createPackagesplitMain(@Valid PackagesplitMainCreateReqVO createReqVO); + String createPackagesplitMain(@Valid PackagesplitMainCreateReqVO createReqVO); /** * 更新拆包记录主 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainServiceImpl.java index f232304a..c579d03f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainServiceImpl.java @@ -1,11 +1,44 @@ package com.win.module.wms.service.packagesplitmain; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.win.framework.common.pojo.CustomConditions; +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.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; +import com.win.module.wms.convert.packagemergemain.PackagemergeDetailConvert; +import com.win.module.wms.convert.packagesplitmain.PackagesplitDetailConvert; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +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.packagemergemain.PackagemergeDetailDO; +import com.win.module.wms.dal.dataobject.packagesplitmain.PackagesplitDetailDO; +import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; +import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; +import com.win.module.wms.dal.mysql.packageMassage.PackageMapper; +import com.win.module.wms.dal.mysql.packagemergemain.PackagemergeDetailMapper; +import com.win.module.wms.dal.mysql.packagemergemain.PackagemergeMainMapper; +import com.win.module.wms.dal.mysql.packagesplitmain.PackagesplitDetailMapper; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.recordsetting.RecordsettingService; +import com.win.module.wms.service.transaction.TransactionService; +import com.win.module.wms.util.JobUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import com.win.module.wms.controller.packagesplitmain.vo.*; import com.win.module.wms.dal.dataobject.packagesplitmain.PackagesplitMainDO; @@ -15,6 +48,7 @@ import com.win.module.wms.convert.packagesplitmain.PackagesplitMainConvert; import com.win.module.wms.dal.mysql.packagesplitmain.PackagesplitMainMapper; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.win.module.wms.enums.ErrorCodeConstants.*; /** @@ -25,17 +59,166 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Service @Validated public class PackagesplitMainServiceImpl implements PackagesplitMainService { - + @Resource + private TransactionService transactionService; + @Resource + private PackagemergeDetailMapper packagemergeDetailMapper; + @Resource + private PackageMapper packageMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private JobUtils jobUtils; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private AdminUserApi userApi; + @Resource + private RecordsettingService recordsettingService; + @Resource + private LocationService locationService; + @Resource + private ItembasicService itembasicService; @Resource private PackagesplitMainMapper packagesplitMainMapper; + @Resource + private PackagesplitDetailMapper packagesplitDetailMapper; @Override - public Long createPackagesplitMain(PackagesplitMainCreateReqVO createReqVO) { + @Transactional + public String createPackagesplitMain(PackagesplitMainCreateReqVO createReqVO) { // 插入 - PackagesplitMainDO packagesplitMain = PackagesplitMainConvert.INSTANCE.convert(createReqVO); - packagesplitMainMapper.insert(packagesplitMain); + Long userId = getLoginUserId(); + AdminUserRespDTO userRespDTO = userApi.getUser(userId); + PackagesplitMainDO mainDO = PackagesplitMainConvert.INSTANCE.convert(createReqVO); + List subDOList = PackagesplitDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); + String number = serialNumberApi.generateCode(RuleCodeEnum.SPLIT_PACKAGE_RECORD.getCode()); + mainDO.setNumber(number); + mainDO.setDepartmentCode(String.valueOf(userRespDTO.getDeptId())); + mainDO.setExecuteTime(LocalDateTime.now()); + mainDO.setActiveDate(LocalDateTime.now()); + mainDO.setAvailable("TRUE"); + mainDO.setId(null); + // 业务类型 + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("SplitPackageRecord"); + mainDO.setBusinessType(businesstypeDO.getCode()); + mainDO.setInTransactionType(businesstypeDO.getInTransactionType()); + mainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); + // 接口类型 + RecordsettingDO recordsettingDO = recordsettingService.selectRecordsettingExist("SplitPackageRecord"); + mainDO.setInterfaceType(recordsettingDO.getInterfaceType()); + packagesplitMainMapper.insert(mainDO); + //库存事务 + List transactionCreateReqVOList = new ArrayList<>(); + // 合并数量总和 + BigDecimal sumQty = BigDecimal.ZERO; + for (PackagesplitDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDO.getId()); + detailDO.setNumber(number); + LocationDO locationDOFrom = locationService.selectLocation(detailDO.getLocationCode()); + if(locationDOFrom != null) { + detailDO.setAreaCode(locationDOFrom.getAreaCode()); + detailDO.setLocationGroupCode(locationDOFrom.getLocationGroupCode()); + } else { + throw exception(LOCATION_NOT_EXISTS); + } + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); + if (itembasicDO != null) { + detailDO.setItemName(itembasicDO.getName()); + detailDO.setItemDesc1(itembasicDO.getDesc1()); + detailDO.setItemDesc2(itembasicDO.getDesc2()); + detailDO.setProjectCode(itembasicDO.getProject()); + detailDO.setUom(itembasicDO.getUom()); + } else { + throw exception(ITEMBASIC_NOT_EXISTS); + } + //查询库存余额 +// List inventoryStatusList = new ArrayList<>(); +// inventoryStatusList.add(detailDO.getToInventoryStatus()); +// List balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(detailDO.getItemCode(),detailDO.getToPackingNumber(),detailDO.getToBatch(),detailDO.getLocationCode(),inventoryStatusList); +// if (balanceDO == null || balanceDO.size() == 0) { +// throw exception(BALANCE_NOT_EXISTS); +// } + // 库存事务——入 + TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); + BeanUtils.copyProperties(detailDO, transactionCreateReqVOIn); + transactionCreateReqVOIn.setBusinessType(businesstypeDO.getCode()); + TransactiontypeDO transactiontypeDOIn = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); + transactionCreateReqVOIn.setInventoryAction(transactiontypeDOIn.getInventoryAction()); + transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); + transactionCreateReqVOIn.setWorker(String.valueOf(userRespDTO.getId())); + transactionCreateReqVOIn.setBatch(detailDO.getToBatch()); + transactionCreateReqVOIn.setPackingNumber(detailDO.getToPackingNumber()); + transactionCreateReqVOIn.setInventoryStatus(detailDO.getToInventoryStatus()); + transactionCreateReqVOIn.setLocationCode(detailDO.getLocationCode()); + transactionCreateReqVOIn.setSinglePrice(BigDecimal.ZERO); + transactionCreateReqVOIn.setAmount(BigDecimal.ZERO); + transactionCreateReqVOIn.setArriveDate(LocalDateTime.now()); + transactionCreateReqVOIn.setProduceDate(LocalDateTime.now()); + transactionCreateReqVOIn.setExpireDate(LocalDateTime.now()); + transactionCreateReqVOIn.setWarehouseCode(mainDO.getWarehouseCode()); + transactionCreateReqVOIn.setRecordNumber(number); + transactionCreateReqVOIn.setQty(detailDO.getToQty()); + transactionCreateReqVOIn.setId(null); + transactionCreateReqVOList.add(transactionCreateReqVOIn); + // 更新包装信息 + updatePackageDO(detailDO.getToPackingNumber(),detailDO.getToQty()); + sumQty = sumQty.add(detailDO.getFromQty()); + } + //查询库存余额 + List inventoryStatusList = new ArrayList<>(); + inventoryStatusList.add(subDOList.get(0).getToInventoryStatus()); + List balanceDO = jobUtils.selectlocationReturnManagementAccuracyToBalance(subDOList.get(0).getItemCode(),subDOList.get(0).getToPackingNumber(),subDOList.get(0).getToBatch(),subDOList.get(0).getLocationCode(), inventoryStatusList); + if (balanceDO == null || balanceDO.size() == 0) { + throw exception(BALANCE_NOT_EXISTS); + } + // 库存事务——出 + TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); + BeanUtils.copyProperties(subDOList.get(0), transactionCreateReqVOOut); + transactionCreateReqVOOut.setBusinessType(businesstypeDO.getCode()); + TransactiontypeDO transactiontypeDOOut = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); + transactionCreateReqVOOut.setInventoryAction(transactiontypeDOOut.getInventoryAction()); + transactionCreateReqVOOut.setTransactionType(transactiontypeDOOut.getCode()); + transactionCreateReqVOOut.setRecordNumber(number); + transactionCreateReqVOOut.setInventoryStatus(subDOList.get(0).getFromInventoryStatus()); + transactionCreateReqVOOut.setWorker(String.valueOf(userRespDTO.getId())); + transactionCreateReqVOOut.setBatch(subDOList.get(0).getFromBatch()); + transactionCreateReqVOOut.setPackingNumber(subDOList.get(0).getFromPackingNumber()); + transactionCreateReqVOOut.setLocationCode(subDOList.get(0).getLocationCode()); + transactionCreateReqVOOut.setSinglePrice(balanceDO.get(0).getSinglePrice()); + transactionCreateReqVOOut.setAmount(balanceDO.get(0).getAmount()); + transactionCreateReqVOOut.setArriveDate(balanceDO.get(0).getArriveDate()); + transactionCreateReqVOOut.setProduceDate(balanceDO.get(0).getProduceDate()); + transactionCreateReqVOOut.setExpireDate(balanceDO.get(0).getExpireDate()); + transactionCreateReqVOOut.setWarehouseCode(mainDO.getWarehouseCode()); + transactionCreateReqVOOut.setQty(subDOList.get(0).getFromQty()); + transactionCreateReqVOOut.setId(null); + transactionCreateReqVOList.add(transactionCreateReqVOOut); + // 更新包装信息——来源包装 库存余额数量-从包装数量 + updatePackageDO(subDOList.get(0).getFromPackingNumber(),balanceDO.get(0).getQty().subtract(subDOList.get(0).getFromQty())); + packagesplitDetailMapper.insertBatch(subDOList); + //增加库存事务 + transactionService.createTransaction(transactionCreateReqVOList); + //增加操作记录 + trendsApi.createTrends(mainDO.getId(), "packagesplitMain", "增加了拆包记录", TrendsTypeEnum.CREATE); // 返回 - return packagesplitMain.getId(); + return mainDO.getNumber(); + } + + /** + * 更新包装信息 + * @param number + * @param qty + */ + private void updatePackageDO(String number, BigDecimal qty) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("number", number); + PackageDO packageDO = packageMapper.selectOne(queryWrapper); + if (packageDO == null) { + throw exception(PACKAGE_NOT_EXISTS); + } + packageDO.setQty(qty); + packageMapper.updateById(packageDO); } @Override diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productdismantleRequest/ProductdismantleRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productdismantleRequest/ProductdismantleRequestMainServiceImpl.java index bca58704..8e7bb624 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productdismantleRequest/ProductdismantleRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productdismantleRequest/ProductdismantleRequestMainServiceImpl.java @@ -236,7 +236,7 @@ public class ProductdismantleRequestMainServiceImpl implements ProductdismantleR private void validateDetailMethod(ProductdismantleRequestMainDO mainDO, ProductdismantleRequestDetailaCreateReqVO detailDo, BusinesstypeDO businesstypeDO) { // 校验--生产线基本信息 ProductionlineDO productionlineDO = productionlineService.productionLineCodeExist(detailDo.getProductionLineCode()); - detailDo.setFromLocationCode(productionlineDO.getRawLocationCode()); +// detailDo.setFromLocationCode(productionlineDO.getRawLocationCode()); // 校验--物品基本信息 ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); // 赋值物品Item相关信息