Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

24282 před 1 rokem
rodič
revize
6bdee54667
24 změnil soubory, kde provedl 396 přidání a 146 odebrání
  1. 0 4
      sd-business/src/main/java/com/sd/business/controller/in/InOutStorageBomController.java
  2. 12 1
      sd-business/src/main/java/com/sd/business/controller/purchase/PurchasePendingStorageController.java
  3. 11 2
      sd-business/src/main/java/com/sd/business/entity/board/dto/SkuSpecQuotationDto.java
  4. 47 11
      sd-business/src/main/java/com/sd/business/entity/board/vo/SkuSpecQuotationVo.java
  5. 2 2
      sd-business/src/main/java/com/sd/business/entity/board/vo/TurnoverRateStatisticsVo.java
  6. 1 1
      sd-business/src/main/java/com/sd/business/entity/in/po/InOutStorage.java
  7. 1 1
      sd-business/src/main/java/com/sd/business/entity/in/vo/InOutStorageBomExportVo.java
  8. 7 0
      sd-business/src/main/java/com/sd/business/entity/in/vo/InOutStorageBomVo.java
  9. 54 0
      sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseGiftImportDataDto.java
  10. 17 0
      sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchasePendingStorageBomDto.java
  11. 1 6
      sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchasePendingStorageDto.java
  12. 16 0
      sd-business/src/main/java/com/sd/business/entity/purchase/vo/PurchasePendingStorageBomVo.java
  13. 0 5
      sd-business/src/main/java/com/sd/business/entity/purchase/vo/PurchasePendingStorageVo.java
  14. 8 0
      sd-business/src/main/java/com/sd/business/mapper/sku/SkuSpecMapper.java
  15. 10 8
      sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageBomServiceImpl.java
  16. 2 2
      sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageServiceImpl.java
  17. 2 2
      sd-business/src/main/java/com/sd/business/service/in/impl/PurchaseWarehousingServiceImpl.java
  18. 10 1
      sd-business/src/main/java/com/sd/business/service/purchase/PurchasePendingStorageService.java
  19. 124 70
      sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchasePendingStorageServiceImpl.java
  20. 51 28
      sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java
  21. 1 1
      sd-business/src/main/resources/mapper/in/InOutStorageBomMapper.xml
  22. 1 0
      sd-business/src/main/resources/mapper/in/InOutStorageMapper.xml
  23. 1 1
      sd-business/src/main/resources/mapper/in/PurchaseWarehousingServiceMapper.xml
  24. 17 0
      sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml

+ 0 - 4
sd-business/src/main/java/com/sd/business/controller/in/InOutStorageBomController.java

@@ -8,7 +8,6 @@ import com.sd.business.entity.in.dto.InOutStorageBomSelectDto;
 import com.sd.business.entity.in.vo.InOutStorageBomExportVo;
 import com.sd.business.entity.in.vo.InOutStorageBomVo;
 import com.sd.business.service.in.InOutStorageBomService;
-import com.sd.framework.util.TemplateExcelUtil;
 import com.sd.framework.util.excel.util.ExcelUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -17,10 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Objects;
 
 
 /**

+ 12 - 1
sd-business/src/main/java/com/sd/business/controller/purchase/PurchasePendingStorageController.java

@@ -3,8 +3,10 @@ package com.sd.business.controller.purchase;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseArrivalImportDataDto;
+import com.sd.business.entity.purchase.dto.PurchaseGiftImportDataDto;
 import com.sd.business.entity.purchase.dto.PurchasePendingStorageDto;
 import com.sd.business.entity.purchase.dto.PurchasePendingStorageSelectDto;
+import com.sd.business.entity.purchase.vo.PurchasePendingStorageBomVo;
 import com.sd.business.entity.purchase.vo.PurchasePendingStorageVo;
 import com.sd.business.service.purchase.PurchasePendingStorageService;
 import com.sd.framework.util.excel.util.ExcelUtil;
@@ -69,9 +71,18 @@ public class PurchasePendingStorageController {
      * 导入采购到货单
      */
     @PostMapping("/purchaseArrivalImport")
-    public PurchasePendingStorageVo purchaseArrivalImport(MultipartFile file) {
+    public List<PurchasePendingStorageBomVo> purchaseArrivalImport(MultipartFile file) {
         List<PurchaseArrivalImportDataDto> list = ExcelUtil.read(file, PurchaseArrivalImportDataDto.class);
         return purchasePendingStorageService.purchaseArrivalImport(list);
     }
 
+    /**
+     * 导入采购赠品入库
+     */
+    @PostMapping("/purchaseGiftImport")
+    public List<PurchasePendingStorageBomVo> purchaseGiftImport(MultipartFile file) {
+        List<PurchaseGiftImportDataDto> list = ExcelUtil.read(file, PurchaseGiftImportDataDto.class);
+        return purchasePendingStorageService.purchaseGiftImport(list);
+    }
+
 }

+ 11 - 2
sd-business/src/main/java/com/sd/business/entity/board/dto/SkuSpecQuotationDto.java

@@ -24,8 +24,17 @@ public class SkuSpecQuotationDto {
     private String skuSpecCode;
 
     /**
-     * sku品名
+     * bom品号
      */
-    private String skuSpecName;
+    private String bomSpecCode;
 
+    /**
+     * 颜色
+     */
+    private String colour;
+
+    /**
+     * 色层 字典:bom_chromatophore
+     */
+    private String chromatophore;
 }

+ 47 - 11
sd-business/src/main/java/com/sd/business/entity/board/vo/SkuSpecQuotationVo.java

@@ -24,6 +24,21 @@ import java.math.BigDecimal;
 public class SkuSpecQuotationVo {
 
     /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * sku id
+     */
+    private Long skuId;
+
+    /**
+     * bom id
+     */
+    private Long bomSpecId;
+
+    /**
      * 品牌
      */
     @ColumnWidth(15)
@@ -45,79 +60,100 @@ public class SkuSpecQuotationVo {
     private String skuSpecName;
 
     /**
+     * bom品号
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "bom品号", index = 3)
+    private String bomSpecCode;
+
+    /**
+     * 颜色
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = "颜色", index = 4)
+    private String colour;
+
+    /**
+     * 色层 字典:bom_chromatophore
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = "色层", index = 5)
+    private String chromatophore;
+
+    /**
      * sku 裸垫单价
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"SKU单价(含税)", "裸垫"}, index = 3)
+    @ExcelProperty(value = {"SKU单价(含税)", "裸垫"}, index = 6)
     private BigDecimal skuSpecUnitPrice;
 
     /**
      * sku 激光logo单价
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"SKU单价(含税)", "激光logo"}, index = 4)
+    @ExcelProperty(value = {"SKU单价(含税)", "激光logo"}, index = 7)
     private BigDecimal skuSpecUnitPriceLogo;
 
     /**
      * sku 激光体位线单价
      */
     @ColumnWidth(15)
-    @ExcelProperty(value = {"SKU单价(含税)", "激光体位线"}, index = 5)
+    @ExcelProperty(value = {"SKU单价(含税)", "激光体位线"}, index = 8)
     private BigDecimal skuSpecUnitPriceLine;
 
     /**
      * bom 主材单价
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "主材"}, index = 6)
+    @ExcelProperty(value = {"价格组成", "主材"}, index = 9)
     private BigDecimal bomSpecUnitPrice;
 
     /**
      * 包材费
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "包材配件"}, index = 7)
+    @ExcelProperty(value = {"价格组成", "包材配件"}, index = 10)
     private BigDecimal packagingMaterialCost;
 
     /**
      * 激光logo价格
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "激光logo"}, index = 8)
+    @ExcelProperty(value = {"价格组成", "激光logo"}, index = 11)
     private BigDecimal logoProcessingFee;
 
     /**
      * 激光体位线价格
      */
     @ColumnWidth(15)
-    @ExcelProperty(value = {"价格组成", "激光体位线"}, index = 9)
+    @ExcelProperty(value = {"价格组成", "激光体位线"}, index = 12)
     private BigDecimal lineProcessingFee;
 
     /**
      * 代发费
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "代发"}, index = 10)
+    @ExcelProperty(value = {"价格组成", "代发"}, index = 13)
     private BigDecimal issueFee;
 
     /**
      * 快递包材费
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "快递包材"}, index = 11)
+    @ExcelProperty(value = {"价格组成", "快递包材"}, index = 14)
     private BigDecimal deliveryMaterialsFee;
 
     /**
      * 包装人工费
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "包装人工"}, index = 12)
+    @ExcelProperty(value = {"价格组成", "包装人工"}, index = 15)
     private BigDecimal packingLabor;
 
     /**
      * 管理费
      */
     @ColumnWidth(12)
-    @ExcelProperty(value = {"价格组成", "管理"}, index = 13)
+    @ExcelProperty(value = {"价格组成", "管理"}, index = 16)
     private BigDecimal managementFee;
 }

+ 2 - 2
sd-business/src/main/java/com/sd/business/entity/board/vo/TurnoverRateStatisticsVo.java

@@ -33,13 +33,13 @@ public class TurnoverRateStatisticsVo {
     /**
      * 宽
      */
-    @ExcelProperty(value = "宽", index = 2)
+    @ExcelProperty(value = "宽", index = 2)
     private BigDecimal width;
 
     /**
      * 高
      */
-    @ExcelProperty(value = "", index = 3)
+    @ExcelProperty(value = "厚度", index = 3)
     private BigDecimal height;
 
     /**

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/in/po/InOutStorage.java

@@ -63,7 +63,7 @@ public class InOutStorage extends BasePo {
     private String applicant;
 
     /**
-     * 入库时间
+     * 入库时间
      */
     private Date inOutStorageTime;
 

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/in/vo/InOutStorageBomExportVo.java

@@ -94,7 +94,7 @@ public class InOutStorageBomExportVo {
     @ColumnWidth(20)
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ExcelProperty(value = "操作时间", index = 8)
-    private Date createTime;
+    private Date inOutStorageTime;
 
     /**
      * 申请人

+ 7 - 0
sd-business/src/main/java/com/sd/business/entity/in/vo/InOutStorageBomVo.java

@@ -4,6 +4,8 @@ import com.sd.business.entity.in.po.InOutStorageBom;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * 出入库bom列表查询返回值实体
  *
@@ -73,4 +75,9 @@ public class InOutStorageBomVo extends InOutStorageBom {
      * 备注
      */
     private String remark;
+
+    /**
+     * 出入库时间
+     */
+    private Date inOutStorageTime;
 }

+ 54 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseGiftImportDataDto.java

@@ -0,0 +1,54 @@
+package com.sd.business.entity.purchase.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 赠品入库导入实体
+ *
+ * @author
+ * @since 2023-11-07
+ */
+@Getter
+@Setter
+public class PurchaseGiftImportDataDto {
+    /**
+     * 单号
+     */
+    @ExcelProperty("单号")
+    private String code;
+
+    /**
+     * 入库时间
+     */
+    @ExcelProperty("交易日期")
+    private Date arrivalDate;
+
+    /**
+     * 仓库名称
+     */
+    @ExcelProperty("仓库名称")
+    private String warehouseName;
+
+    /**
+     * bom品号
+     */
+    @ExcelProperty("品号")
+    private String bomSpecCode;
+
+    /**
+     * 数量
+     */
+    @ExcelProperty("业务数量")
+    private BigDecimal quantity;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty("备注")
+    private String remark;
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchasePendingStorageBomDto.java

@@ -4,6 +4,8 @@ import com.sd.business.entity.purchase.po.PurchasePendingStorageBom;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * 采购待入库bom新增编辑入参实体
  *
@@ -13,4 +15,19 @@ import lombok.Setter;
 @Getter
 @Setter
 public class PurchasePendingStorageBomDto extends PurchasePendingStorageBom {
+
+    /**
+     * 到货单号
+     */
+    private String arrivalCode;
+
+    /**
+     * 到货日期
+     */
+    private Date arrivalDate;
+
+    /**
+     * 备注
+     */
+    private String remark;
 }

+ 1 - 6
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchasePendingStorageDto.java

@@ -21,14 +21,9 @@ import java.util.List;
 public class PurchasePendingStorageDto extends PurchasePendingStorage {
 
     /**
-     * 到货日期
-     */
-    private Date arrivalDate;
-
-    /**
      * 采购待入库详情数据
      */
     @Valid
     @NotEmpty(message = "采购待入库详情数据不能为空")
-    private List<PurchasePendingStorageBom> purchasePendingStorageBomList;
+    private List<PurchasePendingStorageBomDto> purchasePendingStorageBomList;
 }

+ 16 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/vo/PurchasePendingStorageBomVo.java

@@ -5,6 +5,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 采购待入库bom列表查询返回值实体
@@ -17,6 +18,16 @@ import java.math.BigDecimal;
 public class PurchasePendingStorageBomVo extends PurchasePendingStorageBom {
 
     /**
+     * 到货单号
+     */
+    private String arrivalCode;
+
+    /**
+     * 到货日期
+     */
+    private Date arrivalDate;
+
+    /**
      * 采购合同编号
      */
     private String purchaseCode;
@@ -50,4 +61,9 @@ public class PurchasePendingStorageBomVo extends PurchasePendingStorageBom {
      * bom规格高
      */
     private BigDecimal bomSpecHeight;
+
+    /**
+     * 备注
+     */
+    private String remark;
 }

+ 0 - 5
sd-business/src/main/java/com/sd/business/entity/purchase/vo/PurchasePendingStorageVo.java

@@ -18,11 +18,6 @@ import java.util.List;
 public class PurchasePendingStorageVo extends PurchasePendingStorage {
 
     /**
-     * 到货日期
-     */
-    private Date arrivalDate;
-
-    /**
      * 采购合同编号
      */
     private String purchaseCode;

+ 8 - 0
sd-business/src/main/java/com/sd/business/mapper/sku/SkuSpecMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.board.vo.SkuSpecQuotationVo;
 import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.sku.bo.SkuSpecBo;
 import com.sd.business.entity.sku.po.SkuSpec;
@@ -37,4 +38,11 @@ public interface SkuSpecMapper extends BaseMapper<SkuSpec> {
      * 根据sku规格id获取sku详情信息
      */
     List<SkuSpecBo> getSkuSpecBoList(@Param("ew") QueryWrapper<Object> in);
+
+    /**
+     * 查询sku报价板列表
+     * @param wrapper
+     * @return
+     */
+    List<SkuSpecQuotationVo> getSkuSpecQuotationList(@Param("ew") IWrapper<SkuSpec> wrapper);
 }

+ 10 - 8
sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageBomServiceImpl.java

@@ -63,8 +63,8 @@ public class InOutStorageBomServiceImpl extends ServiceImpl<InOutStorageBomMappe
         wrapper.eq("w", Warehouse::getId, dto.getWarehouseId());
         wrapper.eq("ios", InOutStorage::getType, dto.getType());
         wrapper.eq("ios", InOutStorage::getDetailType, dto.getDetailType());
-        wrapper.ge("ios", InOutStorage::getCreateTime, dto.getBeginTime());
-        wrapper.le("ios", InOutStorage::getCreateTime, dto.getEndTime());
+        wrapper.ge("ios", InOutStorage::getInOutStorageTime, dto.getBeginTime());
+        wrapper.le("ios", InOutStorage::getInOutStorageTime, dto.getEndTime());
 
         Page<InOutStorageBomVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
@@ -119,7 +119,7 @@ public class InOutStorageBomServiceImpl extends ServiceImpl<InOutStorageBomMappe
         }
         List<InOutStorage> inOutStorageList = inOutStorageService.list(q -> q
                 .in(BaseIdPo::getId, inOutStorageIds)
-                .orderByAsc(InOutStorage::getCreateTime));
+                .orderByAsc(InOutStorage::getInOutStorageTime));
 
         List<InOutStorageErpExportVo> inOutStorageErpExportVoList = new ArrayList<>();
         int codeNum = 1;
@@ -133,20 +133,22 @@ public class InOutStorageBomServiceImpl extends ServiceImpl<InOutStorageBomMappe
             } else {
                 inOutStorageErpExportVo.setDocCode("T119");
             }
-            // 获取单号
-            String format = DateUtil.format(inOutStorage.getCreateTime(), "-yyyyMM");
+            // 获取单号 系统单号 XX-yyMMdd-000001
+            String[] codes = inOutStorage.getCode().split("-");
+            String substring = codes[1].substring(0, codes[1].length() - 2);
+            String format = "-20" + substring;
             if (!Objects.equals(dateFormat, format)) {
                 dateFormat = format;
-                codeNum = 1;
+                // 后四位生成规则,取系统单号 dd01
+                codeNum = Integer.parseInt(codes[1].substring(codes[1].length() - 2) + codes[2].substring(codes[2].length() - 2));
             }
             String code = inOutStorageErpExportVo.getDocCode() + format + String.format("%04d", codeNum);
             inOutStorageErpExportVo.setCode(code);
-            inOutStorageErpExportVo.setCreateTime(DateUtil.format(inOutStorage.getCreateTime(), "yyyy/MM/dd HH:mm:ss"));
+            inOutStorageErpExportVo.setCreateTime(DateUtil.format(inOutStorage.getInOutStorageTime(), "yyyy/MM/dd HH:mm:ss"));
             inOutStorageErpExportVo.setDeptCode("GPIT");
             inOutStorageErpExportVo.setEmployeeCode("GPIT02");
 
             inOutStorageErpExportVoList.add(inOutStorageErpExportVo);
-            codeNum++;
         }
 
         Map<Long, String> map = inOutStorageErpExportVoList.stream()

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageServiceImpl.java

@@ -61,8 +61,8 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
         wrapper.eq("ios", InOutStorage::getDepartmentId, dto.getDepartmentId());
         wrapper.eq("w", Warehouse::getId, dto.getWarehouseId());
         wrapper.eq("ios", InOutStorage::getDetailType, dto.getDetailType());
-        wrapper.ge("ios", InOutStorage::getCreateTime, dto.getBeginTime());
-        wrapper.le("ios", InOutStorage::getCreateTime, dto.getEndTime());
+        wrapper.ge("ios", InOutStorage::getInOutStorageTime, dto.getBeginTime());
+        wrapper.le("ios", InOutStorage::getInOutStorageTime, dto.getEndTime());
 
         return this.baseMapper.getPage(dto.getPage(), wrapper);
     }

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/in/impl/PurchaseWarehousingServiceImpl.java

@@ -64,8 +64,8 @@ public class PurchaseWarehousingServiceImpl implements PurchaseWarehousingServic
         wrapper.like("s", Supplier::getName, dto.getSupplierName());
         wrapper.like("bs", BomSpec::getCode, dto.getBomSpecCode());
         wrapper.like("bs", BomSpec::getName, dto.getBomSpecName());
-        wrapper.ge("ios", InOutStorage::getCreateTime, dto.getBeginTime());
-        wrapper.le("ios", InOutStorage::getCreateTime, dto.getEndTime());
+        wrapper.ge("ios", InOutStorage::getInOutStorageTime, dto.getBeginTime());
+        wrapper.le("ios", InOutStorage::getInOutStorageTime, dto.getEndTime());
         return wrapper;
     }
 

+ 10 - 1
sd-business/src/main/java/com/sd/business/service/purchase/PurchasePendingStorageService.java

@@ -3,9 +3,11 @@ package com.sd.business.service.purchase;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.purchase.dto.PurchaseArrivalImportDataDto;
+import com.sd.business.entity.purchase.dto.PurchaseGiftImportDataDto;
 import com.sd.business.entity.purchase.dto.PurchasePendingStorageDto;
 import com.sd.business.entity.purchase.dto.PurchasePendingStorageSelectDto;
 import com.sd.business.entity.purchase.po.PurchasePendingStorage;
+import com.sd.business.entity.purchase.vo.PurchasePendingStorageBomVo;
 import com.sd.business.entity.purchase.vo.PurchasePendingStorageVo;
 
 import java.util.List;
@@ -50,5 +52,12 @@ public interface PurchasePendingStorageService extends BaseService<PurchasePendi
      * @param list
      * @return
      */
-    PurchasePendingStorageVo purchaseArrivalImport(List<PurchaseArrivalImportDataDto> list);
+    List<PurchasePendingStorageBomVo> purchaseArrivalImport(List<PurchaseArrivalImportDataDto> list);
+
+    /**
+     * 导入采购赠品入库
+     * @param list
+     * @return
+     */
+    List<PurchasePendingStorageBomVo> purchaseGiftImport(List<PurchaseGiftImportDataDto> list);
 }

+ 124 - 70
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchasePendingStorageServiceImpl.java

@@ -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())) {

+ 51 - 28
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java

@@ -6,12 +6,16 @@ import cn.hutool.core.util.StrUtil;
 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.fjhx.tenant.entity.dict.po.DictCommonData;
+import com.fjhx.tenant.service.dict.DictCommonDataService;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.board.dto.SkuSpecQuotationDto;
 import com.sd.business.entity.board.vo.SkuSpecQuotationVo;
 import com.sd.business.entity.bom.bo.BomSpecBo;
+import com.sd.business.entity.bom.po.Bom;
+import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.inventory.po.Inventory;
 import com.sd.business.entity.price.po.PriceBillingStandard;
@@ -71,6 +75,9 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
     @Autowired
     private PriceBillingStandardDetailService priceBillingStandardDetailService;
 
+    @Autowired
+    private DictCommonDataService dictCommonDataService;
+
     @Override
     public Page<SkuSpecVo> getPage(SkuSpecSelectDto dto) {
         IWrapper<SkuSpec> wrapper = getWrapper();
@@ -186,12 +193,15 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
             return Collections.emptyList();
         }
 
-        Map<Long, Sku> skuMap = skuService.mapKEntity(BaseIdPo::getId, q -> q.in(Sku::getBrand, brandList));
-        List<SkuSpec> skuSpecList = this.list(q -> q
-                .in(SkuSpec::getSkuId, skuMap.keySet())
-                .isNotNull(SkuSpec::getBomSpecId)
-                .like(StrUtil.isNotBlank(dto.getSkuSpecCode()), SkuSpec::getCode, dto.getSkuSpecCode())
-                .like(StrUtil.isNotBlank(dto.getSkuSpecName()), SkuSpec::getName, dto.getSkuSpecName()));
+        IWrapper<SkuSpec> wrapper = getWrapper();
+        wrapper.orderByDesc("ss", SkuSpec::getId);
+        wrapper.in("s", Sku::getBrand, brandList);
+        wrapper.like("ss", SkuSpec::getCode, dto.getSkuSpecCode());
+        wrapper.like("bs", BomSpec::getCode, dto.getBomSpecCode());
+        wrapper.like("bs", BomSpec::getColour, dto.getColour());
+        wrapper.eq("b", Bom::getChromatophore, dto.getChromatophore());
+        wrapper.isNotNull("ss.bom_spec_id");
+        List<SkuSpecQuotationVo> skuSpecList = this.baseMapper.getSkuSpecQuotationList(wrapper);
 
         if (skuSpecList.isEmpty()) {
             return Collections.emptyList();
@@ -207,24 +217,25 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
                 q -> q.in(PriceBillingStandardDetail::getPriceBillingStandardId, priceBillingStandardIds));
 
         // 获取sku关联的所有bom数据
-        List<Long> skuSpecIds = skuSpecList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
-        Map<Long, List<SkuSpecLink>> linkMap = skuSpecLinkService.mapKGroup(SkuSpecLink::getSkuSpecId,
-                q -> q.in(SkuSpecLink::getSkuSpecId, skuSpecIds).eq(SkuSpecLink::getType, 1));
-        Set<Long> bomSpecIds = skuSpecList.stream().map(SkuSpec::getBomSpecId).collect(Collectors.toSet());
-        bomSpecIds.addAll(linkMap.values().stream().flatMap(item -> item.stream().map(SkuSpecLink::getBomSpecId)).collect(Collectors.toList()));
+        List<Long> skuSpecIds = skuSpecList.stream().map(SkuSpecQuotationVo::getId).collect(Collectors.toList());
+
+        List<SkuSpecLink> skuSpecLinkList = skuSpecLinkService.list(q -> q.in(SkuSpecLink::getSkuSpecId, skuSpecIds));
+        Map<Long, Map<Integer, List<SkuSpecLink>>> skuSpecLinkBomSpecMap = skuSpecLinkList.stream().collect(
+                Collectors.groupingBy(SkuSpecLink::getSkuSpecId, Collectors.groupingBy(SkuSpecLink::getType)));
+
+        Set<Long> bomSpecIds = skuSpecList.stream().map(SkuSpecQuotationVo::getBomSpecId).collect(Collectors.toSet());
+        bomSpecIds.addAll(skuSpecLinkList.stream().map(SkuSpecLink::getBomSpecId).collect(Collectors.toList()));
         Map<Long, BomSpecBo> bomSpecBoMap = this.getBomSpecBoByIdList(bomSpecIds);
 
-        List<SkuSpecQuotationVo> list = new ArrayList<>();
+        Map<String, String> bomChromatophoreMap = dictCommonDataService.list(q -> q.eq(DictCommonData::getDictCode, "bom_chromatophore"))
+                .stream().collect(Collectors.toMap(DictCommonData::getDictKey, DictCommonData::getDictValue));
+
 
-        for (SkuSpec skuSpec : skuSpecList) {
-            Sku sku = skuMap.get(skuSpec.getSkuId());
-            BomSpecBo bomSpecBo = bomSpecBoMap.get(skuSpec.getBomSpecId());
+        for (SkuSpecQuotationVo vo : skuSpecList) {
+            BomSpecBo bomSpecBo = bomSpecBoMap.get(vo.getBomSpecId());
 
             // 赋值
-            SkuSpecQuotationVo vo = new SkuSpecQuotationVo();
-            vo.setBrand(sku.getBrand());
-            vo.setSkuSpecCode(skuSpec.getCode());
-            vo.setSkuSpecName(skuSpec.getName());
+            vo.setChromatophore(bomChromatophoreMap.get(vo.getChromatophore()));
             vo.setBomSpecUnitPrice(bomSpecBo.getInternalSellingPrice());
             vo.setPackagingMaterialCost(BigDecimal.ZERO);
             vo.setLineProcessingFee(BigDecimal.ZERO);
@@ -235,9 +246,10 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
             vo.setManagementFee(BigDecimal.ZERO);
 
             // 获取包材费
-            List<SkuSpecLink> skuSpecLinkList = linkMap.get(skuSpec.getId());
-            if (ObjectUtil.isNotEmpty(skuSpecLinkList)) {
-                BigDecimal packagingMaterialCost = skuSpecLinkList.stream().map(item -> {
+            Map<Integer, List<SkuSpecLink>> linkMap = skuSpecLinkBomSpecMap.getOrDefault(vo.getId(), Collections.emptyMap());
+            List<SkuSpecLink> packagingLinkList = linkMap.getOrDefault(1, Collections.emptyList());
+            if (ObjectUtil.isNotEmpty(packagingLinkList)) {
+                BigDecimal packagingMaterialCost = packagingLinkList.stream().map(item -> {
                     BomSpecBo skuSpecLinkBomSpec = bomSpecBoMap.get(item.getBomSpecId());
                     if (skuSpecLinkBomSpec == null) {
                         return BigDecimal.ZERO;
@@ -272,14 +284,27 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
                     case "50":
                         vo.setIssueFee(chargePrice);
                         break;
-                    case "60":
-                        vo.setDeliveryMaterialsFee(chargePrice);
-                        break;
                     case "70":
                         vo.setManagementFee(chargePrice);
                         break;
                 }
             }
+            // 计算快递包材费
+            List<SkuSpecLink> deliveryLinkList = linkMap.getOrDefault(2, Collections.emptyList());
+            if (deliveryLinkList.isEmpty()) {
+                vo.setDeliveryMaterialsFee(BigDecimal.ZERO);
+            } else {
+                BigDecimal deliveryMaterialsFee = deliveryLinkList.stream()
+                        .map(item -> {
+                            BomSpecBo bomSpec = bomSpecBoMap.get(item.getBomSpecId());
+                            if (bomSpec == null) {
+                                return BigDecimal.ZERO;
+                            }
+                            return item.getQuantity().multiply(bomSpec.getInternalSellingPrice());
+                        })
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+                vo.setDeliveryMaterialsFee(deliveryMaterialsFee);
+            }
 
             // 计算Sku单价
             vo.setSkuSpecUnitPrice(
@@ -291,11 +316,9 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
                             .add(vo.getManagementFee()));
             vo.setSkuSpecUnitPriceLogo(vo.getSkuSpecUnitPrice().add(vo.getLogoProcessingFee()));
             vo.setSkuSpecUnitPriceLine(vo.getSkuSpecUnitPrice().add(vo.getLineProcessingFee()));
-
-            list.add(vo);
         }
 
-        return list;
+        return skuSpecList;
     }
 
 }

+ 1 - 1
sd-business/src/main/resources/mapper/in/InOutStorageBomMapper.xml

@@ -9,7 +9,7 @@
                iosb.quantity,
                iosb.unit_price,
                iosb.balance_inventory_quantity,
-               ios.create_time,
+               ios.in_out_storage_time,
                w.type  warehouseType,
                w.name  warehouseName,
                w.code  warehouseCode,

+ 1 - 0
sd-business/src/main/resources/mapper/in/InOutStorageMapper.xml

@@ -15,6 +15,7 @@
                ios.create_time,
                ios.update_user,
                ios.update_time,
+               ios.in_out_storage_time,
                w.type warehouseType,
                w.name warehouseName,
                d.name departmentName,

+ 1 - 1
sd-business/src/main/resources/mapper/in/PurchaseWarehousingServiceMapper.xml

@@ -11,7 +11,7 @@
     </select>
 
     <sql id="select">
-        select ios.create_time outboundTime,
+        select ios.in_out_storage_time outboundTime,
                p.code          purchaseCode,
                ios.code        outboundCode,
                w.name          warehouseName,

+ 17 - 0
sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml

@@ -62,4 +62,21 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getSkuSpecQuotationList" resultType="com.sd.business.entity.board.vo.SkuSpecQuotationVo">
+        select ss.id,
+               ss.sku_id,
+               ss.code skuSpecCode,
+               ss.name skuSpecName,
+               ss.bom_spec_id,
+               s.brand,
+               bs.code bomSpecCode,
+               bs.colour,
+               b.chromatophore
+        from sku_spec ss
+             left join sku s on ss.sku_id = s.id
+             left join bom_spec bs on ss.bom_spec_id = bs.id
+             left join bom b on bs.bom_id = b.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>