Pārlūkot izejas kodu

新增包装配置接口,同步mes包装配置

fgd 1 gadu atpakaļ
vecāks
revīzija
26ef74c1a0
19 mainītis faili ar 872 papildinājumiem un 0 dzēšanām
  1. 13 0
      sd-business/src/main/java/com/sd/business/controller/bom/BomSpecController.java
  2. 41 0
      sd-business/src/main/java/com/sd/business/controller/sku/SkuDefaultPackageSpecController.java
  3. 47 0
      sd-business/src/main/java/com/sd/business/entity/bom/dto/BomSpecQuotationDto.java
  4. 134 0
      sd-business/src/main/java/com/sd/business/entity/bom/vo/BomSpecQuotationVo.java
  5. 17 0
      sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuDefaultPackageSpecDto.java
  6. 17 0
      sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuDefaultPackageSpecSelectDto.java
  7. 88 0
      sd-business/src/main/java/com/sd/business/entity/sku/po/SkuDefaultPackageSpec.java
  8. 17 0
      sd-business/src/main/java/com/sd/business/entity/sku/vo/SkuDefaultPackageSpecVo.java
  9. 36 0
      sd-business/src/main/java/com/sd/business/listener/BomSpecListener.java
  10. 103 0
      sd-business/src/main/java/com/sd/business/listener/DefaultPackageSpecListener.java
  11. 16 0
      sd-business/src/main/java/com/sd/business/mapper/sku/SkuDefaultPackageSpecMapper.java
  12. 10 0
      sd-business/src/main/java/com/sd/business/service/bom/BomSpecService.java
  13. 119 0
      sd-business/src/main/java/com/sd/business/service/bom/impl/BomSpecServiceImpl.java
  14. 28 0
      sd-business/src/main/java/com/sd/business/service/sku/SkuDefaultPackageSpecService.java
  15. 32 0
      sd-business/src/main/java/com/sd/business/service/sku/impl/SkuDefaultPackageSpecServiceImpl.java
  16. 5 0
      sd-business/src/main/resources/mapper/sku/SkuDefaultPackageSpecMapper.xml
  17. 21 0
      sd-mq/src/main/java/com/sd/mq/config/BomSpecConfig.java
  18. 49 0
      sd-mq/src/main/java/com/sd/mq/config/DefaultPackageSpecConfig.java
  19. 79 0
      sd-mq/src/main/java/com/sd/mq/entity/DefaultPackageSpecMessage.java

+ 13 - 0
sd-business/src/main/java/com/sd/business/controller/bom/BomSpecController.java

@@ -3,7 +3,9 @@ package com.sd.business.controller.bom;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 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.vo.BomSpecQuotationVo;
 import com.sd.business.entity.bom.vo.BomSpecVo;
 import com.sd.business.service.bom.BomSpecService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -68,4 +72,13 @@ public class BomSpecController {
         bomSpecService.delete(dto.getId());
     }
 
+    /**
+     * 获取bom报价数据列表
+     * @return
+     */
+    @PostMapping("/getBomSpecQuotationList")
+    public List<BomSpecQuotationVo> getBomSpecQuotationList(@RequestBody BomSpecQuotationDto dto) {
+        return bomSpecService.getBomSpecQuotationList(dto);
+    }
+
 }

+ 41 - 0
sd-business/src/main/java/com/sd/business/controller/sku/SkuDefaultPackageSpecController.java

@@ -0,0 +1,41 @@
+package com.sd.business.controller.sku;
+
+import org.springframework.web.bind.annotation.*;
+import com.sd.business.entity.sku.dto.SkuDefaultPackageSpecDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.service.sku.SkuDefaultPackageSpecService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * sku包材配置规格 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+@RestController
+@RequestMapping("/skuDefaultPackageSpec")
+public class SkuDefaultPackageSpecController {
+
+    @Autowired
+    private SkuDefaultPackageSpecService skuDefaultPackageSpecService;
+
+    /**
+     * sku包材配置规格新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody SkuDefaultPackageSpecDto dto) {
+        skuDefaultPackageSpecService.add(dto);
+    }
+
+    /**
+     * sku包材配置规格删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        skuDefaultPackageSpecService.delete(dto.getId());
+    }
+
+}

+ 47 - 0
sd-business/src/main/java/com/sd/business/entity/bom/dto/BomSpecQuotationDto.java

@@ -0,0 +1,47 @@
+package com.sd.business.entity.bom.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * bom规格报价板查询入参实体
+ *
+ * @author
+ * @since 2023-12-20
+ */
+@Getter
+@Setter
+public class BomSpecQuotationDto {
+
+    /**
+     * bom品号
+     */
+    private String bomSpecCode;
+
+    /**
+     * 长 cm
+     */
+    private BigDecimal length;
+
+    /**
+     * 宽 cm
+     */
+    private BigDecimal width;
+
+    /**
+     * 高 cm
+     */
+    private BigDecimal height;
+
+    /**
+     * 颜色
+     */
+    private String colour;
+
+    /**
+     * 色层 字典:bom_chromatophore
+     */
+    private String chromatophore;
+}

+ 134 - 0
sd-business/src/main/java/com/sd/business/entity/bom/vo/BomSpecQuotationVo.java

@@ -0,0 +1,134 @@
+package com.sd.business.entity.bom.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * bom规格报价板查询返回值实体
+ *
+ * @author
+ * @since 2023-12-20
+ */
+@Getter
+@Setter
+public class BomSpecQuotationVo {
+
+    /**
+     * bom品号
+     */
+    private String bomSpecCode;
+
+    /**
+     * 长 cm
+     */
+    private BigDecimal length;
+
+    /**
+     * 宽 cm
+     */
+    private BigDecimal width;
+
+    /**
+     * 高 cm
+     */
+    private BigDecimal height;
+
+    /**
+     * 颜色
+     */
+    private String colour;
+
+    /**
+     * 色层 字典:bom_chromatophore
+     */
+    private String chromatophore;
+
+    /**
+     * 裸垫单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * bom 激光logo单价
+     */
+    private BigDecimal bomSpecUnitPriceLogo;
+
+    /**
+     * bom 激光体位线单价
+     */
+    private BigDecimal bomSpecUnitPriceLine;
+
+    /**
+     * bom 主材单价
+     */
+    private BigDecimal bomSpecUnitPrice;
+
+    /**
+     * 激光logo价格
+     */
+    private BigDecimal logoProcessingFee;
+
+    /**
+     * 激光体位线价格
+     */
+    private BigDecimal lineProcessingFee;
+
+    /**
+     * 彩纸价格
+     */
+    private BigDecimal colouredPaperPrice;
+
+    /**
+     * OPP膜价格
+     */
+    private BigDecimal oppMembranePrice;
+
+    /**
+     * PE袋价格
+     */
+    private BigDecimal peBagPrice;
+
+    /**
+     * 网包价格
+     */
+    private BigDecimal meshBagPrice;
+
+    /**
+     * 纸箱价格
+     */
+    private BigDecimal paperBoxPrice;
+
+    /**
+     * 气泡袋价格
+     */
+    private BigDecimal bubblePackPrice;
+
+    /**
+     * 快递包材价格
+     */
+    private BigDecimal logisticsPackagingMaterialPrice;
+
+    /**
+     * 不干胶价格
+     */
+    private BigDecimal selfAdhesiveStickerPrice;
+
+    /**
+     * 吊牌价格
+     */
+    private BigDecimal dropPrice;
+
+    /**
+     * 背带价格
+     */
+    private BigDecimal suspendersPrice;
+
+    /**
+     * 辅料价格
+     */
+    private BigDecimal accessoryPrice;
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuDefaultPackageSpecDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.sku.dto;
+
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku包材配置规格新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+@Getter
+@Setter
+public class SkuDefaultPackageSpecDto extends SkuDefaultPackageSpec {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuDefaultPackageSpecSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.sku.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku包材配置规格列表查询入参实体
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+@Getter
+@Setter
+public class SkuDefaultPackageSpecSelectDto extends BaseSelectDto {
+
+}

+ 88 - 0
sd-business/src/main/java/com/sd/business/entity/sku/po/SkuDefaultPackageSpec.java

@@ -0,0 +1,88 @@
+package com.sd.business.entity.sku.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * sku包材配置规格
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+@Getter
+@Setter
+@TableName("sku_default_package_spec")
+public class SkuDefaultPackageSpec extends BasePo {
+
+    /**
+     * 规格
+     */
+    private String spec;
+
+    /**
+     * 彩纸id
+     */
+    private Long colouredPaperId;
+
+    /**
+     * OPP膜id
+     */
+    private Long oppMembraneId;
+
+    /**
+     * PE袋id
+     */
+    private Long peBagId;
+
+    /**
+     * 网包id
+     */
+    private Long meshBagId;
+
+    /**
+     * 纸箱id
+     */
+    private Long paperBoxId;
+
+    /**
+     * 气泡袋id
+     */
+    private Long bubblePackId;
+
+    /**
+     * 快递包材id
+     */
+    private Long logisticsPackagingMaterialId;
+
+    /**
+     * 其他包材id
+     */
+    private Long otherPackingMaterialId;
+
+    /**
+     * 不干胶id
+     */
+    private Long selfAdhesiveStickerId;
+
+    /**
+     * 吊牌id
+     */
+    private Long dropId;
+
+    /**
+     * 背带id
+     */
+    private Long suspendersId;
+
+    /**
+     * 辅料id
+     */
+    private Long accessoryId;
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/sku/vo/SkuDefaultPackageSpecVo.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.sku.vo;
+
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku包材配置规格列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+@Getter
+@Setter
+public class SkuDefaultPackageSpecVo extends SkuDefaultPackageSpec {
+
+}

+ 36 - 0
sd-business/src/main/java/com/sd/business/listener/BomSpecListener.java

@@ -1,6 +1,7 @@
 package com.sd.business.listener;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.rabbitmq.client.Channel;
@@ -23,6 +24,7 @@ import org.springframework.stereotype.Component;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * bom规格监听
@@ -129,4 +131,38 @@ public class BomSpecListener {
             channel.basicReject(deliveryTag, true);
         }
     }
+
+    @RabbitListener(bindings = {
+            @QueueBinding(value = @Queue(BomSpecConfig.EDIT_BOM_SPEC_PRICE_NAME), exchange = @Exchange(BomSpecConfig.DIRECT_EXCHANGE_NAME))
+    })
+    public void editPriceMsgReceive(BomMessage bomMessage, Channel channel, Message message) throws IOException {
+
+        log.info("接收更新bomSpec价格:{}", JSON.toJSONString(bomMessage));
+
+        long deliveryTag = message.getMessageProperties().getDeliveryTag();
+
+        try {
+            List<BomSpecDetail> bomSpecDetailList = bomMessage.getBomSpecDetailList();
+            if (ObjectUtil.isEmpty(bomSpecDetailList)) {
+                channel.basicAck(deliveryTag, true);
+                return;
+            }
+            List<Long> mesIds = bomSpecDetailList.stream().map(BomSpecDetail::getId).collect(Collectors.toList());
+
+            Map<Long, Long> bomSpecMap = bomSpecService.mapKV(BomSpec::getMesId, BomSpec::getId, q -> q.in(BomSpec::getId, mesIds));
+
+            List<BomSpec> bomSpecList = BeanUtil.copyToList(bomSpecDetailList, BomSpec.class);
+            bomSpecList.forEach(item -> {
+                item.setId(bomSpecMap.get(item.getMesId()));
+            });
+
+            // 更新bom明细
+            bomSpecService.updateBatchById(bomSpecList);
+
+            channel.basicAck(deliveryTag, true);
+        } catch (Exception e) {
+            log.error("接收更新bom异常", e);
+            channel.basicReject(deliveryTag, true);
+        }
+    }
 }

+ 103 - 0
sd-business/src/main/java/com/sd/business/listener/DefaultPackageSpecListener.java

@@ -0,0 +1,103 @@
+package com.sd.business.listener;
+
+import com.alibaba.fastjson2.JSON;
+import com.rabbitmq.client.Channel;
+import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.sd.business.entity.bom.po.BomSpec;
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
+import com.sd.business.service.bom.BomSpecService;
+import com.sd.business.service.sku.SkuDefaultPackageSpecService;
+import com.sd.mq.config.DefaultPackageSpecConfig;
+import com.sd.mq.entity.DefaultPackageSpecMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Exchange;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.QueueBinding;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * 默认包材配置规格监听
+ */
+@Slf4j
+@Component
+public class DefaultPackageSpecListener {
+
+    @Autowired
+    private SkuDefaultPackageSpecService skuDefaultPackageSpecService;
+
+    @Autowired
+    private BomSpecService bomSpecService;
+
+
+    @RabbitListener(bindings = {
+            @QueueBinding(value = @Queue(DefaultPackageSpecConfig.DEFAULT_PACKAGE_SPEC_NAME), exchange = @Exchange(DefaultPackageSpecConfig.DIRECT_EXCHANGE_NAME))
+    })
+    public void msgReceive(DefaultPackageSpecMessage specMessage, Channel channel, Message message) throws IOException {
+
+        log.info("接收修改包材配置:{}", JSON.toJSONString(specMessage));
+
+        long deliveryTag = message.getMessageProperties().getDeliveryTag();
+
+        try {
+            if (Objects.equals(specMessage.getType(), StatusConstant.YES)) {
+                SkuDefaultPackageSpec defaultPackageSpec = new SkuDefaultPackageSpec();
+                defaultPackageSpec.setSpec(specMessage.getSpec());
+                // 获取包材所有id
+                List<Long> packageBomSpecIds = Stream.of(specMessage.getAccessoryId(),
+                                specMessage.getBubblePackId(),
+                                specMessage.getColouredPaperId(),
+                                specMessage.getLogisticsPackagingMaterialId(),
+                                specMessage.getDropId(),
+                                specMessage.getMeshBagId(),
+                                specMessage.getOppMembraneId(),
+                                specMessage.getPeBagId(),
+                                specMessage.getPaperBoxId(),
+                                specMessage.getOtherPackingMaterialId(),
+                                specMessage.getSuspendersId(),
+                                specMessage.getSelfAdhesiveStickerId())
+                        .filter(Objects::nonNull)
+                        .collect(Collectors.toList());
+
+                if (!packageBomSpecIds.isEmpty()) {
+                    // 设置包材id
+                    Map<Long, Long> bomSpecMap = bomSpecService.mapKV(
+                            BomSpec::getMesId,
+                            BaseIdPo::getId,
+                            q -> q.in(BomSpec::getMesId, packageBomSpecIds));
+
+                    defaultPackageSpec.setAccessoryId(bomSpecMap.get(specMessage.getAccessoryId()));
+                    defaultPackageSpec.setBubblePackId(bomSpecMap.get(specMessage.getBubblePackId()));
+                    defaultPackageSpec.setColouredPaperId(bomSpecMap.get(specMessage.getColouredPaperId()));
+                    defaultPackageSpec.setLogisticsPackagingMaterialId(bomSpecMap.get(specMessage.getLogisticsPackagingMaterialId()));
+                    defaultPackageSpec.setDropId(bomSpecMap.get(specMessage.getDropId()));
+                    defaultPackageSpec.setMeshBagId(bomSpecMap.get(specMessage.getMeshBagId()));
+                    defaultPackageSpec.setOppMembraneId(bomSpecMap.get(specMessage.getOppMembraneId()));
+                    defaultPackageSpec.setPeBagId(bomSpecMap.get(specMessage.getPeBagId()));
+                    defaultPackageSpec.setPaperBoxId(bomSpecMap.get(specMessage.getPaperBoxId()));
+                    defaultPackageSpec.setOtherPackingMaterialId(bomSpecMap.get(specMessage.getOtherPackingMaterialId()));
+                    defaultPackageSpec.setSuspendersId(bomSpecMap.get(specMessage.getSuspendersId()));
+                    defaultPackageSpec.setSelfAdhesiveStickerId(bomSpecMap.get(specMessage.getSelfAdhesiveStickerId()));
+                }
+
+                // 新增配置
+                skuDefaultPackageSpecService.save(defaultPackageSpec);
+            } else {
+                // 删除配置
+                skuDefaultPackageSpecService.remove(q -> q.eq(SkuDefaultPackageSpec::getSpec, specMessage.getSpec()));
+            }
+            channel.basicAck(deliveryTag, true);
+        } catch (Exception e) {
+            log.error("接收新增bom异常", e);
+            channel.basicReject(deliveryTag, true);
+        }
+    }
+}

+ 16 - 0
sd-business/src/main/java/com/sd/business/mapper/sku/SkuDefaultPackageSpecMapper.java

@@ -0,0 +1,16 @@
+package com.sd.business.mapper.sku;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
+
+/**
+ * <p>
+ * sku包材配置规格 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+public interface SkuDefaultPackageSpecMapper extends BaseMapper<SkuDefaultPackageSpec> {
+
+}

+ 10 - 0
sd-business/src/main/java/com/sd/business/service/bom/BomSpecService.java

@@ -4,10 +4,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 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.BomSpec;
+import com.sd.business.entity.bom.vo.BomSpecQuotationVo;
 import com.sd.business.entity.bom.vo.BomSpecVo;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -49,4 +53,10 @@ public interface BomSpecService extends BaseService<BomSpec> {
      */
     BomSpecBo getBomSpecBoById(Long id);
 
+    /**
+     * 获取bom报价数据列表
+     * @param dto
+     * @return
+     */
+    List<BomSpecQuotationVo> getBomSpecQuotationList(BomSpecQuotationDto dto);
 }

+ 119 - 0
sd-business/src/main/java/com/sd/business/service/bom/impl/BomSpecServiceImpl.java

@@ -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;
+    }
+
 }

+ 28 - 0
sd-business/src/main/java/com/sd/business/service/sku/SkuDefaultPackageSpecService.java

@@ -0,0 +1,28 @@
+package com.sd.business.service.sku;
+
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.sku.dto.SkuDefaultPackageSpecDto;
+
+
+/**
+ * <p>
+ * sku包材配置规格 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+public interface SkuDefaultPackageSpecService extends BaseService<SkuDefaultPackageSpec> {
+
+    /**
+     * sku包材配置规格新增
+     */
+    void add(SkuDefaultPackageSpecDto dto);
+
+    /**
+     * sku包材配置规格删除
+     */
+    void delete(Long id);
+
+}

+ 32 - 0
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuDefaultPackageSpecServiceImpl.java

@@ -0,0 +1,32 @@
+package com.sd.business.service.sku.impl;
+
+import com.sd.business.entity.sku.po.SkuDefaultPackageSpec;
+import com.sd.business.mapper.sku.SkuDefaultPackageSpecMapper;
+import com.sd.business.service.sku.SkuDefaultPackageSpecService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sd.business.entity.sku.dto.SkuDefaultPackageSpecDto;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * sku包材配置规格 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-20
+ */
+@Service
+public class SkuDefaultPackageSpecServiceImpl extends ServiceImpl<SkuDefaultPackageSpecMapper, SkuDefaultPackageSpec> implements SkuDefaultPackageSpecService {
+
+    @Override
+    public void add(SkuDefaultPackageSpecDto dto) {
+        save(dto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        removeById(id);
+    }
+
+}

+ 5 - 0
sd-business/src/main/resources/mapper/sku/SkuDefaultPackageSpecMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.sku.SkuDefaultPackageSpecMapper">
+
+</mapper>

+ 21 - 0
sd-mq/src/main/java/com/sd/mq/config/BomSpecConfig.java

@@ -15,6 +15,7 @@ public class BomSpecConfig {
     public static final String ADD_BOM_NAME = "add.bom.queue";
     public static final String EDIT_BOM_NAME = "edit.bom.queue";
     public static final String DELETE_BOM_NAME = "delete.bom.queue";
+    public static final String EDIT_BOM_SPEC_PRICE_NAME = "edit.bom.spec.price.queue";
     public static final String DIRECT_EXCHANGE_NAME = "bom.direct.exchange";
 
     /**
@@ -65,6 +66,18 @@ public class BomSpecConfig {
     }
 
     /**
+     * 创建一个队列
+     */
+    @Bean
+    public Queue editBomSpecPriceQueue() {
+        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
+        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
+        // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
+        // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
+        return new Queue(EDIT_BOM_SPEC_PRICE_NAME, true, false, false);
+    }
+
+    /**
      * 绑定交换机和队列
      */
     @Bean
@@ -88,4 +101,12 @@ public class BomSpecConfig {
         return BindingBuilder.bind(deleteBomSpecQueue()).to(bomSpecDirectExchange()).withQueueName();
     }
 
+    /**
+     * 绑定交换机和队列
+     */
+    @Bean
+    public Binding editBomSpecPriceBinding() {
+        return BindingBuilder.bind(editBomSpecPriceQueue()).to(bomSpecDirectExchange()).withQueueName();
+    }
+
 }

+ 49 - 0
sd-mq/src/main/java/com/sd/mq/config/DefaultPackageSpecConfig.java

@@ -0,0 +1,49 @@
+package com.sd.mq.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.DirectExchange;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@EnableRabbit
+@Configuration
+public class DefaultPackageSpecConfig {
+
+    public static final String DEFAULT_PACKAGE_SPEC_NAME = "default.package.spec.queue";
+    public static final String DIRECT_EXCHANGE_NAME = "default.package.spec.direct.exchange";
+
+    /**
+     * 创建一个Direct类型的交换机
+     */
+    @Bean
+    public DirectExchange defaultPackageSpecDirectExchange() {
+        // durable:是否持久化,默认是false,持久化交换机。
+        // autoDelete:是否自动删除,交换机先有队列或者其他交换机绑定的时候,然后当该交换机没有队列或其他交换机绑定的时候,会自动删除。
+        // arguments:交换机设置的参数,比如设置交换机的备用交换机(Alternate Exchange),当消息不能被路由到该交换机绑定的队列上时,会自动路由到备用交换机
+        return new DirectExchange(DIRECT_EXCHANGE_NAME, true, false);
+    }
+
+    /**
+     * 创建一个队列
+     */
+    @Bean
+    public Queue defaultPackageSpecQueue() {
+        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
+        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
+        // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
+        // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
+        return new Queue(DEFAULT_PACKAGE_SPEC_NAME, true, false, false);
+    }
+
+    /**
+     * 绑定交换机和队列
+     */
+    @Bean
+    public Binding defaultPackageSpecBinding() {
+        return BindingBuilder.bind(defaultPackageSpecQueue()).to(defaultPackageSpecDirectExchange()).withQueueName();
+    }
+
+}

+ 79 - 0
sd-mq/src/main/java/com/sd/mq/entity/DefaultPackageSpecMessage.java

@@ -0,0 +1,79 @@
+package com.sd.mq.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DefaultPackageSpecMessage extends BaseMessage {
+
+    /**
+     * 规格
+     */
+    private String spec;
+
+    /**
+     * 彩纸id
+     */
+    private Long colouredPaperId;
+
+    /**
+     * OPP膜id
+     */
+    private Long oppMembraneId;
+
+    /**
+     * PE袋id
+     */
+    private Long peBagId;
+
+    /**
+     * 网包id
+     */
+    private Long meshBagId;
+
+    /**
+     * 纸箱id
+     */
+    private Long paperBoxId;
+
+    /**
+     * 气泡袋id
+     */
+    private Long bubblePackId;
+
+    /**
+     * 快递包材id
+     */
+    private Long logisticsPackagingMaterialId;
+
+    /**
+     * 其他包材id
+     */
+    private Long otherPackingMaterialId;
+
+    /**
+     * 不干胶id
+     */
+    private Long selfAdhesiveStickerId;
+
+    /**
+     * 吊牌id
+     */
+    private Long dropId;
+
+    /**
+     * 背带id
+     */
+    private Long suspendersId;
+
+    /**
+     * 辅料id
+     */
+    private Long accessoryId;
+
+    /**
+     * 类型: 1新增 2删除
+     */
+    private int type;
+}