Browse Source

合包 拆包 翻包

master
陈薪名 2 years ago
parent
commit
ca8af71bb5
  1. 2
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java
  2. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/PackagemergeMainController.java
  3. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainBaseVO.java
  4. 5
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainCreateReqVO.java
  5. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagemergemain/vo/PackagemergeMainPageReqVO.java
  6. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/PackageoverMainController.java
  7. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainBaseVO.java
  8. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainCreateReqVO.java
  9. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageovermain/vo/PackageoverMainPageReqVO.java
  10. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/PackagesplitMainController.java
  11. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainBaseVO.java
  12. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainCreateReqVO.java
  13. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packagesplitmain/vo/PackagesplitMainPageReqVO.java
  14. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRecord/vo/RepleinshRecordMainBaseVO.java
  15. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageMassage/PackageConvert.java
  16. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagemergemain/PackagemergeDetailConvert.java
  17. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packageovermain/PackageoverDetailConvert.java
  18. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/packagesplitmain/PackagesplitDetailConvert.java
  19. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainService.java
  20. 189
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagemergemain/PackagemergeMainServiceImpl.java
  21. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainService.java
  22. 247
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageovermain/PackageoverMainServiceImpl.java
  23. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainService.java
  24. 193
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packagesplitmain/PackagesplitMainServiceImpl.java
  25. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productdismantleRequest/ProductdismantleRequestMainServiceImpl.java

2
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, "拆包记录主不存在");
// 拆包记录子

2
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<Long> createPackagemergeMain(@Valid @RequestBody PackagemergeMainCreateReqVO createReqVO) {
public CommonResult<String> createPackagemergeMain(@Valid @RequestBody PackagemergeMainCreateReqVO createReqVO) {
return success(packagemergeMainService.createPackagemergeMain(createReqVO));
}

3
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;

5
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<PackagemergeDetailCreateReqVO> subList;
}

3
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;

2
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<Long> createPackageoverMain(@Valid @RequestBody PackageoverMainCreateReqVO createReqVO) {
public CommonResult<String> createPackageoverMain(@Valid @RequestBody PackageoverMainCreateReqVO createReqVO) {
return success(packageoverMainService.createPackageoverMain(createReqVO));
}

2
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;

6
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<PackagemergeDetailCreateReqVO> subList;
}

3
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;

2
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<Long> createPackagesplitMain(@Valid @RequestBody PackagesplitMainCreateReqVO createReqVO) {
public CommonResult<String> createPackagesplitMain(@Valid @RequestBody PackagesplitMainCreateReqVO createReqVO) {
return success(packagesplitMainService.createPackagesplitMain(createReqVO));
}

2
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;

6
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<PackagesplitDetailCreateReqVO> subList;
}

3
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;

3
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 = "任务单号")

2
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<PackageRespVO> convertPage(PageResult<PackageDO> page);
List<PackageExcelVO> convertList02(List<PackageDO> list);
PackageCreateReqVO convert01(PackageDO labelExist);
}

1
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<PackagemergeDetailExcelVO> convertList02(List<PackagemergeDetailDO> list);
List<PackagemergeDetailDO> convertList03(List<PackagemergeDetailCreateReqVO> subList);
}

2
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<PackageoverDetailExcelVO> convertList02(List<PackageoverDetailDO> list);
List<PackageoverDetailDO> convertList03(List<PackagemergeDetailCreateReqVO> subList);
}

1
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<PackagesplitDetailExcelVO> convertList02(List<PackagesplitDetailDO> list);
List<PackagesplitDetailDO> convertList03(List<PackagesplitDetailCreateReqVO> subList);
}

2
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);
/**
* 更新合包记录主

189
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<PackagemergeDetailDO> 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<TransactionCreateReqVO> 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<String> inventoryStatusList = new ArrayList<>();
inventoryStatusList.add(detailDO.getFromInventoryStatus());
List<BalanceDO> 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<String> inventoryStatusList = new ArrayList<>();
inventoryStatusList.add(subDOList.get(0).getToInventoryStatus());
List<BalanceDO> 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

2
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);
/**
* 更新翻包记录主

247
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<PackageoverDetailDO> 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<TransactionCreateReqVO> 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<String> inventoryStatusList = new ArrayList<>();
inventoryStatusList.add(detailDO.getFromInventoryStatus());
List<BalanceDO> 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<PackageoverDetailDO> 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

2
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);
/**
* 更新拆包记录主

193
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<PackagesplitDetailDO> 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<TransactionCreateReqVO> 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<String> inventoryStatusList = new ArrayList<>();
// inventoryStatusList.add(detailDO.getToInventoryStatus());
// List<BalanceDO> 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<String> inventoryStatusList = new ArrayList<>();
inventoryStatusList.add(subDOList.get(0).getToInventoryStatus());
List<BalanceDO> 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

2
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相关信息

Loading…
Cancel
Save