|
@@ -300,6 +300,75 @@ public class StockBackServiceImpl extends ServiceImpl<StockBackMapper, StockBack
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public Map<String, List<Map<String, Object>>> techStatistics(Map<String, String> condition) {
|
|
|
+ String beginTimeStr = condition.get("beginTime");
|
|
|
+ Assert.notEmpty(beginTimeStr, "开始时间不能为空");
|
|
|
+ Date beginTime = DateUtil.beginOfDay(DateUtil.parse(beginTimeStr));
|
|
|
+
|
|
|
+ String endTimeStr = condition.get("endTime");
|
|
|
+ Assert.notEmpty(endTimeStr, "结束时间不能为空");
|
|
|
+ Date endTime = DateUtil.endOfDay(DateUtil.parse(endTimeStr));
|
|
|
+
|
|
|
+ List<Map<String, Object>> userList = userList();
|
|
|
+
|
|
|
+ List<StockBackPlanDetails> planList = stockBackPlanDetailsService.list(Wrappers.<StockBackPlanDetails>lambdaQuery()
|
|
|
+ .between(StockBackPlanDetails::getPlanTime, beginTime, endTime)
|
|
|
+ .ne(StockBackPlanDetails::getTech, "")
|
|
|
+ .isNotNull(StockBackPlanDetails::getTech)
|
|
|
+ );
|
|
|
+
|
|
|
+ // 用户按工号分组
|
|
|
+ Map<String, Map<String, Object>> jobNoMap = userList.stream().collect(Collectors.toMap(
|
|
|
+ item -> item.get("jobNo").toString(),
|
|
|
+ item -> item
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 先按工艺归类,再按用户归类
|
|
|
+ Map<String, Map<String, List<StockBackPlanDetails>>> collect = planList.stream().collect(Collectors.groupingBy(
|
|
|
+ StockBackPlanDetails::getTech,
|
|
|
+ Collectors.groupingBy(StockBackPlanDetails::getJobNo)
|
|
|
+ ));
|
|
|
+
|
|
|
+ Map<String, List<Map<String, Object>>> result = new HashMap<>();
|
|
|
+
|
|
|
+ collect.forEach((k, v) -> {
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
+
|
|
|
+ v.forEach((k2, v2) -> {
|
|
|
+ Map<String, Object> map = jobNoMap.get(k);
|
|
|
+ if (map != null) {
|
|
|
+ if (v2 != null && v2.size() > 0) {
|
|
|
+ BigDecimal scheduleArea = BigDecimal.ZERO;
|
|
|
+ BigDecimal pickingArea = BigDecimal.ZERO;
|
|
|
+ BigDecimal backArea = BigDecimal.ZERO;
|
|
|
+ BigDecimal correctArea = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ for (StockBackPlanDetails item : v2) {
|
|
|
+ scheduleArea = scheduleArea.add(item.getQuantity());
|
|
|
+ pickingArea = pickingArea.add(item.getPickingArea()).add(item.getTransferInArea() == null ? BigDecimal.ZERO : item.getTransferInArea());
|
|
|
+ backArea = backArea.add(item.getBackArea()).add(item.getTransferOutArea() == null ? BigDecimal.ZERO : item.getTransferOutArea());
|
|
|
+ correctArea = correctArea.add(item.getCorrectArea());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 赋值使用率
|
|
|
+ BigDecimal value = BigDecimalUtil.init(scheduleArea).multiply(100).
|
|
|
+ divideTry(pickingArea.subtract(backArea).subtract(correctArea), 2).getValue();
|
|
|
+
|
|
|
+ map.put("useRate", value);
|
|
|
+ } else {
|
|
|
+ map.put("useRate", BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ list.add(map);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ result.put(k, list);
|
|
|
+ });
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public StatisticsResult statisticsDetails(Map<String, String> condition) {
|
|
|
|
|
|
StatisticsResult result = new StatisticsResult();
|