Kaynağa Gözat

图表真实数据添加及修正

zhouxingyu 3 gün önce
ebeveyn
işleme
6455510d75

+ 6 - 80
lg-code/src/main/java/org/jeecg/modules/ProdPlan/controller/DelayProductController.java

@@ -19,6 +19,7 @@ import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.ProdPlan.entity.DelayProduct;
+import org.jeecg.modules.ProdPlan.entity.DeliveredQuantity;
 import org.jeecg.modules.ProdPlan.entity.ProdPlan;
 import org.jeecg.modules.ProdPlan.service.IDelayProductService;
 
@@ -58,8 +59,7 @@ import org.jeecg.common.aspect.annotation.AutoLog;
 public class DelayProductController extends JeecgController<DelayProduct, IDelayProductService> {
 	@Autowired
 	private IDelayProductService delayProductService;
-	@Autowired
-	private ISysDictService sysDictService;
+
 
 	/**
 	 * 分页列表查询
@@ -181,85 +181,11 @@ public class DelayProductController extends JeecgController<DelayProduct, IDelay
 
     @GetMapping("/getDelayProductByWeek")
     public Result<Map> getDelayProductByWeek() {
-		Integer week = LocalDate.now().get(WeekFields.ISO.weekOfYear());
-		week = 20;
-		//获取饼图数据,前一周,当前周及后两周
-		//String pieQueryWeeks = "W" + (week - 1) + ", W" + week + "', 'W" + (week + 1) + "', 'W" + (week + 2) + "'";
-		QueryWrapper<DelayProduct> pieQueryWrapper = new QueryWrapper<>();
-		List<String> pieWeeks = new ArrayList<>();
-		pieWeeks.add("W" + (week - 1));
-		pieWeeks.add("W" + week);
-		pieWeeks.add("W" + (week + 1));
-		pieWeeks.add("W" + (week + 2));
-		pieQueryWrapper.lambda().in(DelayProduct::getWeek, pieWeeks);
-		List<DelayProduct> pieProducts = delayProductService.list(pieQueryWrapper);
-
-		Map<String, String> ruleColor = sysDictService.queryDictItemsByCode("rule_color").stream().collect(Collectors.toMap(DictModel::getText, DictModel::getValue));
-		Map<String, Long> pieInside = pieProducts.stream().collect(Collectors.groupingBy(DelayProduct::getComment1, Collectors.counting()));
-		Map<String, Long> pieOutside = pieProducts.stream().collect(Collectors.groupingBy(DelayProduct::getRemark, Collectors.counting()));
-		JSONArray pieInsideJSON = new JSONArray();
-		for(String key : pieInside.keySet()) {
-			JSONObject item = new JSONObject();
-			item.put("name", key);
-			item.put("value", pieInside.get(key));
-			Map<String, String> color = new HashMap<>();
-			color.put("color", "#" + ruleColor.get(key));
-			item.put("itemStyle", color);
-			pieInsideJSON.add(item);
-		}
-		JSONArray pieOutsideJSON = new JSONArray();
-		for(String key : pieOutside.keySet()) {
-			JSONObject item = new JSONObject();
-			item.put("name", key);
-			item.put("value", pieOutside.get(key));
-			Map<String, String> color = new HashMap<>();
-			color.put("color", "#" + ruleColor.get(key));
-			item.put("itemStyle", color);
-			pieOutsideJSON.add(item);
-		}
-
-		//获取柱状图数据,前两周,当前周及后两周
-		//String columnarQueryWeeks = "'W" + (week - 3) + "', 'W" + (week - 2) + "', 'W" + (week - 1) + "', 'W" + week + "', 'W" + week + 1 + "', 'W" + week + 2 + "'";
-		List<String> columnarWeeks = new ArrayList<>();
-		columnarWeeks.add("W" + (week - 3));
-		columnarWeeks.add("W" + (week - 2));
-		columnarWeeks.add("W" + (week - 1));
-		columnarWeeks.add("W" + week);
-		columnarWeeks.add("W" + (week + 1));
-		columnarWeeks.add("W" + (week + 2));
-		QueryWrapper<DelayProduct> columnarQueryWrapper = new QueryWrapper<>();
-		columnarQueryWrapper.lambda().in(DelayProduct::getWeek, columnarWeeks);
-		List<DelayProduct> columnarProducts = delayProductService.list(columnarQueryWrapper);
-		Map<String, Long> columnarInside = columnarProducts.stream().collect(Collectors.groupingBy(DelayProduct::getComment1, Collectors.counting()));
-		Map<String, Long> columnarOutside = columnarProducts.stream().collect(Collectors.groupingBy(DelayProduct::getRemark, Collectors.counting()));
-		JSONArray columnarInsideJSON = new JSONArray();
-		for(String key : columnarInside.keySet()) {
-			JSONObject item = new JSONObject();
-			item.put("name", key);
-			item.put("value", columnarInside.get(key));
-			Map<String, String> color = new HashMap<>();
-			color.put("color", "#" + ruleColor.get(key));
-			item.put("itemStyle", new JSONObject().put("color", color));
-			columnarInsideJSON.add(item);
-		}
-		JSONArray columnarOutsideJSON = new JSONArray();
-		for(String key : columnarOutside.keySet()) {
-			JSONObject item = new JSONObject();
-			item.put("name", key);
-			item.put("value", columnarOutside.get(key));
-			Map<String, String> color = new HashMap<>();
-			color.put("color", "#" + ruleColor.get(key));
-			item.put("itemStyle", new JSONObject().put("color", color));
-			columnarOutsideJSON.add(item);
-		}
-
+		Map<String, Object> delayProductByWeek = delayProductService.getDelayProductByWeek();
 
-		Map<String, JSONArray> result = new HashMap<>();
-		result.put("pieInside", pieInsideJSON);
-		result.put("pieOutside", pieOutsideJSON);
-		result.put("columnarInside", columnarInsideJSON);
-		result.put("columnarOutside", columnarOutsideJSON);
-		return Result.ok(result);
+//		result.put("columnarInside", columnarInsideJSON);
+//		result.put("columnarOutside", columnarOutsideJSON);
+		return Result.ok(delayProductByWeek);
 	}
 
 }

+ 4 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/service/IDelayProductService.java

@@ -3,6 +3,8 @@ package org.jeecg.modules.ProdPlan.service;
 import org.jeecg.modules.ProdPlan.entity.DelayProduct;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 /**
  * @Description: 延期商品
  * @Author: jeecg-boot
@@ -11,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IDelayProductService extends IService<DelayProduct> {
 
+    Map<String, Object> getDelayProductByWeek();
+
 }

+ 120 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/service/impl/DelayProductServiceImpl.java

@@ -1,12 +1,28 @@
 package org.jeecg.modules.ProdPlan.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.ProdPlan.entity.DelayProduct;
+import org.jeecg.modules.ProdPlan.entity.DeliveredQuantity;
 import org.jeecg.modules.ProdPlan.mapper.DelayProductMapper;
 import org.jeecg.modules.ProdPlan.service.IDelayProductService;
+import org.jeecg.modules.ProdPlan.service.IDeliveredQuantityService;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.time.LocalDate;
+import java.time.temporal.WeekFields;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * @Description: 延期商品
  * @Author: jeecg-boot
@@ -16,4 +32,108 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class DelayProductServiceImpl extends ServiceImpl<DelayProductMapper, DelayProduct> implements IDelayProductService {
 
+    @Autowired
+    private ISysDictService sysDictService;
+    @Autowired
+    private IDeliveredQuantityService deliveredQuantityService;
+
+    @Override
+    public Map<String, Object> getDelayProductByWeek() {
+        Integer week = LocalDate.now().get(WeekFields.ISO.weekOfYear());
+        //获取饼图数据,前一周,当前周及后两周
+        //String pieQueryWeeks = "W" + (week - 1) + ", W" + week + "', 'W" + (week + 1) + "', 'W" + (week + 2) + "'";
+        QueryWrapper<DelayProduct> pieQueryWrapper = new QueryWrapper<>();
+        List<String> pieWeeks = new ArrayList<>();
+        pieWeeks.add("W" + (week - 1));
+        pieWeeks.add("W" + week);
+        pieWeeks.add("W" + (week + 1));
+        pieWeeks.add("W" + (week + 2));
+        pieQueryWrapper.lambda().in(DelayProduct::getWeek, pieWeeks);
+        List<DelayProduct> pieProducts = this.list(pieQueryWrapper);
+
+        Map<String, String> ruleColor = sysDictService.queryDictItemsByCode("rule_color").stream().collect(Collectors.toMap(DictModel::getText, DictModel::getValue));
+        Map<String, Long> pieInside = pieProducts.stream().collect(Collectors.groupingBy(DelayProduct::getComment1, Collectors.summingLong(item -> item.getPo())));
+        Map<String, Long> pieOutside = pieProducts.stream().collect(Collectors.groupingBy(DelayProduct::getRemark, Collectors.summingLong(item -> item.getPo())));
+        JSONArray pieInsideJSON = new JSONArray();
+        for(String key : pieInside.keySet()) {
+            JSONObject item = new JSONObject();
+            item.put("name", key);
+            item.put("value", pieInside.get(key));
+            Map<String, String> color = new HashMap<>();
+            color.put("color", "#" + ruleColor.get(key).substring(0, 6));
+            item.put("itemStyle", color);
+            pieInsideJSON.add(item);
+        }
+        JSONArray pieOutsideJSON = new JSONArray();
+        for(String key : pieOutside.keySet()) {
+            JSONObject item = new JSONObject();
+            item.put("name", key);
+            item.put("value", pieOutside.get(key));
+            Map<String, String> color = new HashMap<>();
+            color.put("color", "#" + ruleColor.get(key).substring(0, 6));
+            item.put("itemStyle", color);
+            pieOutsideJSON.add(item);
+        }
+
+        //获取柱状图数据,前两周,当前周及后两周
+        //String columnarQueryWeeks = "'W" + (week - 3) + "', 'W" + (week - 2) + "', 'W" + (week - 1) + "', 'W" + week + "', 'W" + week + 1 + "', 'W" + week + 2 + "'";
+        List<String> columnarWeeks = new ArrayList<>();
+        columnarWeeks.add("W" + (week - 3));
+        columnarWeeks.add("W" + (week - 2));
+        columnarWeeks.add("W" + (week - 1));
+        columnarWeeks.add("W" + week);
+        columnarWeeks.add("W" + (week + 1));
+        columnarWeeks.add("W" + (week + 2));
+        QueryWrapper<DelayProduct> columnarQueryWrapper = new QueryWrapper<>();
+        columnarQueryWrapper.lambda().in(DelayProduct::getWeek, columnarWeeks);
+        List<DelayProduct> columnarProducts = this.list(columnarQueryWrapper);
+
+        List<DeliveredQuantity> deliveredQuantityList = this.deliveredQuantityService.list();
+        Map<String, Integer> deliveredQuantityMap = deliveredQuantityList.stream().collect(Collectors.toMap(DeliveredQuantity::getWeek, DeliveredQuantity::getQuantity));
+
+        //记录每个部门的每周总和以及每周所有部门的总和
+        Map<String, Integer> total = new HashMap<>();
+        Map<String, Map<String, Integer>> columnarData = new HashMap<>();
+        columnarProducts.forEach(item -> {
+            Map<String, Integer> weekData = columnarData.get(item.getComment1()) == null ? new HashMap<>() : columnarData.get(item.getComment1());
+            if(columnarWeeks.contains(item.getWeek())) {
+                Integer weekValue = weekData.get(item.getWeek()) == null ? 0 : weekData.get(item.getWeek());
+                weekValue += item.getPo();
+                weekData.put(item.getWeek(), weekValue);
+                total.put(item.getWeek(), total.get(item.getWeek()) == null ? item.getPo() : item.getPo() + total.get(item.getWeek()));
+            }
+            columnarData.put(item.getComment1(), weekData);
+        });
+
+        //整合数据,方便前端取,计算loss率
+        Map<String, List<Integer>> columnarResult = new HashMap<>();
+        List<Double> lossResult = new ArrayList<>();
+        for(String key : columnarData.keySet()) {
+            List<Integer> weeks = new ArrayList<>();
+            columnarWeeks.forEach(item -> {
+                Integer weekTotal = columnarData.get(key).get(item);
+                weeks.add(weekTotal);
+            });
+            columnarResult.put(key, weeks);
+        }
+        columnarWeeks.forEach(item -> {
+            if(deliveredQuantityMap.get(item) != null && deliveredQuantityMap.get(item) != 0 && total.get(item) != null) {
+                lossResult.add((double)total.get(item) / deliveredQuantityMap.get(item));
+
+            }else {
+                lossResult.add(Double.valueOf(0));
+            }
+
+        });
+
+
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("pieInside", pieInsideJSON);
+        result.put("pieOutside", pieOutsideJSON);
+        result.put("columnarWeeks", columnarWeeks);
+        result.put("lossData", lossResult);
+        result.put("columnarData", columnarResult);
+        return result;
+    }
 }