home 2 роки тому
батько
коміт
059f4c7e38

+ 1 - 1
hx-common/common-tool/src/main/java/com/fjhx/utils/BigDecimalUtil.java

@@ -93,7 +93,7 @@ public class BigDecimalUtil {
      * 获取计算结果值,并指定保留位数
      */
     public BigDecimal getValue(int scale) {
-        return keepDecimals(bigDecimal, scale);
+        return bigDecimal.setScale(scale, RoundingMode.HALF_UP);
     }
 
     private static BigDecimal objToBigDecimal(Object value) {

+ 11 - 1
hx-service/storage/src/main/java/com/fjhx/stock/controller/StockDetailController.java

@@ -77,7 +77,7 @@ public class StockDetailController {
     }
 
     /**
-     * 领料追踪用户统计
+     * 领料追踪数量统计
      */
     @PostMapping("/pickingTrackingNumStatistics")
     public R pickingTrackingNumStatistics(@RequestBody Map<String, String> condition) {
@@ -94,5 +94,15 @@ public class StockDetailController {
         return R.success(result);
     }
 
+    /**
+     * 指定领料信息
+     */
+    @PostMapping("/pickingTrackingList")
+    public R pickingTrackingList(@RequestBody Map<String, String> condition) {
+        List<Map<String, Object>> result = stockDetailService.pickingTrackingList(condition);
+        return R.success(result);
+    }
+
+
 }
 

+ 2 - 2
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockDetailMapper.xml

@@ -108,9 +108,9 @@
     </select>
 
     <select id="getMaterialWidthByCode" resultType="java.util.Map">
-        select m.Code code, m.Width width
+        select m.Code code, m.Width width, m.Name name
         from material m
-            ${ew.customSqlSegment};
+            ${ew.customSqlSegment}
     </select>
 
     <select id="selectAdditionalMeterAndArea" resultType="java.util.Map">

+ 2 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/StockDetailService.java

@@ -32,4 +32,6 @@ public interface StockDetailService extends BaseService<StockDetail> {
 
     List<Map<String, Object>> appointInfo(Map<String, String> condition);
 
+    List<Map<String, Object>> pickingTrackingList(Map<String, String> condition);
+
 }

+ 103 - 13
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockDetailServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.stock.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -218,14 +219,8 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         // 计算指定领料
         setAppoint(result, list, outputList);
 
-        // 指定产出比
-        result.setAppointOutputRatio(BigDecimalUtil.init(result.getAppointArea()).divide(result.getPlanArea(), 4).getValue());
-
-        // 实际产出比
-        result.setActualOutputRatio(BigDecimalUtil.init(result.getActualArea()).divide(result.getPlanArea(), 4).getValue());
-
-        // 产出比差额
-        result.setOutputRatioDifference(result.getAppointOutputRatio().subtract(result.getActualOutputRatio()));
+        // 赋值比例
+        setRatio(result);
 
         return result;
     }
@@ -234,11 +229,10 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
     public List<Map<String, Object>> appointInfo(Map<String, String> condition) {
         String pickingType = condition.get("pickingType");
         Assert.notEmpty(pickingType, "领料类型不能为空");
-
         String materialId = condition.get("materialId");
+        String jobNo = condition.get("jobNo");
 
         QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper("ss.plan_date", condition);
-        String jobNo = condition.get("jobNo");
         List<Map<String, Object>> list = baseMapper.getPlanListByUser(wrapper, jobNo);
 
         // 获取出入库单号
@@ -267,11 +261,12 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         List<String> rfidCodeList = new ArrayList<>();
 
         for (Map.Entry<String, List<Map<String, Object>>> entry : inOutStorageNoMap.entrySet()) {
-            String key = entry.getKey();
-            List<Map<String, Object>> value = entry.getValue();
+            String key = entry.getKey(); // 出入库单号
+            List<Map<String, Object>> value = entry.getValue(); // 出库物料
 
-            String rfid = collect.get(key);
+            String rfid = collect.get(key); // 推荐物料rfid
 
+            // 遍历出库物料的rfid
             List<String> rfidCode = value.stream().map(item -> item.get("rfidCode").toString()).collect(Collectors.toList());
 
             if (pickingType.equals("1")) { // 查询指定领料未领取
@@ -300,6 +295,101 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         return result;
     }
 
+    @Override
+    public List<Map<String, Object>> pickingTrackingList(Map<String, String> condition) {
+
+        // 查询指定领料列表
+        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper("ss.plan_date", condition);
+        String jobNo = condition.get("jobNo");
+        List<Map<String, Object>> list = baseMapper.getPlanListByUser(wrapper, jobNo);
+
+        if (list.size() == 0) {
+            return list;
+        }
+
+        // 指定物料列表通过物料编码分组
+        Map<String, List<Map<String, Object>>> listGroupCode = list.stream()
+                .collect(Collectors.groupingBy(item -> item.get("code").toString()));
+
+        // 物料编码、门幅、名称集合
+        List<Map<String, Object>> materialList = baseMapper.getMaterialWidthByCode(
+                Wrappers.query().in("m.Code", listGroupCode.keySet()));
+
+        // 物料名称分组前缀分组
+        Map<String, List<Map<String, Object>>> materialGroupName = materialList.stream().collect(Collectors.groupingBy(
+                item -> item.get("name").toString().split("-")[0]));
+
+        List<Map<String, Object>> result = new ArrayList<>();
+
+        // 物料
+        Map<String, Float> codeWidthMap = materialList.stream().collect(Collectors.toMap(
+                item -> item.get("code").toString(),
+                item -> (Float) item.get("width")
+        ));
+
+        for (Map.Entry<String, List<Map<String, Object>>> entry : materialGroupName.entrySet()) {
+            String key = entry.getKey(); // 面料名称
+            List<Map<String, Object>> value = entry.getValue(); // 面料属性集合
+
+            for (Map<String, Object> map : value) {
+                String code = map.get("code").toString();
+                List<Map<String, Object>> listByCode = listGroupCode.get(code);
+
+                PickingTrackingNumStatisticsResult temp = new PickingTrackingNumStatisticsResult();
+
+                // 赋值排班领料
+                setPlan(temp, listByCode, codeWidthMap);
+
+                // 获取出入库单号
+                List<String> inOutStorageNo = listByCode.stream().filter(item -> ObjectUtil.isNotEmpty(item.get("inOutStorageNo")))
+                        .map(item -> item.get("inOutStorageNo").toString()).distinct().collect(Collectors.toList());
+
+                // 没有出入库单号,没有实际领料
+                if (inOutStorageNo.size() == 0) {
+                    map.putAll(BeanUtil.beanToMap(temp));
+                    continue;
+                }
+
+                // 根据出入库单号查询实际领料
+                List<Map<String, Object>> outputList = baseMapper.getOutputList(
+                        Wrappers.query().in("si.InOutStorageNo", inOutStorageNo));
+
+                // 赋值实际领料
+                setActual(temp, outputList, codeWidthMap);
+
+                // 计算指定领料
+                setAppoint(temp, listByCode, outputList);
+
+                // 赋值比例
+                setRatio(temp);
+
+                map.putAll(BeanUtil.beanToMap(temp));
+            }
+
+
+            HashMap<String, Object> map = new HashMap<>();
+            map.put(key, value);
+            result.add(map);
+
+        }
+
+        return result;
+    }
+
+    /**
+     * 赋值比例相关属性
+     */
+    private void setRatio(PickingTrackingNumStatisticsResult result) {
+        // 指定产出比
+        result.setAppointOutputRatio(BigDecimalUtil.init(result.getAppointArea()).divide(result.getPlanArea(), 4).getValue());
+
+        // 实际产出比
+        result.setActualOutputRatio(BigDecimalUtil.init(result.getActualArea()).divide(result.getPlanArea(), 4).getValue());
+
+        // 产出比差额
+        result.setOutputRatioDifference(result.getAppointOutputRatio().subtract(result.getActualOutputRatio()));
+    }
+
     /**
      * 赋值实际领料
      */