|
@@ -5,13 +5,13 @@ import cn.hutool.core.util.NumberUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
-import com.sd.business.entity.apply.po.ApplyBuyBom;
|
|
|
import com.sd.business.entity.bom.bo.BomSpecBo;
|
|
|
import com.sd.business.entity.bom.po.BomSpec;
|
|
|
import com.sd.business.entity.department.constant.DepartmentConstant;
|
|
@@ -19,9 +19,7 @@ import com.sd.business.entity.in.dto.InOutStorageDto;
|
|
|
import com.sd.business.entity.in.emums.InDetailTypeEnum;
|
|
|
import com.sd.business.entity.in.emums.InOutTypeEnum;
|
|
|
import com.sd.business.entity.in.po.InOutStorageBom;
|
|
|
-import com.sd.business.entity.purchase.dto.PurchaseArrivalImportDataDto;
|
|
|
-import com.sd.business.entity.purchase.dto.PurchasePendingStorageDto;
|
|
|
-import com.sd.business.entity.purchase.dto.PurchasePendingStorageSelectDto;
|
|
|
+import com.sd.business.entity.purchase.dto.*;
|
|
|
import com.sd.business.entity.purchase.po.Purchase;
|
|
|
import com.sd.business.entity.purchase.po.PurchaseBom;
|
|
|
import com.sd.business.entity.purchase.po.PurchasePendingStorage;
|
|
@@ -100,69 +98,89 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
public void add(PurchasePendingStorageDto dto) {
|
|
|
- List<PurchasePendingStorageBom> purchasePendingStorageBomList = dto.getPurchasePendingStorageBomList();
|
|
|
+ List<PurchasePendingStorageBomDto> list = dto.getPurchasePendingStorageBomList();
|
|
|
|
|
|
- BigDecimal arrivalQuantityTotal = purchasePendingStorageBomList.stream()
|
|
|
- .map(PurchasePendingStorageBom::getArrivalQuantity)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- // 保存采购待入库
|
|
|
- dto.setCode(CodeEnum.PURCHASE_STORAGE_CODE.getCode());
|
|
|
- dto.setArrivalQuantity(arrivalQuantityTotal);
|
|
|
- this.save(dto);
|
|
|
+ Map<String, List<PurchasePendingStorageBomDto>> purchaseStorageMap = list.stream()
|
|
|
+ .collect(Collectors.groupingBy(PurchasePendingStorageBomDto::getArrivalCode));
|
|
|
|
|
|
- List<Long> bomSpecIds = purchasePendingStorageBomList.stream().map(PurchasePendingStorageBom::getBomSpecId).collect(Collectors.toList());
|
|
|
+ List<Long> bomSpecIds = list.stream().map(PurchasePendingStorageBomDto::getBomSpecId).collect(Collectors.toList());
|
|
|
Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIds);
|
|
|
- purchasePendingStorageBomList.forEach(item -> {
|
|
|
- BomSpecBo bomSpecBo = bomSpecBoMap.get(item.getBomSpecId());
|
|
|
- if (bomSpecBo == null) {
|
|
|
- throw new ServiceException("未知bom规格id:" + item.getBomSpecId());
|
|
|
- }
|
|
|
- // 判断入库仓库id
|
|
|
- Long warehouseId;
|
|
|
- if (ObjectUtil.equals(bomSpecBo.getClassifyParentId(), 1L)) {
|
|
|
- warehouseId = WarehouseConstant.SEMI_FINISHED_PRODUCT;
|
|
|
- } else {
|
|
|
- warehouseId = WarehouseConstant.PACKAGING_MATERIAL;
|
|
|
- }
|
|
|
- item.setPurchasePendingStorageId(dto.getId());
|
|
|
- item.setWarehouseId(warehouseId);
|
|
|
- });
|
|
|
|
|
|
- // 根据采购合同分组
|
|
|
- Map<Long, List<PurchasePendingStorageBom>> map = purchasePendingStorageBomList.stream().collect(Collectors.groupingBy(PurchasePendingStorageBom::getPurchaseId));
|
|
|
- for (Long purchaseIds : map.keySet()) {
|
|
|
- List<PurchasePendingStorageBom> purchaseStorageBomList = map.get(purchaseIds);
|
|
|
- // 获取入库仓库id
|
|
|
- Set<Long> warehouseIds = purchaseStorageBomList.stream().map(PurchasePendingStorageBom::getWarehouseId).collect(Collectors.toSet());
|
|
|
- if (warehouseIds.size() != 1) {
|
|
|
- throw new ServiceException("当前采购bom入仓不一致!");
|
|
|
- }
|
|
|
- Long warehouseId = warehouseIds.iterator().next();
|
|
|
+ List<PurchasePendingStorage> purchasePendingStorageList = new ArrayList<>();
|
|
|
+ List<PurchasePendingStorageBom> bomList = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, List<PurchasePendingStorageBomDto>> entry : purchaseStorageMap.entrySet()) {
|
|
|
+ List<PurchasePendingStorageBomDto> purchasePendingStorageBomList = entry.getValue();
|
|
|
+ BigDecimal arrivalQuantityTotal = purchasePendingStorageBomList.stream()
|
|
|
+ .map(PurchasePendingStorageBom::getArrivalQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ // 保存采购待入库
|
|
|
+ PurchasePendingStorage purchasePendingStorage = new PurchasePendingStorage();
|
|
|
+ purchasePendingStorage.setId(IdWorker.getId());
|
|
|
+ purchasePendingStorage.setCode(CodeEnum.PURCHASE_STORAGE_CODE.getCode());
|
|
|
+ purchasePendingStorage.setArrivalQuantity(arrivalQuantityTotal);
|
|
|
+ purchasePendingStorage.setArrivalCode(entry.getKey());
|
|
|
+ purchasePendingStorageList.add(purchasePendingStorage);
|
|
|
+
|
|
|
+ // 保存采购待入库明细
|
|
|
+ purchasePendingStorageBomList.forEach(item -> {
|
|
|
+ item.setPurchasePendingStorageId(purchasePendingStorage.getId());
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(item.getBomSpecId());
|
|
|
+ if (bomSpecBo == null) {
|
|
|
+ throw new ServiceException("未知bom规格id:" + item.getBomSpecId());
|
|
|
+ }
|
|
|
+ // 判断入库仓库id
|
|
|
+ Long warehouseId;
|
|
|
+ if (ObjectUtil.equals(bomSpecBo.getClassifyParentId(), 1L)) {
|
|
|
+ warehouseId = WarehouseConstant.SEMI_FINISHED_PRODUCT;
|
|
|
+ } else {
|
|
|
+ warehouseId = WarehouseConstant.PACKAGING_MATERIAL;
|
|
|
+ }
|
|
|
+ item.setWarehouseId(warehouseId);
|
|
|
+ });
|
|
|
+ bomList.addAll(purchasePendingStorageBomList);
|
|
|
+ // 根据采购合同分组
|
|
|
+ Map<Long, List<PurchasePendingStorageBomDto>> map = purchasePendingStorageBomList.stream().collect(Collectors.groupingBy(PurchasePendingStorageBom::getPurchaseId));
|
|
|
+ for (Long purchaseIds : map.keySet()) {
|
|
|
+ List<PurchasePendingStorageBomDto> purchaseStorageBomList = map.get(purchaseIds);
|
|
|
+ // 获取入库仓库id
|
|
|
+ Set<Long> warehouseIds = purchaseStorageBomList.stream().map(PurchasePendingStorageBom::getWarehouseId).collect(Collectors.toSet());
|
|
|
+ if (warehouseIds.size() != 1) {
|
|
|
+ throw new ServiceException("当前入库bom入仓不一致!");
|
|
|
+ }
|
|
|
+ Long warehouseId = purchaseStorageBomList.get(0).getWarehouseId();
|
|
|
|
|
|
- // 入库
|
|
|
- List<InOutStorageBom> inOutStorageBomList = purchaseStorageBomList.stream()
|
|
|
- .map(item -> {
|
|
|
- InOutStorageBom inOutStorageBom = new InOutStorageBom();
|
|
|
- inOutStorageBom.setBomSpecId(item.getBomSpecId());
|
|
|
- inOutStorageBom.setQuantity(item.getArrivalQuantity());
|
|
|
- return inOutStorageBom;
|
|
|
- })
|
|
|
- .filter(item -> Objects.nonNull(item.getQuantity()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- InOutStorageDto inOutStorageDto = new InOutStorageDto();
|
|
|
- inOutStorageDto.setType(InOutTypeEnum.IN.getKey());
|
|
|
- inOutStorageDto.setPurchaseId(purchaseIds);
|
|
|
- inOutStorageDto.setDetailType(InDetailTypeEnum.PURCHASE.getKey());
|
|
|
- inOutStorageDto.setWarehouseId(warehouseId);
|
|
|
- inOutStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
|
|
|
- inOutStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
|
|
|
- inOutStorageDto.setInOutStorageTime(dto.getArrivalDate());
|
|
|
- inOutStorageDto.setInOutStorageBomList(inOutStorageBomList);
|
|
|
- inOutStorageService.add(inOutStorageDto);
|
|
|
+ // 入库
|
|
|
+ List<InOutStorageBom> inOutStorageBomList = purchaseStorageBomList.stream()
|
|
|
+ .map(item -> {
|
|
|
+ InOutStorageBom inOutStorageBom = new InOutStorageBom();
|
|
|
+ inOutStorageBom.setBomSpecId(item.getBomSpecId());
|
|
|
+ inOutStorageBom.setQuantity(item.getArrivalQuantity());
|
|
|
+ return inOutStorageBom;
|
|
|
+ })
|
|
|
+ .filter(item -> Objects.nonNull(item.getQuantity()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ InOutStorageDto inOutStorageDto = new InOutStorageDto();
|
|
|
+ inOutStorageDto.setType(InOutTypeEnum.IN.getKey());
|
|
|
+ inOutStorageDto.setPurchaseId(purchaseIds);
|
|
|
+ if (Objects.equals(purchaseIds, -1L)) {
|
|
|
+ inOutStorageDto.setDetailType(InDetailTypeEnum.GIFT.getKey());
|
|
|
+ } else {
|
|
|
+ inOutStorageDto.setDetailType(InDetailTypeEnum.PURCHASE.getKey());
|
|
|
+ }
|
|
|
+ inOutStorageDto.setWarehouseId(warehouseId);
|
|
|
+ inOutStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
|
|
|
+ inOutStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
|
|
|
+ inOutStorageDto.setRemark(purchaseStorageBomList.get(0).getRemark());
|
|
|
+ inOutStorageDto.setInOutStorageTime(purchaseStorageBomList.get(0).getArrivalDate());
|
|
|
+ inOutStorageDto.setInOutStorageBomList(inOutStorageBomList);
|
|
|
+ inOutStorageService.add(inOutStorageDto);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ // 保存采购待入库
|
|
|
+ this.saveBatch(purchasePendingStorageList);
|
|
|
// 保存采购待入库明细
|
|
|
- purchasePendingStorageBomService.saveBatch(purchasePendingStorageBomList);
|
|
|
+ purchasePendingStorageBomService.saveBatch(bomList);
|
|
|
}
|
|
|
|
|
|
@DSTransactional
|
|
@@ -173,10 +191,9 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public PurchasePendingStorageVo purchaseArrivalImport(List<PurchaseArrivalImportDataDto> list) {
|
|
|
- validatedImportData(list);
|
|
|
+ public List<PurchasePendingStorageBomVo> purchaseArrivalImport(List<PurchaseArrivalImportDataDto> list) {
|
|
|
+ this.validatedArrivalImportData(list);
|
|
|
|
|
|
- PurchasePendingStorageVo purchasePendingStorageVo = new PurchasePendingStorageVo();
|
|
|
List<String> purchaseCodes = list.stream().map(PurchaseArrivalImportDataDto::getPurchaseCode).collect(Collectors.toList());
|
|
|
// 采购合同数据
|
|
|
List<Purchase> purchaseList = purchaseService.list(q -> q.in(Purchase::getCode, purchaseCodes).or().in(Purchase::getErpCode, purchaseCodes));
|
|
@@ -239,20 +256,57 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
|
|
|
bomVo.setBomSpecLength(bomSpec.getLength());
|
|
|
bomVo.setBomSpecWidth(bomSpec.getWidth());
|
|
|
bomVo.setBomSpecHeight(bomSpec.getHeight());
|
|
|
+ bomVo.setArrivalCode(dto.getArrivalCode());
|
|
|
+ bomVo.setArrivalDate(dto.getArrivalDate());
|
|
|
purchasePendingStorageBomList.add(bomVo);
|
|
|
+ }
|
|
|
+ return purchasePendingStorageBomList;
|
|
|
+ }
|
|
|
|
|
|
- if (purchasePendingStorageVo.getArrivalCode() == null) {
|
|
|
- purchasePendingStorageVo.setArrivalCode(dto.getArrivalCode());
|
|
|
- }
|
|
|
- if (purchasePendingStorageVo.getArrivalDate() == null) {
|
|
|
- purchasePendingStorageVo.setArrivalDate(dto.getArrivalDate());
|
|
|
+ @Override
|
|
|
+ public List<PurchasePendingStorageBomVo> purchaseGiftImport(List<PurchaseGiftImportDataDto> list) {
|
|
|
+ this.validatedGiftImportData(list);
|
|
|
+ // bom数据
|
|
|
+ List<String> bomSpecCodes = list.stream().map(PurchaseGiftImportDataDto::getBomSpecCode).collect(Collectors.toList());
|
|
|
+ Map<String, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BomSpec::getCode, q -> q.in(BomSpec::getCode, bomSpecCodes));
|
|
|
+ List<PurchasePendingStorageBomVo> purchasePendingStorageBomList = new ArrayList<>();
|
|
|
+ for (PurchaseGiftImportDataDto dto : list) {
|
|
|
+ BomSpec bomSpec = bomSpecMap.get(dto.getBomSpecCode());
|
|
|
+ if (bomSpec == null) {
|
|
|
+ throw new ServiceException("未知bom品号:" + dto.getBomSpecCode());
|
|
|
}
|
|
|
+
|
|
|
+ // 赋值明细
|
|
|
+ PurchasePendingStorageBomVo bomVo = new PurchasePendingStorageBomVo();
|
|
|
+ bomVo.setPurchaseId(-1L);
|
|
|
+ bomVo.setBomSpecId(bomSpec.getId());
|
|
|
+ bomVo.setArrivalQuantity(dto.getQuantity());
|
|
|
+ bomVo.setWarehouseName(dto.getWarehouseName());
|
|
|
+ bomVo.setBomSpecCode(bomSpec.getCode());
|
|
|
+ bomVo.setBomSpecName(bomSpec.getName());
|
|
|
+ bomVo.setBomSpecLength(bomSpec.getLength());
|
|
|
+ bomVo.setBomSpecWidth(bomSpec.getWidth());
|
|
|
+ bomVo.setBomSpecHeight(bomSpec.getHeight());
|
|
|
+ bomVo.setArrivalCode(dto.getCode());
|
|
|
+ bomVo.setArrivalDate(dto.getArrivalDate());
|
|
|
+ bomVo.setRemark(dto.getRemark());
|
|
|
+ purchasePendingStorageBomList.add(bomVo);
|
|
|
+ }
|
|
|
+ return purchasePendingStorageBomList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void validatedGiftImportData(List<PurchaseGiftImportDataDto> list) {
|
|
|
+ Assert.notEmpty(list, "入库明细不能为空");
|
|
|
+ for (PurchaseGiftImportDataDto dto : list) {
|
|
|
+ Assert.notBlank(dto.getCode(), "单号不能为空");
|
|
|
+ Assert.notBlank(dto.getBomSpecCode(), "bom品号不能为空");
|
|
|
+ Assert.notBlank(dto.getWarehouseName(), "仓库名称不能为空");
|
|
|
+ Assert.notNull(dto.getArrivalDate(), "交易日期不能为空");
|
|
|
+ Assert.gtZero(dto.getQuantity(), "业务数量必须大于0");
|
|
|
}
|
|
|
- purchasePendingStorageVo.setPurchasePendingStorageBomList(purchasePendingStorageBomList);
|
|
|
- return purchasePendingStorageVo;
|
|
|
}
|
|
|
|
|
|
- private void validatedImportData(List<PurchaseArrivalImportDataDto> list) {
|
|
|
+ private void validatedArrivalImportData(List<PurchaseArrivalImportDataDto> list) {
|
|
|
Assert.notEmpty(list, "到货明细不能为空");
|
|
|
for (PurchaseArrivalImportDataDto dto : list) {
|
|
|
if (StrUtil.isBlank(dto.getPurchaseCode())) {
|