瀏覽代碼

周转率优化

fgd 1 年之前
父節點
當前提交
27b26d9a87

+ 16 - 2
sd-business/src/main/java/com/sd/business/controller/board/TurnoverRateBoardController.java

@@ -1,12 +1,16 @@
 package com.sd.business.controller.board;
 
+import com.sd.business.entity.board.dto.TurnoverRateBoardSelectDto;
 import com.sd.business.entity.board.vo.TurnoverRateStatisticsVo;
 import com.sd.business.service.order.OrderSalesShipmentStatisticsService;
+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;
 
 /**
@@ -28,8 +32,18 @@ public class TurnoverRateBoardController {
      * @return
      */
     @PostMapping("/getTurnoverRateStatisticsList")
-    public List<TurnoverRateStatisticsVo> getTurnoverRateStatisticsList() {
-        return orderSalesShipmentStatisticsService.getTurnoverRateStatisticsList();
+    public List<TurnoverRateStatisticsVo> getTurnoverRateStatisticsList(@RequestBody TurnoverRateBoardSelectDto dto) {
+        return orderSalesShipmentStatisticsService.getTurnoverRateStatisticsList(dto);
+    }
+
+    /**
+     * 周转率导出
+     * @return
+     */
+    @PostMapping("/exportExcel")
+    public void exportExcel(HttpServletResponse response, @RequestBody TurnoverRateBoardSelectDto dto) {
+        List<TurnoverRateStatisticsVo> list = orderSalesShipmentStatisticsService.getTurnoverRateStatisticsList(dto);
+        ExcelUtil.export(response,"库存周转率", "库存周转率数据", list, TurnoverRateStatisticsVo.class);
     }
 
 }

+ 32 - 0
sd-business/src/main/java/com/sd/business/entity/board/dto/TurnoverRateBoardSelectDto.java

@@ -0,0 +1,32 @@
+package com.sd.business.entity.board.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 周转率查询入参实体
+ *
+ * @author
+ * @since 2023-10-21
+ */
+@Getter
+@Setter
+public class TurnoverRateBoardSelectDto {
+
+    /**
+     * bom分类 1-裸垫,2-裸砖
+     */
+    private String bomClassify;
+
+    /**
+     * 开始时间
+     */
+    private Date beginDate;
+
+    /**
+     * 结束时间
+     */
+    private Date endDate;
+}

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

@@ -1,5 +1,7 @@
 package com.sd.business.entity.board.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -13,20 +15,29 @@ import java.math.BigDecimal;
  */
 @Getter
 @Setter
+@ExcelIgnoreUnannotated
 public class TurnoverRateStatisticsVo {
 
     /**
      * 品号
      */
+    @ExcelProperty(value = "品号", index = 0)
     private String bomSpecCode;
 
     /**
      * 品名
      */
+    @ExcelProperty(value = "品名", index = 1)
     private String bomSpecName;
 
     /**
      * 周转率
      */
+    @ExcelProperty(value = "周转率", index = 2)
     private BigDecimal turnoverRate;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal quantity;
 }

+ 4 - 5
sd-business/src/main/java/com/sd/business/service/order/OrderSalesShipmentStatisticsService.java

@@ -1,11 +1,11 @@
 package com.sd.business.service.order;
 
 import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.board.dto.TurnoverRateBoardSelectDto;
 import com.sd.business.entity.board.vo.TurnoverRateStatisticsVo;
 import com.sd.business.entity.order.po.OrderSalesShipmentStatistics;
 import com.sd.business.entity.order.vo.OrderSalesShipmentStatisticsVo;
 
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -20,18 +20,17 @@ public interface OrderSalesShipmentStatisticsService extends BaseService<OrderSa
 
     /**
      * 根据时间段获取销售出库数量统计
-     * @param beginDate
-     * @param endDate
+     * @param dto
      * @return
      */
-    List<OrderSalesShipmentStatisticsVo> getSalesShipmentStatisticsByDate(Date beginDate, Date endDate);
+    List<OrderSalesShipmentStatisticsVo> getSalesShipmentStatisticsByDate(TurnoverRateBoardSelectDto dto);
 
     /**
      * 获取周转率数据列表
      *
      * @return
      */
-    List<TurnoverRateStatisticsVo> getTurnoverRateStatisticsList();
+    List<TurnoverRateStatisticsVo> getTurnoverRateStatisticsList(TurnoverRateBoardSelectDto dto);
 
     /**
      * 销售出库统计任务

+ 27 - 9
sd-business/src/main/java/com/sd/business/service/order/impl/OrderSalesShipmentStatisticsServiceImpl.java

@@ -5,7 +5,10 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.board.dto.TurnoverRateBoardSelectDto;
 import com.sd.business.entity.board.vo.TurnoverRateStatisticsVo;
+import com.sd.business.entity.bom.po.BomClassify;
+import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.inventory.po.InventoryBackup;
 import com.sd.business.entity.order.enums.OrderClassifyEnum;
@@ -28,6 +31,8 @@ import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static java.util.Comparator.comparing;
+
 /**
  * <p>
  * 订单销售出库统计 服务实现类
@@ -49,21 +54,29 @@ public class OrderSalesShipmentStatisticsServiceImpl extends ServiceImpl<OrderSa
     private InventoryBackupService inventoryBackupService;
 
     @Override
-    public List<OrderSalesShipmentStatisticsVo> getSalesShipmentStatisticsByDate(Date beginDate, Date endDate) {
+    public List<OrderSalesShipmentStatisticsVo> getSalesShipmentStatisticsByDate(TurnoverRateBoardSelectDto dto) {
         IWrapper<OrderSalesShipmentStatistics> wrapper = getWrapper();
         wrapper.orderByDesc("osss", OrderSalesShipmentStatistics::getId);
-        wrapper.between("osss", OrderSalesShipmentStatistics::getTotalDate, beginDate, endDate);
+        wrapper.between("osss", OrderSalesShipmentStatistics::getTotalDate, dto.getBeginDate(), dto.getEndDate());
+        if ("1".equals(dto.getBomClassify())) {
+            wrapper.in("bc", BomClassify::getCode, Arrays.asList("201.G","203.G"));
+        } else {
+            wrapper.eq("bc", BomClassify::getCode,"202.G");
+        }
+        wrapper.ne("bs", BomSpec::getCode, "1010000007");
         wrapper.groupBy("osss.bom_spec_id");
         return this.baseMapper.getSalesShipmentStatisticsList(wrapper);
     }
 
     @Override
-    public List<TurnoverRateStatisticsVo> getTurnoverRateStatisticsList() {
+    public List<TurnoverRateStatisticsVo> getTurnoverRateStatisticsList(TurnoverRateBoardSelectDto dto) {
         // 查询90天的周转率
         Date date = new Date();
         Date beginDate = DateUtil.beginOfDay(DateUtil.offsetDay(date, -90));
         Date endDate = DateUtil.beginOfDay(DateUtil.offsetDay(date, -1));
-        List<OrderSalesShipmentStatisticsVo> statisticsVoList = this.getSalesShipmentStatisticsByDate(beginDate, date);
+        dto.setBeginDate(beginDate);
+        dto.setEndDate(endDate);
+        List<OrderSalesShipmentStatisticsVo> statisticsVoList = this.getSalesShipmentStatisticsByDate(dto);
         if (ObjectUtil.isEmpty(statisticsVoList)) {
             return Collections.emptyList();
         }
@@ -114,12 +127,18 @@ public class OrderSalesShipmentStatisticsServiceImpl extends ServiceImpl<OrderSa
                                         .divide(item.getQuantity(), 4, RoundingMode.HALF_UP),
                                 4, RoundingMode.HALF_UP);
             }
+            if (ObjectUtil.equals(endQuantity, BigDecimal.ZERO) && ObjectUtil.equals(turnoverRate, BigDecimal.ZERO)) {
+                return null;
+            }
             TurnoverRateStatisticsVo vo = new TurnoverRateStatisticsVo();
             vo.setBomSpecCode(item.getBomSpecCode());
             vo.setBomSpecName(item.getBomSpecName());
             vo.setTurnoverRate(turnoverRate);
+            vo.setQuantity(endQuantity);
             return vo;
-        }).collect(Collectors.toList());
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+        // 按照周转率升序
+        list.sort(comparing(TurnoverRateStatisticsVo::getTurnoverRate));
         return list;
     }
 
@@ -130,15 +149,14 @@ public class OrderSalesShipmentStatisticsServiceImpl extends ServiceImpl<OrderSa
         List<OrderInfo> list = orderService.list(q -> q
                 .eq(OrderInfo::getStatus, OrderStatusEnum.COMPLETION_PRODUCTION.getKey())
                 .ne(OrderInfo::getClassify, OrderClassifyEnum.OUTSOURCE_ORDER.getKey())
-                .likeLeft(OrderInfo::getShippingTime, date)
+                .likeRight(OrderInfo::getShippingTime, date)
                 .select(BaseIdPo::getId));
         if (list.isEmpty()) {
             return;
         }
         List<Long> orderIds = list.stream().map(BaseIdPo::getId).collect(Collectors.toList());
-        Map<Long, BigDecimal> map = orderSkuService.mapKV(OrderSku::getBomSpecId,
-                OrderSku::getQuantity,
-                q -> q.in(OrderSku::getOrderId, orderIds));
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIds));
+        Map<Long, BigDecimal> map = orderSkuList.stream().collect(Collectors.toMap(OrderSku::getBomSpecId, OrderSku::getQuantity, BigDecimal::add));
         List<OrderSalesShipmentStatistics> statisticsDtoList = map.keySet().stream().map(item -> {
             OrderSalesShipmentStatistics dto = new OrderSalesShipmentStatistics();
             dto.setTotalDate(yesterday);

+ 2 - 0
sd-business/src/main/resources/mapper/order/OrderSalesShipmentStatisticsMapper.xml

@@ -11,6 +11,8 @@
         from
             order_sales_shipment_statistics osss
             left join bom_spec bs on osss.bom_spec_id = bs.id
+            left join bom b on bs.bom_id = b.id
+            left join bom_classify bc on b.bom_classify_id = bc.id
         ${ew.customSqlSegment}
     </select>
 </mapper>