|
@@ -1,20 +1,34 @@
|
|
|
package com.sd.business.service.bom.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
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.sd.business.entity.bom.bo.BomSpecBo;
|
|
|
import com.sd.business.entity.bom.dto.BomSpecDto;
|
|
|
+import com.sd.business.entity.bom.dto.BomSpecQuotationDto;
|
|
|
import com.sd.business.entity.bom.dto.BomSpecSelectDto;
|
|
|
import com.sd.business.entity.bom.po.Bom;
|
|
|
import com.sd.business.entity.bom.po.BomClassify;
|
|
|
import com.sd.business.entity.bom.po.BomSpec;
|
|
|
+import com.sd.business.entity.bom.vo.BomSpecQuotationVo;
|
|
|
import com.sd.business.entity.bom.vo.BomSpecVo;
|
|
|
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
|
|
|
import com.sd.business.mapper.bom.BomSpecMapper;
|
|
|
import com.sd.business.service.bom.BomSpecService;
|
|
|
+import com.sd.business.service.sku.SkuDefaultPackageSpecService;
|
|
|
import com.sd.framework.util.Assert;
|
|
|
import com.sd.framework.util.sql.Sql;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -27,6 +41,9 @@ import org.springframework.stereotype.Service;
|
|
|
@Service
|
|
|
public class BomSpecServiceImpl extends ServiceImpl<BomSpecMapper, BomSpec> implements BomSpecService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SkuDefaultPackageSpecService skuDefaultPackageSpecService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<BomSpecVo> getPage(BomSpecSelectDto dto) {
|
|
|
Page<BomSpecVo> page = Sql.create(BomSpecVo.class)
|
|
@@ -106,4 +123,106 @@ public class BomSpecServiceImpl extends ServiceImpl<BomSpecMapper, BomSpec> impl
|
|
|
.one();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<BomSpecQuotationVo> getBomSpecQuotationList(BomSpecQuotationDto dto) {
|
|
|
+
|
|
|
+ List<BomSpecQuotationVo> list = Sql.create(BomSpecQuotationVo.class)
|
|
|
+ .selectAs(BomSpec::getCode, BomSpecQuotationVo::getBomSpecCode)
|
|
|
+ .selectAs(BomSpec::getLength, BomSpecQuotationVo::getLength)
|
|
|
+ .selectAs(BomSpec::getWidth, BomSpecQuotationVo::getWidth)
|
|
|
+ .selectAs(BomSpec::getHeight, BomSpecQuotationVo::getHeight)
|
|
|
+ .selectAs(BomSpec::getColour, BomSpecQuotationVo::getColour)
|
|
|
+ .selectAs(Bom::getChromatophore, BomSpecQuotationVo::getChromatophore)
|
|
|
+ .selectAs(BomSpec::getInternalSellingPrice, BomSpecQuotationVo::getBomSpecUnitPrice)
|
|
|
+ .from(BomSpec.class)
|
|
|
+ .innerJoin(Bom.class, Bom::getId, BomSpec::getBomId)
|
|
|
+ .innerJoin(BomClassify.class, BomClassify::getId, Bom::getBomClassifyId)
|
|
|
+ .eq(BomClassify::getParentId, 1L)
|
|
|
+ .like(BomSpec::getCode, dto.getBomSpecCode())
|
|
|
+ .like(BomSpec::getColour, dto.getColour())
|
|
|
+ .eq(BomSpec::getLength, dto.getLength())
|
|
|
+ .eq(BomSpec::getWidth, dto.getWidth())
|
|
|
+ .eq(BomSpec::getHeight, dto.getHeight())
|
|
|
+ .eq(Bom::getChromatophore, dto.getChromatophore())
|
|
|
+ .orderByDesc(BomSpec::getId)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ // 查询bom包材配置
|
|
|
+ List<SkuDefaultPackageSpec> specList = skuDefaultPackageSpecService.list();
|
|
|
+ Map<Long, BigDecimal> bomSpecMap = this.mapKV(BaseIdPo::getId, BomSpec::getInternalSellingPrice, null);
|
|
|
+
|
|
|
+ Map<String, SkuDefaultPackageSpec> specMap = specList.stream()
|
|
|
+ .flatMap(item -> {
|
|
|
+ String spec = item.getSpec();
|
|
|
+ String[] specArr = spec.split("/");
|
|
|
+ if (specArr.length == 1) {
|
|
|
+ return Stream.of(item);
|
|
|
+ }
|
|
|
+ List<SkuDefaultPackageSpec> tempPackageSpecList = new ArrayList<>();
|
|
|
+ for (String newSpec : specArr) {
|
|
|
+ SkuDefaultPackageSpec defaultPackageSpec = BeanUtil.copyProperties(item, SkuDefaultPackageSpec.class);
|
|
|
+ defaultPackageSpec.setSpec(newSpec);
|
|
|
+ tempPackageSpecList.add(defaultPackageSpec);
|
|
|
+ }
|
|
|
+ return tempPackageSpecList.stream();
|
|
|
+ })
|
|
|
+ .collect(Collectors.toMap(SkuDefaultPackageSpec::getSpec, Function.identity()));
|
|
|
+
|
|
|
+ // 赋值包材价格
|
|
|
+ for (BomSpecQuotationVo bomSpecQuotationVo : list) {
|
|
|
+ bomSpecQuotationVo.setBomSpecUnitPriceLogo(new BigDecimal("0.5"));
|
|
|
+ bomSpecQuotationVo.setLogoProcessingFee(new BigDecimal("0.5"));
|
|
|
+ bomSpecQuotationVo.setBomSpecUnitPriceLine(new BigDecimal("1.5"));
|
|
|
+ bomSpecQuotationVo.setLineProcessingFee(new BigDecimal("1.5"));
|
|
|
+ bomSpecQuotationVo.setColouredPaperPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setOppMembranePrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setPeBagPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setMeshBagPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setPaperBoxPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setBubblePackPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setLogisticsPackagingMaterialPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setSelfAdhesiveStickerPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setDropPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setSuspendersPrice(BigDecimal.ZERO);
|
|
|
+ bomSpecQuotationVo.setAccessoryPrice(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ String spec = String.join("*",
|
|
|
+ bomSpecQuotationVo.getLength() == null ? null : bomSpecQuotationVo.getLength().stripTrailingZeros().toPlainString(),
|
|
|
+ bomSpecQuotationVo.getWidth() == null ? null : bomSpecQuotationVo.getWidth().stripTrailingZeros().toPlainString(),
|
|
|
+ bomSpecQuotationVo.getHeight() == null ? null : bomSpecQuotationVo.getHeight().stripTrailingZeros().toPlainString());
|
|
|
+ SkuDefaultPackageSpec skuDefaultPackageSpec = specMap.get(spec);
|
|
|
+
|
|
|
+ if (skuDefaultPackageSpec != null) {
|
|
|
+ bomSpecQuotationVo.setColouredPaperPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getColouredPaperId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setOppMembranePrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getOppMembraneId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setPeBagPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getPeBagId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setMeshBagPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getMeshBagId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setPaperBoxPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getPaperBoxId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setBubblePackPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getBubblePackId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setLogisticsPackagingMaterialPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getLogisticsPackagingMaterialId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setSelfAdhesiveStickerPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getSelfAdhesiveStickerId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setDropPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getDropId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setSuspendersPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getSuspendersId(), BigDecimal.ZERO));
|
|
|
+ bomSpecQuotationVo.setAccessoryPrice(bomSpecMap.getOrDefault(skuDefaultPackageSpec.getAccessoryId(), BigDecimal.ZERO));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算单价
|
|
|
+ BigDecimal unitPrice = bomSpecQuotationVo.getBomSpecUnitPrice()
|
|
|
+ .add(bomSpecQuotationVo.getColouredPaperPrice())
|
|
|
+ .add(bomSpecQuotationVo.getOppMembranePrice())
|
|
|
+ .add(bomSpecQuotationVo.getPeBagPrice())
|
|
|
+ .add(bomSpecQuotationVo.getMeshBagPrice())
|
|
|
+ .add(bomSpecQuotationVo.getPaperBoxPrice())
|
|
|
+ .add(bomSpecQuotationVo.getBubblePackPrice())
|
|
|
+ .add(bomSpecQuotationVo.getLogisticsPackagingMaterialPrice())
|
|
|
+ .add(bomSpecQuotationVo.getSelfAdhesiveStickerPrice())
|
|
|
+ .add(bomSpecQuotationVo.getDropPrice())
|
|
|
+ .add(bomSpecQuotationVo.getSuspendersPrice())
|
|
|
+ .add(bomSpecQuotationVo.getAccessoryPrice());
|
|
|
+ bomSpecQuotationVo.setUnitPrice(unitPrice);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
}
|