Bladeren bron

Merge remote-tracking branch 'origin/master'

24282 1 jaar geleden
bovenliggende
commit
d8fa01bbd3
21 gewijzigde bestanden met toevoegingen van 468 en 30 verwijderingen
  1. 3 3
      sd-business/src/main/java/com/sd/business/controller/apply/ApplyBuyController.java
  2. 50 0
      sd-business/src/main/java/com/sd/business/controller/board/SkuSpecQuotationBoard.java
  3. 21 0
      sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyDetailSelectDto.java
  4. 10 0
      sd-business/src/main/java/com/sd/business/entity/apply/vo/ApplyBuyBomVo.java
  5. 26 0
      sd-business/src/main/java/com/sd/business/entity/board/dto/SkuSpecQuotationDto.java
  6. 123 0
      sd-business/src/main/java/com/sd/business/entity/board/vo/SkuSpecQuotationVo.java
  7. 1 0
      sd-business/src/main/java/com/sd/business/entity/in/emums/InDetailTypeEnum.java
  8. 5 0
      sd-business/src/main/java/com/sd/business/entity/order/vo/OrderSkuVo.java
  9. 5 0
      sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseSelectDto.java
  10. 1 1
      sd-business/src/main/java/com/sd/business/entity/purchase/po/Purchase.java
  11. 5 0
      sd-business/src/main/java/com/sd/business/entity/sku/po/SkuSpec.java
  12. 2 1
      sd-business/src/main/java/com/sd/business/service/apply/ApplyBuyService.java
  13. 23 5
      sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyServiceImpl.java
  14. 17 13
      sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageBomServiceImpl.java
  15. 1 1
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java
  16. 1 0
      sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseServiceImpl.java
  17. 10 0
      sd-business/src/main/java/com/sd/business/service/sku/SkuSpecService.java
  18. 160 4
      sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java
  19. 1 0
      sd-business/src/main/resources/mapper/in/InOutStorageBomMapper.xml
  20. 1 0
      sd-business/src/main/resources/mapper/order/OrderSkuMapper.xml
  21. 2 2
      sd-business/src/main/resources/mapper/purchase/PurchaseBomMapper.xml

+ 3 - 3
sd-business/src/main/java/com/sd/business/controller/apply/ApplyBuyController.java

@@ -2,7 +2,7 @@ package com.sd.business.controller.apply;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.flow.enums.FlowStatusEnum;
-import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.entity.apply.dto.ApplyBuyDetailSelectDto;
 import com.sd.business.entity.apply.dto.ApplyBuyDto;
 import com.sd.business.entity.apply.dto.ApplyBuySelectDto;
 import com.sd.business.entity.apply.vo.ApplyBuyVo;
@@ -42,8 +42,8 @@ public class ApplyBuyController {
      * 申购单明细
      */
     @PostMapping("/detail")
-    public ApplyBuyVo detail(@RequestBody BaseSelectDto dto) {
-        return applyBuyService.detail(dto.getId());
+    public ApplyBuyVo detail(@RequestBody ApplyBuyDetailSelectDto dto) {
+        return applyBuyService.detail(dto);
     }
 
     /**

+ 50 - 0
sd-business/src/main/java/com/sd/business/controller/board/SkuSpecQuotationBoard.java

@@ -0,0 +1,50 @@
+package com.sd.business.controller.board;
+
+import com.sd.business.entity.board.dto.SkuSpecQuotationDto;
+import com.sd.business.entity.board.vo.SkuSpecQuotationVo;
+import com.sd.business.service.sku.SkuSpecService;
+import com.sd.framework.util.excel.util.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * sku规格报价板 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-10-27
+ */
+@RestController
+@RequestMapping("/skuSpecQuotationBoard")
+public class SkuSpecQuotationBoard {
+
+    @Autowired
+    private SkuSpecService skuSpecService;
+
+    /**
+     * 获取sku报价数据列表
+     * @return
+     */
+    @PostMapping("/getSkuSpecQuotationList")
+    public List<SkuSpecQuotationVo> getSkuSpecQuotationList(@RequestBody SkuSpecQuotationDto dto) {
+        return skuSpecService.getSkuSpecQuotationList(dto);
+    }
+
+    /**
+     * 导出sku报价数据列表
+     * @return
+     */
+    @PostMapping("/exportExcel")
+    public void exportExcel(HttpServletResponse response, @RequestBody SkuSpecQuotationDto dto) {
+        List<SkuSpecQuotationVo> skuSpecQuotationList = skuSpecService.getSkuSpecQuotationList(dto);
+        ExcelUtil.export(response,"sku报价单", "sku报价单数据", skuSpecQuotationList, SkuSpecQuotationVo.class);
+    }
+
+}

+ 21 - 0
sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyDetailSelectDto.java

@@ -0,0 +1,21 @@
+package com.sd.business.entity.apply.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 申购单详情查询入参实体
+ *
+ * @author
+ * @since 2023-10-30
+ */
+@Getter
+@Setter
+public class ApplyBuyDetailSelectDto extends BaseSelectDto {
+
+    /**
+     * 采购id
+     */
+    private Long purchaseId;
+}

+ 10 - 0
sd-business/src/main/java/com/sd/business/entity/apply/vo/ApplyBuyBomVo.java

@@ -46,4 +46,14 @@ public class ApplyBuyBomVo extends ApplyBuyBom {
      */
     private BigDecimal bomSpecHeight;
 
+    /**
+     * 到货数量
+     */
+    private BigDecimal arrivalQuantity;
+
+    /**
+     * 在途数量
+     */
+    private BigDecimal inTransitQuantity;
+
 }

+ 26 - 0
sd-business/src/main/java/com/sd/business/entity/board/dto/SkuSpecQuotationDto.java

@@ -0,0 +1,26 @@
+package com.sd.business.entity.board.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku规格报价板查询入参实体
+ *
+ * @author
+ * @since 2023-10-27
+ */
+@Getter
+@Setter
+public class SkuSpecQuotationDto {
+
+    /**
+     * sku品号
+     */
+    private String skuSpecCode;
+
+    /**
+     * sku品名
+     */
+    private String skuSpecName;
+
+}

+ 123 - 0
sd-business/src/main/java/com/sd/business/entity/board/vo/SkuSpecQuotationVo.java

@@ -0,0 +1,123 @@
+package com.sd.business.entity.board.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * sku规格报价板查询返回值实体
+ *
+ * @author
+ * @since 2023-10-27
+ */
+@Getter
+@Setter
+@ExcelIgnoreUnannotated
+@HeadRowHeight(20)
+@HeadFontStyle(fontHeightInPoints = 12)
+public class SkuSpecQuotationVo {
+
+    /**
+     * 品牌
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "归属单位", index = 0)
+    private String brand;
+
+    /**
+     * sku品号
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "SKU品号", index = 1)
+    private String skuSpecCode;
+
+    /**
+     * sku品名
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "SKU品名", index = 2)
+    private String skuSpecName;
+
+    /**
+     * sku 裸垫单价
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"SKU单价(含税)", "裸垫"}, index = 3)
+    private BigDecimal skuSpecUnitPrice;
+
+    /**
+     * sku 激光logo单价
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"SKU单价(含税)", "激光logo"}, index = 4)
+    private BigDecimal skuSpecUnitPriceLogo;
+
+    /**
+     * sku 激光体位线单价
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = {"SKU单价(含税)", "激光体位线"}, index = 5)
+    private BigDecimal skuSpecUnitPriceLine;
+
+    /**
+     * bom 主材单价
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "主材"}, index = 6)
+    private BigDecimal bomSpecUnitPrice;
+
+    /**
+     * 包材费
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "包材配件"}, index = 7)
+    private BigDecimal packagingMaterialCost;
+
+    /**
+     * 激光logo价格
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "激光logo"}, index = 8)
+    private BigDecimal logoProcessingFee;
+
+    /**
+     * 激光体位线价格
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = {"价格组成", "激光体位线"}, index = 9)
+    private BigDecimal lineProcessingFee;
+
+    /**
+     * 代发费
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "代发"}, index = 10)
+    private BigDecimal issueFee;
+
+    /**
+     * 快递包材费
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "快递包材"}, index = 11)
+    private BigDecimal deliveryMaterialsFee;
+
+    /**
+     * 包装人工费
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "包装人工"}, index = 12)
+    private BigDecimal packingLabor;
+
+    /**
+     * 管理费
+     */
+    @ColumnWidth(12)
+    @ExcelProperty(value = {"价格组成", "管理"}, index = 13)
+    private BigDecimal managementFee;
+}

+ 1 - 0
sd-business/src/main/java/com/sd/business/entity/in/emums/InDetailTypeEnum.java

@@ -19,6 +19,7 @@ public enum InDetailTypeEnum {
     OTHER(6, "其他入库"),
     ABANDON(7, "废弃入库"),
     CHECK(8, "盘点修正"),
+    GIFT(9, "赠品入库"),
     ;
 
     private static final Map<Integer, InDetailTypeEnum> map = new HashMap<>();

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/order/vo/OrderSkuVo.java

@@ -98,4 +98,9 @@ public class OrderSkuVo extends OrderSku {
      */
     private String departmentName;
 
+    /**
+     * 订单外箱包装费
+     */
+    private BigDecimal outerBoxPackingFee;
+
 }

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseSelectDto.java

@@ -29,4 +29,9 @@ public class PurchaseSelectDto extends BaseSelectDto {
      */
     private String supplierName;
 
+    /**
+     * 采购状态 0 草稿 10审批中 20采购中 30已采购 40驳回 50已作废 60已终止
+     */
+    private String status;
+
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/purchase/po/Purchase.java

@@ -32,7 +32,7 @@ public class Purchase extends BasePo {
     private Long applyBuyId;
 
     /**
-     * 采购状态
+     * 采购状态 0 草稿 10审批中 20采购中 30已采购 40驳回 50已作废 60已终止
      */
     private Integer status;
 

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/sku/po/SkuSpec.java

@@ -66,6 +66,11 @@ public class SkuSpec extends BasePo {
     private String name;
 
     /**
+     * e10 品号
+     */
+    private String erpCode;
+
+    /**
      * 加工面板 字典:charge_item
      */
     private String machinedPanel;

+ 2 - 1
sd-business/src/main/java/com/sd/business/service/apply/ApplyBuyService.java

@@ -2,6 +2,7 @@ package com.sd.business.service.apply;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.apply.dto.ApplyBuyDetailSelectDto;
 import com.sd.business.entity.apply.dto.ApplyBuyDto;
 import com.sd.business.entity.apply.dto.ApplyBuySelectDto;
 import com.sd.business.entity.apply.po.ApplyBuy;
@@ -26,7 +27,7 @@ public interface ApplyBuyService extends BaseService<ApplyBuy> {
     /**
      * 申购单明细
      */
-    ApplyBuyVo detail(Long id);
+    ApplyBuyVo detail(ApplyBuyDetailSelectDto dto);
 
     /**
      * 申购单添加

+ 23 - 5
sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyServiceImpl.java

@@ -14,6 +14,7 @@ import com.fjhx.file.service.FileInfoService;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.apply.dto.ApplyBuyDetailSelectDto;
 import com.sd.business.entity.apply.dto.ApplyBuyDto;
 import com.sd.business.entity.apply.dto.ApplyBuySelectDto;
 import com.sd.business.entity.apply.po.ApplyBuy;
@@ -24,6 +25,8 @@ import com.sd.business.entity.apply.vo.ApplyBuyVo;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.inventory.po.Inventory;
+import com.sd.business.entity.purchase.po.PurchaseBom;
+import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.apply.ApplyBuyMapper;
 import com.sd.business.service.apply.ApplyBuyBomService;
 import com.sd.business.service.apply.ApplyBuyService;
@@ -103,15 +106,15 @@ public class ApplyBuyServiceImpl extends ServiceImpl<ApplyBuyMapper, ApplyBuy> i
     }
 
     @Override
-    public ApplyBuyVo detail(Long id) {
-        Assert.notNull(id, "申购单id不能为空");
+    public ApplyBuyVo detail(ApplyBuyDetailSelectDto dto) {
+        Assert.notNull(dto.getId(), "申购单id不能为空");
 
         // 申购单
-        ApplyBuy ApplyBuy = this.getById(id);
+        ApplyBuy ApplyBuy = this.getById(dto.getId());
         Assert.notNull(ApplyBuy, "没有找到申购单");
 
         // 申购明细
-        List<ApplyBuyBom> list = applyBuyBomService.list(q -> q.eq(ApplyBuyBom::getApplyBuyId, id));
+        List<ApplyBuyBom> list = applyBuyBomService.list(q -> q.eq(ApplyBuyBom::getApplyBuyId, dto.getId()));
         List<ApplyBuyBomVo> applyBuyBomList = BeanUtil.copyToList(list, ApplyBuyBomVo.class);
 
         // 赋值bom规格
@@ -125,6 +128,20 @@ public class ApplyBuyServiceImpl extends ServiceImpl<ApplyBuyMapper, ApplyBuy> i
         });
 
         // TODO 库存,在途数量,近30天消耗量,近30天入库量,安全库存 未赋值
+        // 赋值到货数量和在途数量
+        if (dto.getPurchaseId() != null) {
+            Map<Long, PurchaseBom> purchaseBomMap = purchaseBomService.mapKEntity(PurchaseBom::getBomSpecId, q -> q
+                    .eq(PurchaseBom::getPurchaseId, dto.getPurchaseId()));
+            applyBuyBomList.forEach(item -> {
+                PurchaseBom purchaseBom = purchaseBomMap.get(item.getBomSpecId());
+                if (purchaseBom != null) {
+                    item.setInTransitQuantity(purchaseBom.getPurchaseQuantity()
+                            .subtract(purchaseBom.getArrivalQuantity())
+                            .add(purchaseBom.getReturnQuantity()));
+                    item.setArrivalQuantity(purchaseBom.getArrivalQuantity());
+                }
+            });
+        }
 
         // 赋值返回值
         ApplyBuyVo result = BeanUtil.toBean(ApplyBuy, ApplyBuyVo.class);
@@ -229,7 +246,8 @@ public class ApplyBuyServiceImpl extends ServiceImpl<ApplyBuyMapper, ApplyBuy> i
             BigDecimal beforeLastMonth00Quantity = orderService.getOrderBomSpecOutStorageQuantity(bomSpecId, beforeLastMonthBeginDate, beforeLastMonthEndDate);
             List<Inventory> inventoryList = inventoryService.list(q -> q
                     .eq(Inventory::getBomSpecId, bomSpecId)
-                    .eq(Inventory::getDepartmentId, DepartmentConstant.SD_SPORTS));
+                    .eq(Inventory::getDepartmentId, DepartmentConstant.SD_SPORTS)
+                    .in(Inventory::getWarehouseId, WarehouseConstant.SEMI_FINISHED_PRODUCT, WarehouseConstant.PACKAGING_MATERIAL));
             // 当前库存数
             BigDecimal inventoryQuantity = ObjectUtil.isEmpty(inventoryList) ? BigDecimal.ZERO : StreamUtil.bigDecimalAdd(inventoryList, Inventory::getQuantity);
             // 在途数量

+ 17 - 13
sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageBomServiceImpl.java

@@ -137,19 +137,23 @@ public class InOutStorageBomServiceImpl extends ServiceImpl<InOutStorageBomMappe
         Map<Long, String> map = inOutStorageErpExportVoList.stream()
                 .collect(Collectors.toMap(InOutStorageErpExportVo::getId, InOutStorageErpExportVo::getCode));
         Map<String, Integer> serialNumberMap = new HashMap<>();
-        List<InOutStorageBomErpExportVo> inOutStorageBomErpExportVoList = list.stream().map(item -> {
-            InOutStorageBomErpExportVo inOutStorageBomErpExportVo = new InOutStorageBomErpExportVo();
-            inOutStorageBomErpExportVo.setCode(map.get(item.getInOutStorageId()));
-            inOutStorageBomErpExportVo.setBomSpecCode(item.getBomSpecCode());
-            inOutStorageBomErpExportVo.setQuantity(item.getQuantity().toPlainString());
-            inOutStorageBomErpExportVo.setWarehouseCode(item.getWarehouseCode());
-            inOutStorageBomErpExportVo.setUnit("PCS");
-            inOutStorageBomErpExportVo.setPieces("0");
-            inOutStorageBomErpExportVo.setSourceRtk("OTHER");
-            inOutStorageBomErpExportVo.setUnitCost("0");
-            inOutStorageBomErpExportVo.setCostAmt("0");
-            return inOutStorageBomErpExportVo;
-        })
+        List<InOutStorageBomErpExportVo> inOutStorageBomErpExportVoList = list.stream()
+                .map(item -> {
+                    InOutStorageBomErpExportVo inOutStorageBomErpExportVo = new InOutStorageBomErpExportVo();
+                    inOutStorageBomErpExportVo.setCode(map.get(item.getInOutStorageId()));
+                    inOutStorageBomErpExportVo.setBomSpecCode(item.getBomSpecCode());
+                    inOutStorageBomErpExportVo.setQuantity(item.getQuantity().toPlainString());
+                    inOutStorageBomErpExportVo.setWarehouseCode(item.getWarehouseCode());
+                    inOutStorageBomErpExportVo.setUnit("PCS");
+                    inOutStorageBomErpExportVo.setPieces("0");
+                    inOutStorageBomErpExportVo.setSourceRtk("OTHER");
+                    if (item.getUnitPrice() == null) {
+                        item.setUnitPrice(BigDecimal.ZERO);
+                    }
+                    inOutStorageBomErpExportVo.setUnitCost(item.getUnitPrice().toPlainString());
+                    inOutStorageBomErpExportVo.setCostAmt(item.getUnitPrice().multiply(item.getQuantity()).toPlainString());
+                    return inOutStorageBomErpExportVo;
+                })
                 .sorted(comparing(InOutStorageBomErpExportVo::getCode))
                 .peek(item -> {
                     Integer serialNumber = serialNumberMap.get(item.getCode());

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java

@@ -663,7 +663,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
         wrapper.like("bs", BomSpec::getColour, dto.getBomSpecColour());
         wrapper.like("bs", BomSpec::getLength, dto.getBomSpecLength());
         wrapper.like("bs", BomSpec::getWidth, dto.getBomSpecWidth());
-        wrapper.notIn("bs", BomSpec::getCode, Arrays.asList("40904003", "409001"));
+        wrapper.notIn("bs", BomSpec::getCode, Arrays.asList("40904003", "409001", "40101010"));
         wrapper.eq("i", Inventory::getWarehouseId, dto.getWarehouseId());
         wrapper.eq("i", Inventory::getDepartmentId, dto.getDepartmentId());
         wrapper.eq("i", InventoryBackup::getBackupDate, dto.getBackupDate());

+ 1 - 0
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseServiceImpl.java

@@ -61,6 +61,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
         IWrapper<Purchase> wrapper = getWrapper();
         wrapper.like("p", Purchase::getCode, dto.getCode());
         wrapper.eq("p", Purchase::getFlowStatus, dto.getFlowStatus());
+        wrapper.eq("p", Purchase::getStatus, dto.getStatus());
         wrapper.like("s", Supplier::getName, dto.getSupplierName());
         wrapper.orderByDesc("p", Purchase::getId);
 

+ 10 - 0
sd-business/src/main/java/com/sd/business/service/sku/SkuSpecService.java

@@ -2,6 +2,8 @@ package com.sd.business.service.sku;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
+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.sku.bo.SkuSpecBo;
 import com.sd.business.entity.sku.dto.SkuSpecDto;
@@ -11,6 +13,7 @@ import com.sd.business.entity.sku.vo.SkuSpecVo;
 
 import java.math.BigDecimal;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 
@@ -68,4 +71,11 @@ public interface SkuSpecService extends BaseService<SkuSpec> {
      * 根据sku规格id获取sku详情
      */
     Map<Long, SkuSpecBo> getSkuSpecBoByIdList(Collection<Long> skuSpecIdList);
+
+    /**
+     * 获取sku报价板数据
+     * @param dto
+     * @return
+     */
+    List<SkuSpecQuotationVo> getSkuSpecQuotationList(SkuSpecQuotationDto dto);
 }

+ 160 - 4
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java

@@ -2,30 +2,43 @@ package com.sd.business.service.sku.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+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.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.board.dto.SkuSpecQuotationDto;
+import com.sd.business.entity.board.vo.SkuSpecQuotationVo;
 import com.sd.business.entity.bom.bo.BomSpecBo;
+import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.inventory.po.Inventory;
+import com.sd.business.entity.price.po.PriceBillingStandard;
+import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.bo.SkuSpecBo;
 import com.sd.business.entity.sku.dto.SkuSpecDto;
 import com.sd.business.entity.sku.dto.SkuSpecSelectDto;
+import com.sd.business.entity.sku.po.Sku;
 import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.sku.po.SkuSpecLink;
 import com.sd.business.entity.sku.vo.SkuSpecVo;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.sku.SkuSpecMapper;
+import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.inventory.InventoryService;
+import com.sd.business.service.price.PriceBillingStandardDetailService;
+import com.sd.business.service.price.PriceBillingStandardService;
+import com.sd.business.service.sku.SkuService;
+import com.sd.business.service.sku.SkuSpecLinkService;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.framework.util.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -44,6 +57,21 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
     @Autowired
     private InventoryService inventoryService;
 
+    @Autowired
+    private DepartmentService departmentService;
+
+    @Autowired
+    private SkuService skuService;
+
+    @Autowired
+    private SkuSpecLinkService skuSpecLinkService;
+
+    @Autowired
+    private PriceBillingStandardService priceBillingStandardService;
+
+    @Autowired
+    private PriceBillingStandardDetailService priceBillingStandardDetailService;
+
     @Override
     public Page<SkuSpecVo> getPage(SkuSpecSelectDto dto) {
         IWrapper<SkuSpec> wrapper = getWrapper();
@@ -145,4 +173,132 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
 
     }
 
+    @Override
+    public List<SkuSpecQuotationVo> getSkuSpecQuotationList(SkuSpecQuotationDto dto) {
+        Long deptId = SecurityUtils.getDeptId();
+        Department department = departmentService.getById(deptId);
+        Assert.notNull(department, "未知事业部");
+        String priceBillingStandardIdStr = department.getPriceBillingStandardId();
+        Assert.notBlank(priceBillingStandardIdStr, "事业部未绑定加工计费标准");
+
+        // 查询事业部绑定的品牌
+        List<String> brandList = Arrays.asList(department.getWlnBrand().split(","));
+        if (ObjectUtil.isEmpty(brandList)) {
+            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()));
+
+        if (skuSpecList.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        // 查询加工计费标准数据
+        List<String> priceBillingStandardIdList = Arrays.stream(priceBillingStandardIdStr.split(",")).collect(Collectors.toList());
+        List<PriceBillingStandard> priceBillingStandardList = priceBillingStandardService.listByIds(priceBillingStandardIdList);
+        List<Long> priceBillingStandardIds = priceBillingStandardList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+
+        Map<Long, List<PriceBillingStandardDetail>> priceDetailMap = priceBillingStandardDetailService.mapKGroup(
+                PriceBillingStandardDetail::getPriceBillingStandardId,
+                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::getDepartmentId, deptId)
+                        .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()));
+        Map<Long, BomSpecBo> bomSpecBoMap = this.getBomSpecBoByIdList(bomSpecIds);
+
+        List<SkuSpecQuotationVo> list = new ArrayList<>();
+
+        for (SkuSpec skuSpec : skuSpecList) {
+            Sku sku = skuMap.get(skuSpec.getSkuId());
+            BomSpecBo bomSpecBo = bomSpecBoMap.get(skuSpec.getBomSpecId());
+
+            // 赋值
+            SkuSpecQuotationVo vo = new SkuSpecQuotationVo();
+            vo.setBrand(sku.getBrand());
+            vo.setSkuSpecCode(skuSpec.getCode());
+            vo.setSkuSpecName(skuSpec.getName());
+            vo.setBomSpecUnitPrice(bomSpecBo.getInternalSellingPrice());
+            vo.setPackagingMaterialCost(BigDecimal.ZERO);
+            vo.setLineProcessingFee(BigDecimal.ZERO);
+            vo.setLogoProcessingFee(BigDecimal.ZERO);
+            vo.setIssueFee(BigDecimal.ZERO);
+            vo.setDeliveryMaterialsFee(BigDecimal.ZERO);
+            vo.setPackingLabor(BigDecimal.ZERO);
+            vo.setManagementFee(BigDecimal.ZERO);
+
+            // 获取包材费
+            List<SkuSpecLink> skuSpecLinkList = linkMap.get(skuSpec.getId());
+            if (ObjectUtil.isNotEmpty(skuSpecLinkList)) {
+                BigDecimal packagingMaterialCost = skuSpecLinkList.stream().map(item -> {
+                    BomSpecBo skuSpecLinkBomSpec = bomSpecBoMap.get(item.getBomSpecId());
+                    if (skuSpecLinkBomSpec == null) {
+                        return BigDecimal.ZERO;
+                    }
+                    return skuSpecLinkBomSpec.getInternalSellingPrice().multiply(item.getQuantity());
+                }).reduce(BigDecimal.ZERO, BigDecimal::add);
+                vo.setPackagingMaterialCost(packagingMaterialCost);
+            }
+
+            // 获取加工计费标准
+            List<PriceBillingStandardDetail> priceBillingStandardDetailList = new ArrayList<>();
+            if (StrUtil.isNotBlank(bomSpecBo.getBomSpecies())) {
+                priceBillingStandardList.stream()
+                        .filter(item -> Objects.equals(item.getSpecies(), bomSpecBo.getBomSpecies()))
+                        .findAny()
+                        .ifPresent(item -> priceBillingStandardDetailList.addAll(priceDetailMap.getOrDefault(item.getId(), Collections.emptyList())));
+            }
+
+            for (PriceBillingStandardDetail priceBillingStandardDetail : priceBillingStandardDetailList) {
+                String chargeItem = priceBillingStandardDetail.getChargeItem();
+                BigDecimal chargePrice = ObjectUtil.defaultIfNull(priceBillingStandardDetail.getChargePrice(), BigDecimal.ZERO);
+                switch (chargeItem) {
+                    case "10":
+                        vo.setLineProcessingFee(chargePrice);
+                        break;
+                    case "20":
+                        vo.setLogoProcessingFee(chargePrice);
+                        break;
+                    case "40":
+                        vo.setPackingLabor(chargePrice);
+                        break;
+                    case "50":
+                        vo.setIssueFee(chargePrice);
+                        break;
+                    case "60":
+                        vo.setDeliveryMaterialsFee(chargePrice);
+                        break;
+                    case "70":
+                        vo.setManagementFee(chargePrice);
+                        break;
+                }
+            }
+
+            // 计算Sku单价
+            vo.setSkuSpecUnitPrice(
+                    vo.getBomSpecUnitPrice()
+                            .add(vo.getPackagingMaterialCost())
+                            .add(vo.getIssueFee())
+                            .add(vo.getPackingLabor())
+                            .add(vo.getDeliveryMaterialsFee())
+                            .add(vo.getManagementFee()));
+            vo.setSkuSpecUnitPriceLogo(vo.getSkuSpecUnitPrice().add(vo.getLogoProcessingFee()));
+            vo.setSkuSpecUnitPriceLine(vo.getSkuSpecUnitPrice().add(vo.getLineProcessingFee()));
+
+            list.add(vo);
+        }
+
+        return list;
+    }
+
 }

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

@@ -7,6 +7,7 @@
                iosb.in_out_storage_id,
                iosb.bom_spec_id,
                iosb.quantity,
+               iosb.unit_price,
                iosb.balance_inventory_quantity,
                ios.create_time,
                w.type  warehouseType,

+ 1 - 0
sd-business/src/main/resources/mapper/order/OrderSkuMapper.xml

@@ -28,6 +28,7 @@
                oi.settlement_status orderSettlementStatus,
                oi.total_amount      orderTotalAmount,
                oi.wln_create_time,
+               oi.outer_box_packing_fee,
                ss.code              skuSpecCode,
                ss.name              skuSpecName,
                bs.name              bomSpecName,

+ 2 - 2
sd-business/src/main/resources/mapper/purchase/PurchaseBomMapper.xml

@@ -95,7 +95,7 @@
 
     <select id="getPurchaseBomInTransitSum" resultType="java.math.BigDecimal">
         select
-            ifnull(sum(pb.purchase_quantity - pb.arrival_quantity), 0)
+            ifnull(sum(pb.purchase_quantity - pb.arrival_quantity + pb.return_quantity), 0)
         from
             purchase_bom pb
             left join purchase p on pb.purchase_id = p.id
@@ -123,7 +123,7 @@
             bs.height,
             pb.purchase_quantity,
             pb.arrival_quantity,
-            (pb.purchase_quantity - pb.arrival_quantity) inTransitQuantity,
+            (pb.purchase_quantity - pb.arrival_quantity + pb.return_quantity) inTransitQuantity,
             pb.return_quantity
         from
             purchase_bom pb