Browse Source

在途物料新增周转率字段

fgd 1 year ago
parent
commit
5bd3b99389

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

@@ -82,4 +82,23 @@ public class PurchaseInTransitBomVo {
     @ColumnWidth(20)
     @ColumnWidth(20)
     @ExcelProperty(value = "交付日期", index = 7)
     @ExcelProperty(value = "交付日期", index = 7)
     private Date deliveryDate;
     private Date deliveryDate;
+
+    /**
+     * 周转率
+     */
+    @ColumnWidth(20)
+    @ExcelProperty(value = "周转率", index = 8)
+    private BigDecimal turnoverRate;
+
+    /**
+     * 90天销售量
+     */
+    @ExcelProperty(value = "90天销售量", index = 9)
+    private BigDecimal salesQuantity;
+
+    /**
+     * 库存数量
+     */
+    @ExcelProperty(value = "库存数量", index = 10)
+    private BigDecimal inventoryQuantity;
 }
 }

+ 19 - 5
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseBomServiceImpl.java

@@ -13,6 +13,7 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.bo.BomSpecOrderConsumptionBo;
 import com.sd.business.entity.bom.bo.BomSpecOrderConsumptionBo;
 import com.sd.business.entity.bom.dto.BomSpecSelectDto;
 import com.sd.business.entity.bom.dto.BomSpecSelectDto;
 import com.sd.business.entity.bom.po.Bom;
 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.po.BomSpec;
 import com.sd.business.entity.bom.vo.BomSpecVo;
 import com.sd.business.entity.bom.vo.BomSpecVo;
 import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.department.constant.DepartmentConstant;
@@ -138,15 +139,28 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
     public Page<PurchaseInTransitBomVo> getPurchaseInTransitBomPage(PurchaseInTransitBomSelectDto dto) {
     public Page<PurchaseInTransitBomVo> getPurchaseInTransitBomPage(PurchaseInTransitBomSelectDto dto) {
         IWrapper<PurchaseInTransitBomVo> wrapper = IWrapper.getWrapper();
         IWrapper<PurchaseInTransitBomVo> wrapper = IWrapper.getWrapper();
         wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE.getKey());
         wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE.getKey());
+        wrapper.eq("bc", BomClassify::getParentId, 1);
         wrapper.like("p", Purchase::getCode, dto.getPurchaseCode());
         wrapper.like("p", Purchase::getCode, dto.getPurchaseCode());
         wrapper.like("bs", BomSpec::getCode, dto.getBomSpecCode());
         wrapper.like("bs", BomSpec::getCode, dto.getBomSpecCode());
         wrapper.like("bs", BomSpec::getName, dto.getBomSpecName());
         wrapper.like("bs", BomSpec::getName, dto.getBomSpecName());
         wrapper.apply("(pb.purchase_quantity + pb.return_quantity) > pb.arrival_quantity");
         wrapper.apply("(pb.purchase_quantity + pb.return_quantity) > pb.arrival_quantity");
-        wrapper.orderByAsc("bs", BomSpec::getCode)
-                .orderByDesc("bs", BomSpec::getLength)
-                .orderByAsc("bs", BomSpec::getWidth)
-                .orderByDesc("bs", BomSpec::getHeight);
-        return this.baseMapper.getPurchaseInTransitBomPage(dto.getPage(), wrapper);
+        wrapper.orderByAsc("turnoverRate");
+        Page<PurchaseInTransitBomVo> page = this.baseMapper.getPurchaseInTransitBomPage(dto.getPage(), wrapper);
+        List<PurchaseInTransitBomVo> records = page.getRecords();
+        List<Long> bomSpecIds = records.stream().map(PurchaseInTransitBomVo::getBomSpecId).collect(Collectors.toList());
+        Map<Long, Inventory> inventoryMap = inventoryService.mapKEntity(Inventory::getBomSpecId, q -> q.in(Inventory::getBomSpecId, bomSpecIds).eq(Inventory::getWarehouseId, WarehouseConstant.SEMI_FINISHED_PRODUCT)
+                .eq(Inventory::getDepartmentId, DepartmentConstant.SD_SPORTS));
+        for (PurchaseInTransitBomVo record : records) {
+            Inventory inventory = inventoryMap.get(record.getBomSpecId());
+            if (inventory == null) {
+                record.setInventoryQuantity(BigDecimal.ZERO);
+                continue;
+            }
+            BigDecimal lockQuantity = inventory.getLockQuantity() == null ? BigDecimal.ZERO : inventory.getLockQuantity();
+            record.setInventoryQuantity(inventory.getQuantity().add(lockQuantity));
+        }
+
+        return page;
     }
     }
 
 
     @Override
     @Override

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

@@ -85,12 +85,35 @@
             s.name supplierName,
             s.name supplierName,
             pb.purchase_quantity,
             pb.purchase_quantity,
             (pb.purchase_quantity - pb.arrival_quantity) inTransitQuantity,
             (pb.purchase_quantity - pb.arrival_quantity) inTransitQuantity,
-            p.delivery_date
+            p.delivery_date,
+            ifnull(btr.turnover_rate, 0) turnoverRate,
+            ifnull(btr.quantity, 0) salesQuantity
         from
         from
             purchase_bom pb
             purchase_bom pb
-            LEFT JOIN purchase p on pb.purchase_id = p.id
-            LEFT JOIN bom_spec bs on pb.bom_spec_id = bs.id
-            LEFT JOIN supplier s on p.supplier_id = s.id
+            left join purchase p on pb.purchase_id = p.id
+            left join bom_spec bs on pb.bom_spec_id = bs.id
+            left join bom b on b.id = bs.bom_id
+            left join bom_classify bc on bc.id = b.bom_classify_id
+            left join supplier s on p.supplier_id = s.id
+            left join (
+                select
+                    oq.bom_spec_id,
+                    90 / (90 * 0.5 * (sum(ifnull(ib.quantity, 0) + ifnull(ib.lock_quantity, 0))) / oq.quantity) turnover_rate,
+                    oq.quantity
+                from (
+                     select
+                         osss.bom_spec_id,
+                         sum(osss.quantity) quantity
+                     FROM
+                         order_sales_shipment_statistics osss
+                     where total_date >= date(date_sub(now(), INTERVAL 91 day))
+                     group by osss.bom_spec_id
+                ) oq
+                left join inventory_backup ib on oq.bom_spec_id = ib.bom_spec_id
+                    and backup_date in (date(date_sub(now(), INTERVAL 91 day)), date(date_sub(now(), INTERVAL 1 day)))
+                    and department_id = 0 and warehouse_id = 1684037244354052098
+                group by oq.bom_spec_id
+            ) btr on bs.id = btr.bom_spec_id
             ${ew.customSqlSegment}
             ${ew.customSqlSegment}
     </select>
     </select>