Преглед на файлове

修改盘头库存分析返回

wukai преди 2 седмици
родител
ревизия
5383e0e5d8

+ 57 - 78
jjt-biz/src/main/java/com/jjt/inventory/controller/InventoryController.java

@@ -4,14 +4,13 @@ import com.jjt.common.core.controller.BaseController;
 import com.jjt.common.core.domain.R;
 import com.jjt.common.core.redis.RedisCache;
 import com.jjt.common.utils.DateUtils;
+import com.jjt.common.utils.StringUtils;
 import com.jjt.inventory.domain.TwinCalcDayBp;
 import com.jjt.inventory.domain.TwinCalcDayPt;
 import com.jjt.inventory.domain.TwinCalcHourBp;
 import com.jjt.inventory.domain.TwinCalcHourPt;
 import com.jjt.inventory.service.*;
-import com.jjt.inventory.vo.BpVO;
-import com.jjt.inventory.vo.PtVO;
-import com.jjt.inventory.vo.TopVO;
+import com.jjt.inventory.vo.*;
 import com.jjt.utils.MssqlService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -58,10 +57,14 @@ public class InventoryController extends BaseController {
     @ResponseBody
     public R<PtVO> pt() {
         PtVO ptVO = new PtVO();
-        //当前库统计
+        //当前库TOP10 统计
         String sql = "SELECT TOP 10 SKU,SKU_DESCRC,LOT01 FROM V_WMS_STOCK WHERE WAREHOUSE_ID='WH03-盘头仓库' AND UOM='个' AND LOT01 IS NOT NULL AND LOT01!='' ORDER BY LOT01";
         List<TopVO> tops = topProcess(sql);
         ptVO.setTops(tops);
+        //当前库存明细
+        sql = "SELECT * FROM V_WMS_STOCK WHERE WAREHOUSE_ID='WH03-盘头仓库' ORDER BY LOT01";
+        List<PtStockDetailVO> detailVOList = detailProcess(sql);
+        Map<String, List<PtStockDetailVO>> detailMap = detailVOList.stream().collect(Collectors.groupingBy(PtStockDetailVO::getSkuDesc));
         //30天统计
         List<TwinCalcDayPt> calcDayList = dayPtService.selectStartDate(LocalDateTime.now().minusHours(7).minusDays(30).toLocalDate());
         calcDayList = calcDayList.stream().sorted(Comparator.comparing(TwinCalcDayPt::getTime)).collect(Collectors.toList());
@@ -94,11 +97,28 @@ public class InventoryController extends BaseController {
             stock.updateMax(pt.getNum());
             stock.updateMin(pt.getNum());
             stock.total(pt.getNum());
+            List<PtStockDetailVO> list = detailMap.getOrDefault(pt.getName(), Collections.emptyList());
+            stock.setCurr(list.size());
+            Map<PtStockVO, List<PtStockDetailVO>> groupedDetailMap = list.stream()
+                    .collect(Collectors.groupingBy(detail ->
+                            new PtStockVO(detail.getSkuClass(), detail.getSku(), detail.getSkuDesc(), detail.getLot13(), detail.getLot15())
+                    ));
+            List<PtStockVO> calcList = new ArrayList<>();
+            groupedDetailMap.forEach((key, value) -> {
+                if ("容器类".equals(key.getSkuClass())) {
+                    stock.setName("(空盘头)" + pt.getName());
+                }
+                key.setDetails(value);
+                key.setNum(value.size());
+                calcList.add(key);
+            });
+            stock.setCalc(calcList);
         });
         long hours = hourPtList.stream().map(TwinCalcHourPt::getHour).distinct().count();
         stats.values().forEach(stock -> stock.calcAvg((int) hours));
 
         ptVO.getStocks().addAll(stats.values());
+        ptVO.getStocks().sort(Comparator.comparing(PtVO.Stock::getCurr).reversed());
 
         return R.ok(ptVO);
     }
@@ -252,80 +272,6 @@ public class InventoryController extends BaseController {
 //                }
 //            }
         });
-//        calcDayList.stream()
-//                .map(day -> {
-//                    BpVO.MonthStock monthStock = new BpVO.MonthStock();
-//                    monthStock.set
-//                    usage.setMax(day.getMaxNum());
-//                    usage.setRate(day.getRate());
-//                    usage.setDate(DateUtils.toLocalDate(day.getTime()));
-//                    Integer hour = Integer.parseInt(day.getData());
-//                    List<TwinCalcHourPt> hourPtList = hourPtService.selectTwinCalcHourPtByHour(day.getTime(), hour);
-//                    hourPtList.stream().filter(item -> item.getNum() > 0).sorted(Comparator.comparing(TwinCalcHourPt::getNum).reversed()).forEach(hourPt -> {
-//                        PtVO.YarnTypeDetail detail = new PtVO.YarnTypeDetail();
-//                        detail.setName(hourPt.getName());
-//                        detail.setNum(hourPt.getNum());
-//                        BigDecimal ratio = new BigDecimal(hourPt.getNum()).divide(new BigDecimal(day.getMaxNum()), 4, RoundingMode.HALF_UP);
-//                        detail.setRatio(ratio);
-//                        usage.getDetails().add(detail);
-//                    });
-//                    return monthStock;
-//                }).forEach(bpVO.getRollMonthStocks()::add);
-        // 模拟近一月库存情况 - 卷数、米数、重量三种类型
-//        for (int i = 0; i < 30; i++) {
-//            // 米数库存
-//            BpVO.MonthStock meterStock = new BpVO.MonthStock();
-//            meterStock.setMax(800 + (int) (Math.random() * 400));
-//            // 800-1200米
-//            meterStock.setMin(300 + (int) (Math.random() * 300));
-//            // 300-600米
-//            meterStock.setAvg(new BigDecimal((meterStock.getMax() + meterStock.getMin()) / 2.0).setScale(2, RoundingMode.HALF_UP));
-//            meterStock.setDate(LocalDate.now().minusDays(29 - i));
-//            bpVO.getMeterMonthStocks().add(meterStock);
-//
-//            // 重量库存
-//            BpVO.MonthStock weightStock = new BpVO.MonthStock();
-//            weightStock.setMax(500 + (int) (Math.random() * 300));
-//            // 500-800公斤
-//            weightStock.setMin(200 + (int) (Math.random() * 200));
-//            // 200-400公斤
-//            weightStock.setAvg(new BigDecimal((weightStock.getMax() + weightStock.getMin()) / 2.0).setScale(2, RoundingMode.HALF_UP));
-//            weightStock.setDate(LocalDate.now().minusDays(29 - i));
-//            bpVO.getWeightMonthStocks().add(weightStock);
-//
-//            // 卷数库存
-//            BpVO.MonthStock rollStock = new BpVO.MonthStock();
-//            rollStock.setMax(150 + (int) (Math.random() * 100));
-//            // 150-250卷
-//            rollStock.setMin(50 + (int) (Math.random() * 80));
-//            // 50-130卷
-//            rollStock.setAvg(new BigDecimal((rollStock.getMax() + rollStock.getMin()) / 2.0).setScale(2, RoundingMode.HALF_UP));
-//            rollStock.setDate(LocalDate.now().minusDays(29 - i));
-//            bpVO.getRollMonthStocks().add(rollStock);
-//            for (BpVO.MonthStock stock : new BpVO.MonthStock[]{meterStock, weightStock, rollStock}) {
-//                int totalNum = 0;
-//                int yarnCount = 3 + (int) (Math.random() * 8);
-//                // 随机3-10个纱种
-//                List<BpVO.YarnTypeDetail> details = new java.util.ArrayList<>();
-//
-//                // 先设置数量并计算总数
-//                for (int j = 1; j <= yarnCount; j++) {
-//                    BpVO.YarnTypeDetail detail = new BpVO.YarnTypeDetail();
-//                    detail.setName("纱种" + j);
-//                    detail.setNum(50 + (int) (Math.random() * 100));
-//                    // 随机50-150的数量
-//                    totalNum += detail.getNum();
-//                    details.add(detail);
-//                }
-//
-//                // 根据数量计算比例
-//                for (BpVO.YarnTypeDetail detail : details) {
-//                    BigDecimal ratio = new BigDecimal(detail.getNum()).divide(new BigDecimal(totalNum), 2, RoundingMode.HALF_UP);
-//                    detail.setRatio(ratio);
-//                    stock.getDetails().add(detail);
-//                }
-//            }
-//        }
 
         //当日统计,按米克重统计
         Map<Integer, BpVO.Stock[]> stats = new HashMap<>(16);
@@ -393,6 +339,39 @@ public class InventoryController extends BaseController {
     }
 
     /**
+     * 盘头库存TOP排名处理
+     *
+     * @return 结果集
+     */
+    private List<PtStockDetailVO> detailProcess(String sql) {
+        List<Map<String, Object>> tops = mssqlService.executeQuery(sql);
+        return tops.stream().map(map -> {
+            PtStockDetailVO vo = new PtStockDetailVO();
+            String sku = (String) map.get("SKU");
+            String skuClass = (String) map.get("SKU_CLASS");
+            String skuDesc = (String) map.get("SKU_DESCRC");
+            String dateStr = (String) map.get("LOT01");
+            String lot12 = (String) map.get("LOT12");
+            String lot13 = (String) map.get("LOT13");
+            String lot15 = (String) map.get("LOT15");
+            String lot17 = (String) map.get("LOT17");
+            vo.setSku(sku);
+            vo.setSkuClass(skuClass);
+            vo.setSkuDesc(skuDesc);
+            if (StringUtils.isNotEmpty(dateStr)) {
+                LocalDate date = LocalDate.parse(dateStr);
+                vo.setDate(date);
+            }
+            vo.setLot12(lot12);
+            vo.setLot13(lot13);
+            vo.setLot15(lot15);
+            vo.setLot17(lot17);
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
+
+    /**
      * 处理库存数据
      *
      * @param stock 库存数据

+ 35 - 0
jjt-biz/src/main/java/com/jjt/inventory/vo/PtStockDetailVO.java

@@ -0,0 +1,35 @@
+package com.jjt.inventory.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * 库存视图
+ *
+ * @author ruoyi
+ * @date 2024-12-30
+ */
+@Data
+@ApiModel(value = "PtStockDetailVO", description = "库存视图")
+public class PtStockDetailVO {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(name = "物料类型")
+    private String skuClass;
+    @ApiModelProperty(name = "物料编码")
+    private String sku;
+    @ApiModelProperty(name = "物料名称")
+    private String skuDesc;
+    @ApiModelProperty("时间")
+    private LocalDate date;
+    @ApiModelProperty(name = "生产人员")
+    private String lot12;
+    @ApiModelProperty(name = "长丝旦数(D)")
+    private String lot13;
+    @ApiModelProperty(name = "整经根数/验布幅宽(cm)")
+    private String lot15;
+    @ApiModelProperty(name = "生产机台")
+    private String lot17;
+}

+ 43 - 0
jjt-biz/src/main/java/com/jjt/inventory/vo/PtStockVO.java

@@ -0,0 +1,43 @@
+package com.jjt.inventory.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 库存视图
+ *
+ * @author ruoyi
+ * @date 2024-12-30
+ */
+@Data
+@NoArgsConstructor
+@ApiModel(value = "PtStockVO", description = "库存视图")
+public class PtStockVO {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(name = "物料类型")
+    private String skuClass;
+    @ApiModelProperty(name = "物料编码")
+    private String sku;
+    @ApiModelProperty(name = "物料名称")
+    private String skuDesc;
+    @ApiModelProperty(name = "长丝旦数(D)")
+    private String lot13;
+    @ApiModelProperty(name = "整经根数/验布幅宽(cm)")
+    private String lot15;
+    @ApiModelProperty(name = "盘头数量")
+    private Integer num;
+    @ApiModelProperty(name = "库存明细")
+    private List<PtStockDetailVO> details;
+
+    public PtStockVO(String skuClass, String sku, String skuDesc, String lot13, String lot15) {
+        this.skuClass = skuClass;
+        this.sku = sku;
+        this.skuDesc = skuDesc;
+        this.lot13 = lot13;
+        this.lot15 = lot15;
+    }
+}

+ 6 - 0
jjt-biz/src/main/java/com/jjt/inventory/vo/PtVO.java

@@ -50,13 +50,19 @@ public class PtVO {
         private Integer min;
         @ApiModelProperty("平均库存量")
         private BigDecimal avg;
+        @ApiModelProperty("当前库存")
+        private Integer curr;
+        @ApiModelProperty(value = "当前库存明细")
+        private List<PtStockVO> calc;
 
         public Stock() {
+            this.curr = 0;
             this.in = 0;
             this.out = 0;
             this.max = 0;
             this.min = 999999999;
             this.avg = BigDecimal.ZERO;
+            this.calc = new ArrayList<>();
         }
 
         public void addIn(int amount) {