|
@ -1,23 +1,52 @@ |
|
|
package com.win.module.wms.service.purchase; |
|
|
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.CustomConditions; |
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
import com.win.module.wms.controller.purchase.vo.PurchaseDetailCreateReqVO; |
|
|
import com.win.framework.dict.core.util.DictFrameworkUtils; |
|
|
import com.win.module.wms.controller.purchase.vo.PurchaseDetailExportReqVO; |
|
|
import com.win.module.infra.api.trends.TrendsApi; |
|
|
import com.win.module.wms.controller.purchase.vo.PurchaseDetailPageReqVO; |
|
|
import com.win.module.infra.enums.TrendsTypeEnum; |
|
|
import com.win.module.wms.controller.purchase.vo.PurchaseDetailUpdateReqVO; |
|
|
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.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.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.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.stereotype.Service; |
|
|
import org.springframework.validation.annotation.Validated; |
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
import javax.annotation.Resource; |
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
|
import java.time.LocalDateTime; |
|
|
import java.util.Collection; |
|
|
import java.util.Collection; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
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 实现类 |
|
|
* 采购订单子 Service 实现类 |
|
@ -30,14 +59,48 @@ public class PurchaseDetailServiceImpl implements PurchaseDetailService { |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private PurchaseDetailMapper purchaseDetailMapper; |
|
|
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 |
|
|
@Override |
|
|
public Long createPurchaseDetail(PurchaseDetailCreateReqVO createReqVO) { |
|
|
public Long createPurchaseDetail(PurchaseDetailCreateReqVO createReqVO) { |
|
|
// 插入
|
|
|
// 插入
|
|
|
PurchaseDetailDO purchaseDetail = PurchaseDetailConvert.INSTANCE.convert(createReqVO); |
|
|
PurchaseDetailDO purchaseDetailDO = PurchaseDetailConvert.INSTANCE.convert(createReqVO); |
|
|
purchaseDetailMapper.insert(purchaseDetail); |
|
|
QueryWrapper<PurchaseMainDO> 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 |
|
|
@Override |
|
@ -48,10 +111,12 @@ public class PurchaseDetailServiceImpl implements PurchaseDetailService { |
|
|
PurchaseDetailDO updateObj = PurchaseDetailConvert.INSTANCE.convert(updateReqVO); |
|
|
PurchaseDetailDO updateObj = PurchaseDetailConvert.INSTANCE.convert(updateReqVO); |
|
|
purchaseDetailMapper.updateById(updateObj); |
|
|
purchaseDetailMapper.updateById(updateObj); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public PageResult<PurchaseDetailDO> getPurchaseDetailSenior(CustomConditions conditions) { |
|
|
public PageResult<PurchaseDetailDO> getPurchaseDetailSenior(CustomConditions conditions) { |
|
|
return purchaseDetailMapper.selectSenior(conditions); |
|
|
return purchaseDetailMapper.selectSenior(conditions); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void deletePurchaseDetail(Long id) { |
|
|
public void deletePurchaseDetail(Long id) { |
|
|
// 校验存在
|
|
|
// 校验存在
|
|
@ -91,4 +156,70 @@ public class PurchaseDetailServiceImpl implements PurchaseDetailService { |
|
|
return purchaseDetailMapper.selectPurchaseDetail(number, lineNumber, itemCode); |
|
|
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); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|