Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

24282 před 1 rokem
rodič
revize
7eadc3cbb8

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

@@ -98,4 +98,9 @@ public class PurchaseBomBoardVo {
      * 下一批到货天数
      */
     private Integer nextDeliveryDays;
+
+    /**
+     * 周转率
+     */
+    private BigDecimal turnoverRate;
 }

+ 7 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/vo/PurchaseInTransitBomVo.java

@@ -1,5 +1,6 @@
 package com.sd.business.entity.purchase.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import lombok.Getter;
@@ -10,9 +11,15 @@ import java.util.Date;
 
 @Getter
 @Setter
+@ExcelIgnoreUnannotated
 public class PurchaseInTransitBomVo {
 
     /**
+     * bom规格 id
+     */
+    private Long bomSpecId;
+
+    /**
      * 采购id
      */
     private Long purchaseId;

+ 1 - 3
sd-business/src/main/java/com/sd/business/mapper/purchase/PurchaseBomMapper.java

@@ -8,10 +8,8 @@ import com.sd.business.entity.purchase.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
-import java.util.Date;
 import java.util.List;
 
-
 /**
  * <p>
  * 采购合同bom Mapper 接口
@@ -59,7 +57,7 @@ public interface PurchaseBomMapper extends BaseMapper<PurchaseBom> {
      * @param wrapper
      * @return
      */
-    Date getPurchaseBomDeliveryDate(@Param("ew") IWrapper<PurchaseBom> wrapper);
+    List<PurchaseInTransitBomVo> getPurchaseBomDeliveryDate(@Param("ew") IWrapper<PurchaseBom> wrapper);
 
     /**
      * 采购合同 bom分页

+ 37 - 13
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseBomServiceImpl.java

@@ -7,11 +7,13 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.dto.BomSpecSelectDto;
 import com.sd.business.entity.bom.po.Bom;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.bom.vo.BomSpecVo;
+import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.inventory.po.Inventory;
 import com.sd.business.entity.purchase.dto.PurchaseBoardSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseBomDetailsSelectDto;
@@ -21,11 +23,13 @@ import com.sd.business.entity.purchase.enums.PurchaseStatusEnum;
 import com.sd.business.entity.purchase.po.Purchase;
 import com.sd.business.entity.purchase.po.PurchaseBom;
 import com.sd.business.entity.purchase.vo.*;
+import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.purchase.PurchaseBomMapper;
 import com.sd.business.service.bom.BomClassifyService;
 import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.in.InOutStorageService;
 import com.sd.business.service.inventory.InventoryService;
+import com.sd.business.service.order.OrderSalesShipmentStatisticsService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.purchase.PurchaseBomService;
 import com.sd.framework.util.Assert;
@@ -35,10 +39,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -68,6 +69,9 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
     @Autowired
     private InventoryService inventoryService;
 
+    @Autowired
+    private OrderSalesShipmentStatisticsService orderSalesShipmentStatisticsService;
+
     @Override
     public Page<PurchaseBomSelectVo> getPage(PurchaseBomSelectDto dto) {
         Assert.notEmpty(dto.getPurchaseId(), "采购合同id不能为空");
@@ -155,12 +159,38 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
         Page<PurchaseBomBoardVo> page = new Page<>();
         page.setSize(bomSpecVoPage.getSize());
         page.setTotal(bomSpecVoPage.getTotal());
+        if (ObjectUtil.isEmpty(records)) {
+            return page;
+        }
         Date date = new Date();
         List<PurchaseBomBoardVo> list = new ArrayList<>();
+
+        List<Long> bomSpecIds = records.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        // 查询库存数据
+        Map<Long, List<Inventory>> inventorMap = inventoryService.mapKGroup(
+                Inventory::getBomSpecId,
+                q -> q.in(Inventory::getBomSpecId, bomSpecIds)
+                        .eq(Inventory::getDepartmentId, DepartmentConstant.SD_SPORTS)
+                        .in(Inventory::getWarehouseId,
+                                Arrays.asList(WarehouseConstant.SEMI_FINISHED_PRODUCT, WarehouseConstant.PACKAGING_MATERIAL)));
+
+        // 查询周转率数据
+        Map<Long, BigDecimal> turnoverRateMap = orderSalesShipmentStatisticsService.getTurnoverRateMapByBomSpecIds(bomSpecIds);
+
+        // 获取bom的下一批到货天数
+        IWrapper<PurchaseBom> wrapper = IWrapper.getWrapper();
+        wrapper.in("pb", PurchaseBom::getBomSpecId, bomSpecIds);
+        wrapper.apply("pb.purchase_quantity > pb.arrival_quantity");
+        wrapper.eq("p", Purchase::getStorageStatus, StatusConstant.NO);
+        wrapper.gt("p", Purchase::getDeliveryDate, date);
+        wrapper.groupBy("pb.bom_spec_id");
+        List<PurchaseInTransitBomVo> deliveryDateList = this.baseMapper.getPurchaseBomDeliveryDate(wrapper);
+        Map<Long, Date> deliveryDateMap = deliveryDateList.stream().collect(Collectors.toMap(PurchaseInTransitBomVo::getBomSpecId, PurchaseInTransitBomVo::getDeliveryDate));
+
         for (BomSpecVo record : records) {
             PurchaseBomBoardVo purchaseBomBoard = new PurchaseBomBoardVo();
             Long bomSpecId = record.getId();
-            List<Inventory> inventoryList = inventoryService.list(q -> q.eq(Inventory::getBomSpecId, bomSpecId));
+            List<Inventory> inventoryList = inventorMap.get(bomSpecId);
 
             // 当前库存数
             BigDecimal inventoryQuantity = ObjectUtil.isEmpty(inventoryList) ? BigDecimal.ZERO : StreamUtil.bigDecimalAdd(inventoryList, Inventory::getQuantity);
@@ -196,14 +226,7 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
             purchaseBomBoard.setInTransitSum(this.getPurchaseBomInTransitSum(bomSpecId));
 
             // 获取下一批到货天数
-            IWrapper<PurchaseBom> wrapper = IWrapper.getWrapper();
-            wrapper.eq("pb", PurchaseBom::getBomSpecId, bomSpecId);
-            wrapper.apply("pb.purchase_quantity > pb.arrival_quantity");
-            wrapper.eq("p", Purchase::getStorageStatus, StatusConstant.NO);
-            wrapper.gt("p", Purchase::getDeliveryDate, date);
-            wrapper.orderByAsc("p", Purchase::getDeliveryDate);
-            wrapper.last("limit 1");
-            Date deliveryDate = this.baseMapper.getPurchaseBomDeliveryDate(wrapper);
+            Date deliveryDate = deliveryDateMap.get(bomSpecId);
             long nextDeliveryDays = 0L;
             if (ObjectUtil.isNotEmpty(deliveryDate)) {
                 nextDeliveryDays = DateUtil.between(date, deliveryDate, DateUnit.DAY);
@@ -226,6 +249,7 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
             purchaseBomBoard.setOutStorageQuantitySixtyDays(orderService.getOrderBomSpecOutStorageQuantity(record.getId(), DateUtil.offsetDay(date, -60), date));
             purchaseBomBoard.setOutStorageWeekOnWeekRatio(weekOnWeekRatio);
             purchaseBomBoard.setNextDeliveryDays((int) nextDeliveryDays);
+            purchaseBomBoard.setTurnoverRate(turnoverRateMap.get(bomSpecId));
             list.add(purchaseBomBoard);
         }
         page.setRecords(list);

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

@@ -102,9 +102,10 @@
             ${ew.customSqlSegment}
     </select>
 
-    <select id="getPurchaseBomDeliveryDate" resultType="java.util.Date">
+    <select id="getPurchaseBomDeliveryDate" resultType="com.sd.business.entity.purchase.vo.PurchaseInTransitBomVo">
         select
-            p.delivery_date
+            pb.bom_spec_id,
+            min(p.delivery_date) delivery_date
         from
             purchase_bom pb
             LEFT JOIN purchase p on pb.purchase_id = p.id