From aff0e839eb9624e44f9e35cead31298b268521c6 Mon Sep 17 00:00:00 2001 From: yejiaxing <591141169@qq.com> Date: Thu, 28 Dec 2023 09:19:02 +0800 Subject: [PATCH] =?UTF-8?q?BUG=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/wms/enums/ErrorCodeConstants.java | 2 + .../purchase/PurchaseDetailServiceImpl.java | 147 +++++++++++++++++- .../purchase/PurchaseMainServiceImpl.java | 23 ++- .../PurchasePlanDetailServiceImpl.java | 86 +++++++++- 4 files changed, 241 insertions(+), 17 deletions(-) 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 0c6559e6..aa6a6f9c 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 @@ -1139,5 +1139,7 @@ public interface ErrorCodeConstants { ErrorCode BACKFLUSH_REQUEST_DETAILB_NOT_EXISTS = new ErrorCode(1_000_304_001, "制品收货申请二子表不存在"); + ErrorCode ENABLE_BUG = new ErrorCode(1_000_303_001, "物品不可采购 !"); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseDetailServiceImpl.java index 6f617e81..744a5e9d 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseDetailServiceImpl.java @@ -1,23 +1,52 @@ package com.win.module.wms.service.purchase; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.purchase.vo.PurchaseDetailCreateReqVO; -import com.win.module.wms.controller.purchase.vo.PurchaseDetailExportReqVO; -import com.win.module.wms.controller.purchase.vo.PurchaseDetailPageReqVO; -import com.win.module.wms.controller.purchase.vo.PurchaseDetailUpdateReqVO; +import com.win.framework.dict.core.util.DictFrameworkUtils; +import com.win.module.infra.api.trends.TrendsApi; +import com.win.module.infra.enums.TrendsTypeEnum; +import com.win.module.system.api.dict.DictDataApi; +import com.win.module.system.api.dict.dto.DictDataRespDTO; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.purchase.vo.*; import com.win.module.wms.convert.purchase.PurchaseDetailConvert; +import com.win.module.wms.convert.purchase.PurchaseMainConvert; +import com.win.module.wms.convert.purchasePlan.PurchasePlanDetailConvert; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.currencyexchange.CurrencyexchangeDO; +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.purchase.PurchaseDetailDO; +import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO; +import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanDetailDO; +import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO; +import com.win.module.wms.dal.dataobject.purchaseprice.PurchasepriceDO; +import com.win.module.wms.dal.dataobject.supplier.SupplierDO; +import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; import com.win.module.wms.dal.mysql.purchase.PurchaseDetailMapper; +import com.win.module.wms.dal.mysql.purchase.PurchaseMainMapper; +import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanMainMapper; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.order.OrderStatusEnum; +import com.win.module.wms.enums.request.RequestStatusEnum; +import com.win.module.wms.service.currencyexchange.CurrencyexchangeService; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.itempackaging.ItempackagingService; +import com.win.module.wms.service.purchaseprice.PurchasepriceService; +import com.win.module.wms.service.supplieritem.SupplieritemService; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASE_DETAIL_NOT_EXISTS; +import static com.win.module.wms.enums.ErrorCodeConstants.*; +import static com.win.module.wms.enums.ErrorCodeConstants.STDCOSTPRICE_NOT_EXISTS; /** * 采购订单子 Service 实现类 @@ -30,14 +59,48 @@ public class PurchaseDetailServiceImpl implements PurchaseDetailService { @Resource private PurchaseDetailMapper purchaseDetailMapper; + @Resource + private PurchaseMainMapper purchaseMainMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private ItempackagingService itempackagingService; + @Resource + private CurrencyexchangeService currencyexchangeService; + @Resource + private ItembasicService itembasicService; + @Resource + private SupplieritemService supplieritemService; + @Resource + private PurchasepriceService purchasepriceService; + @Resource + private DictDataApi dictDataApi; @Override public Long createPurchaseDetail(PurchaseDetailCreateReqVO createReqVO) { // 插入 - PurchaseDetailDO purchaseDetail = PurchaseDetailConvert.INSTANCE.convert(createReqVO); - purchaseDetailMapper.insert(purchaseDetail); + PurchaseDetailDO purchaseDetailDO = PurchaseDetailConvert.INSTANCE.convert(createReqVO); + QueryWrapper planMainDOQueryWrapper = new QueryWrapper<>(); + planMainDOQueryWrapper.eq("number", purchaseDetailDO.getNumber()); + PurchaseMainDO purchaseMainDO = purchaseMainMapper.selectOne(planMainDOQueryWrapper); + validatePurchaseDetailCreate(purchaseMainDO, purchaseDetailDO); + purchaseDetailDO.setMasterId(purchaseMainDO.getId()); + purchaseDetailDO.setPlannedQty(BigDecimal.ZERO); + purchaseDetailDO.setShippedQty(BigDecimal.ZERO); + purchaseDetailDO.setReceivedQty(BigDecimal.ZERO); + purchaseDetailDO.setReturnedQty(BigDecimal.ZERO); + purchaseDetailDO.setPutawayQty(BigDecimal.ZERO); + purchaseDetailDO.setErpLocationCode(null); + purchaseDetailDO.setAvailable("TRUE"); + purchaseDetailDO.setStatus(OrderStatusEnum.READY.getCode()); + DictDataRespDTO uom = dictDataApi.selectDictTypeAndLabel(DictTypeConstants.UOM,purchaseDetailDO.getUom()); + purchaseDetailDO.setUom(uom.getValue()); + purchaseDetailMapper.insert(purchaseDetailDO); + trendsApi.createTrends(purchaseDetailDO.getId(), "purchasePlanDetail", "增加了采购订单子表", TrendsTypeEnum.CREATE); // 返回 - return purchaseDetail.getId(); + return purchaseDetailDO.getId(); + + } @Override @@ -48,10 +111,12 @@ public class PurchaseDetailServiceImpl implements PurchaseDetailService { PurchaseDetailDO updateObj = PurchaseDetailConvert.INSTANCE.convert(updateReqVO); purchaseDetailMapper.updateById(updateObj); } + @Override public PageResult getPurchaseDetailSenior(CustomConditions conditions) { return purchaseDetailMapper.selectSenior(conditions); } + @Override public void deletePurchaseDetail(Long id) { // 校验存在 @@ -91,4 +156,70 @@ public class PurchaseDetailServiceImpl implements PurchaseDetailService { return purchaseDetailMapper.selectPurchaseDetail(number, lineNumber, itemCode); } + //校验子表公共方法(适用于新增/修改) + private void validatePurchaseDetailCreate(PurchaseMainDO mainDo, PurchaseDetailDO detailDo) { + // 校验物品基础信息 + ItembasicDO itembasicDO = this.validatorItembasic(detailDo.getItemCode()); + if (itembasicDO != null) { + if (itembasicDO.getUom() != detailDo.getUom()) { + throw exception(UOM_ERRORR, itembasicDO.getUom(), detailDo.getUom()); + } + if (itembasicDO.getUom() != detailDo.getUom()) { + throw exception(UOM_ERRORR, itembasicDO.getUom(), detailDo.getUom()); + } + if ("FALSE".equals(itembasicDO.getEnableBuy())) { + throw exception(ENABLE_BUG); + } + }else { + throw exception(SCRAP_REQUEST_ITEMCODE_INVALID); + } + this.validatorItemPackagingExist(detailDo.getItemCode()); + ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode()); + if (itempackagingDO != null) { + detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit()); + detailDo.setStdPackQty(itempackagingDO.getStdPackQty()); + } + SupplieritemDO supplieritemDO = this.validatorSupplierItemExist(mainDo.getSupplierCode(), detailDo.getItemCode()); + if (supplieritemDO != null) { + detailDo.setSupplierUom(supplieritemDO.getSupplierUom()); + detailDo.setSupplierQty(supplieritemDO.getPackQty()); + detailDo.setConvertRate(supplieritemDO.getConvertRate()); + } else { + throw exception(SUPPLIERITEM_NOT_EXISTS); + } + PurchasepriceDO purchasepriceDO = this.validatorStdcostpriceExist(mainDo.getSupplierCode(), detailDo.getItemCode()); + if (purchasepriceDO != null) { + detailDo.setSinglePrice(purchasepriceDO.getPrice()); + if ("CNY".equals(purchasepriceDO.getCurrency())) { + detailDo.setAmount(detailDo.getSinglePrice().multiply(detailDo.getOrderQty())); + } else { + CurrencyexchangeDO currencyexchangeDO = currencyexchangeService.selectCurrencyexchangeExist(purchasepriceDO.getCurrency(), "CNY"); + detailDo.setAmount(detailDo.getSinglePrice().multiply(detailDo.getOrderQty()).multiply(currencyexchangeDO.getRate())); + } + } else { + throw exception(STDCOSTPRICE_NOT_EXISTS); + } + } + + //子表校验 校验供应商基础信息 + private ItembasicDO validatorItembasic(String itemCode) { + return itembasicService.selectItembasic(itemCode); + } + + //子表校验 校验物品标包信息 + private ItempackagingDO validatorItemPackagingExist(String itemCode) { + return itempackagingService.selectItemPackagingExist(itemCode); + } + + //子表校验 校验供应商物品 + private SupplieritemDO validatorSupplierItemExist(String supplierCode, String itemCode) { + return supplieritemService.selectSupplierItemExist(supplierCode, itemCode); + } + + //子表校验 校验标准成本价格 + private PurchasepriceDO validatorStdcostpriceExist(String supplierCode, String itemCode) { + return purchasepriceService.selectPurchasepriceExist(supplierCode, itemCode); + } + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java index 20090e80..3b25a5a9 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java @@ -273,14 +273,14 @@ public class PurchaseMainServiceImpl implements PurchaseMainService { return errorList; } - //主表校验 校验班次基础信息 + //主表校验 校验供应商基础信息 private SupplierDO validatorShiftExist(String supplierCode) { return supplierService.selectSupplier(supplierCode); } //子表校验 校验供应商基础信息 - private void validatorItembasic(String itemCode) { - itembasicService.selectItembasic(itemCode); + private ItembasicDO validatorItembasic(String itemCode) { + return itembasicService.selectItembasic(itemCode); } //子表校验 校验物品标包信息 @@ -311,8 +311,21 @@ public class PurchaseMainServiceImpl implements PurchaseMainService { //校验子表公共方法(适用于新增/修改) private void validatorDetailMethod(PurchaseDetailDO detailDo, PurchaseMainDO mainDo) { - this.validatorItembasic(detailDo.getItemCode()); - this.validatorItemPackagingExist(detailDo.getItemCode()); + // 校验物品基础信息 + ItembasicDO itembasicDO = this.validatorItembasic(detailDo.getItemCode()); + if (itembasicDO != null) { + if (itembasicDO.getUom() != detailDo.getUom()) { + throw exception(UOM_ERRORR, itembasicDO.getUom(), detailDo.getUom()); + } + if (itembasicDO.getUom() != detailDo.getUom()) { + throw exception(UOM_ERRORR, itembasicDO.getUom(), detailDo.getUom()); + } + if ("FALSE".equals(itembasicDO.getEnableBuy())) { + throw exception(ENABLE_BUG); + } + }else { + throw exception(SCRAP_REQUEST_ITEMCODE_INVALID); + } this.validatorItemPackagingExist(detailDo.getItemCode()); ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode()); if (itempackagingDO != null) { detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit()); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasePlan/PurchasePlanDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasePlan/PurchasePlanDetailServiceImpl.java index 28e48f02..23b30e55 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasePlan/PurchasePlanDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasePlan/PurchasePlanDetailServiceImpl.java @@ -1,11 +1,29 @@ package com.win.module.wms.service.purchasePlan; +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.dict.DictDataApi; +import com.win.module.system.api.dict.dto.DictDataRespDTO; import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanDetailCreateReqVO; import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanDetailExportReqVO; import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanDetailPageReqVO; import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanDetailUpdateReqVO; +import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO; +import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO; +import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO; import com.win.module.wms.dal.dataobject.purchasereceiptRecord.PurchasereceiptRecordDetailDO; +import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; +import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; +import com.win.module.wms.dal.mysql.purchase.PurchaseDetailMapper; +import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanMainMapper; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.purchase.PurchaseMainService; +import com.win.module.wms.service.supplieritem.SupplieritemService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -34,15 +52,56 @@ public class PurchasePlanDetailServiceImpl implements PurchasePlanDetailService @Resource private PurchasePlanDetailMapper purchasePlanDetailMapper; + @Resource + private PurchasePlanMainMapper purchasePlanMainMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private ItembasicService itembasicService; + @Resource + private SupplieritemService supplieritemService; + @Resource + private PurchaseMainService purchaseMainService; + @Resource + private PurchaseDetailMapper purchaseDetailMapper; + @Resource + private DictDataApi dictDataApi; @Override public Long createPurchasePlanDetail(PurchasePlanDetailCreateReqVO createReqVO) { // 插入 - PurchasePlanDetailDO purchasePlanDetail = PurchasePlanDetailConvert.INSTANCE.convert(createReqVO); - purchasePlanDetail.setCreateTime(LocalDateTime.now()); - purchasePlanDetailMapper.insert(purchasePlanDetail); + PurchasePlanDetailDO purchasePlanDetailDO = PurchasePlanDetailConvert.INSTANCE.convert(createReqVO); + QueryWrapper planMainDOQueryWrapper = new QueryWrapper<>(); + planMainDOQueryWrapper.eq("number", purchasePlanDetailDO.getNumber()); + PurchasePlanMainDO purchasePlanMainDO = purchasePlanMainMapper.selectOne(planMainDOQueryWrapper); + validatePurchasePlanDetailCreate(purchasePlanMainDO,purchasePlanDetailDO); + purchasePlanDetailDO.setMasterId(purchasePlanMainDO.getId()); + purchasePlanDetailDO.setShippedQty(BigDecimal.ZERO); + purchasePlanDetailDO.setAvailable("TRUE"); + DictDataRespDTO uom = dictDataApi.selectDictTypeAndLabel(DictTypeConstants.UOM, purchasePlanDetailDO.getUom()); + purchasePlanDetailDO.setUom(uom.getValue()); + //选择已发布状态下订单号、订单行、零件号 判断订单类型 + QueryWrapper purchaseDetailDOQueryWrapper = new QueryWrapper<>(); + purchaseDetailDOQueryWrapper.eq("number", purchasePlanDetailDO.getPoNumber()); + purchaseDetailDOQueryWrapper.eq("item_code", purchasePlanDetailDO.getItemCode()); + purchaseDetailDOQueryWrapper.eq("line_number ", purchasePlanDetailDO.getPoLine()); + PurchaseDetailDO purchaseDetailDO = purchaseDetailMapper.selectOne(purchaseDetailDOQueryWrapper); + if (purchaseDetailDO != null) { + PurchaseMainDO purchaseMainDO = purchaseMainService.getPurchaseMain(purchaseDetailDO.getMasterId()); + //如果是离散单 + if ("DISCRETE".equals(purchaseMainDO.getType())) { + purchasePlanDetailDO.setPlanQty(purchaseDetailDO.getOrderQty().subtract(purchaseDetailDO.getPlannedQty())); + } + } + purchasePlanDetailDO.setId(null); + purchasePlanDetailDO.setCreator(null); + purchasePlanDetailDO.setCreateTime(null); + purchasePlanDetailDO.setUpdater(null); + purchasePlanDetailDO.setUpdateTime(null); + purchasePlanDetailMapper.insert(purchasePlanDetailDO); + trendsApi.createTrends(purchasePlanDetailDO.getId(), "purchasePlanDetail", "增加了要货计划子表", TrendsTypeEnum.CREATE); // 返回 - return purchasePlanDetail.getId(); + return purchasePlanDetailDO.getId(); } @Override @@ -103,5 +162,24 @@ public class PurchasePlanDetailServiceImpl implements PurchasePlanDetailService return newList; } + /** + * 校验创建,并赋值一些参数 + * @param detailDo + * @return + */ + private void validatePurchasePlanDetailCreate( PurchasePlanMainDO purchasePlanMainDO,PurchasePlanDetailDO detailDo) { + this.validatorItembasic(detailDo.getItemCode()); + this.validatorSupplierItemExist(purchasePlanMainDO.getSupplierCode(), detailDo.getItemCode()); + } + + //子表校验 校验供应商基础信息 + private void validatorItembasic(String itemCode) { + itembasicService.selectItembasic(itemCode); + } + + //子表校验 校验供应商物品 + private SupplieritemDO validatorSupplierItemExist(String supplierCode, String itemCode) { + return supplieritemService.selectSupplierItemExist(supplierCode, itemCode); + } }