Browse Source

修改周期报表饼状图支持多个点位的问题

lry 9 months ago
parent
commit
676fe272b0

+ 68 - 12
industry-system/industry-da/src/main/java/com/example/opc_da/validate/reportTable/AutomaticReportTableValidate.java

@@ -565,6 +565,7 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
 //            String policyId = dataForm.getString("policyId");
         String policyId = dataForm.getString("chart-item-group");
 
+        String dataValueType = dataForm.getString("dataValueType");
         String valueType = dataForm.getString("valueType");
         Integer bucketType = dataForm.getInteger("bucketType");
 
@@ -626,22 +627,76 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
             //如果为饼图
         } else if (chartType.equals(ConstantStr.PIE_CHART)) {
             //因为饼图只有一个点位
-            ReportDataPolicyItem first = itemScaleList.get(0);
-            Integer scale = first.getScale();
-
-            List<Item> validDataList = splitData(null, itemDataMap.get(policyItemIdList.get(0)), sTime, eTime, valueTakingMode, bucketType, bucketValue, scale, defaultScale);
-            //itemDataMap.get(policyItemIdList.get(0));
-            //生成series的数据
-            List<JSONObject> serieDataList = new ArrayList<>();
-            if(Blank.isNotEmpty(validDataList)){
-                serieDataList = validDataList.stream().map(v -> {
+//            ReportDataPolicyItem first = itemScaleList.get(0);
+//            Integer scale = first.getScale();
+//
+//            List<Item> validDataList = splitData(dataValueType, itemDataMap.get(policyItemIdList.get(0)), sTime, eTime, valueTakingMode, bucketType, bucketValue, scale, defaultScale);
+            List<List<Item>> serieDataList = new ArrayList<>();
+            for (String policyItemId : policyItemIdList) {
+                Optional<ReportDataPolicyItem> first = itemScaleList.stream()
+                        .filter((item) -> policyItemId.equals(item.getId().toString()))
+                        .findFirst();
+                Integer scale = null;
+                if (first.isPresent()) {
+                    scale = first.get().getScale();
+                    //log.info("自动报表:chart.policyItemId=" + policyItemId + ",scale=" + scale);
+                }
+                List<Item> validDataList = splitData(dataValueType, itemDataMap.get(policyItemId), sTime, eTime, valueTakingMode, bucketType, bucketValue, scale, defaultScale);
+                serieDataList.add(validDataList);
+            }
+            List<List<JSONObject>> jsonitemList = new ArrayList<>();
+            for (List<Item> list : serieDataList) {
+                List<JSONObject> item = list.stream().map(v -> {
                     JSONObject jsonObject = new JSONObject();
                     jsonObject.put("value", v.getValue());
-                    jsonObject.put("name", v.getTime());
+                    if(v.getName()!=null){
+                        jsonObject.put("name", v.getName());
+                    }else{
+                        jsonObject.put("name", v.getTime());
+                    }
                     return jsonObject;
                 }).collect(Collectors.toList());
+                jsonitemList.add(item);
             }
-            series.getJSONObject(0).put("data", serieDataList);
+            //数组回退一层
+            List<JSONObject> pieserieData = new ArrayList<>();
+            if(items.size()>1){
+                for (List<JSONObject> jsonObjects : jsonitemList) {
+                    JSONObject object = jsonObjects.get(0);
+                    String itemName = object.getString("name");
+                    //title,value
+                    for (int j = 0; j < items.size(); j++) {
+                        JSONObject obj = items.getJSONObject(j);
+                        if (obj.getString("value").equals(itemName)) {
+                            object.put("name", obj.getString("title"));
+                        }
+                    }
+                    pieserieData.add(object);
+                }
+            }else if(items.size()==1){
+                for (List<JSONObject> jsonObjects : jsonitemList) {
+                    JSONObject object = jsonObjects.get(0);
+                    for(int j=0;j<jsonObjects.size();j++){
+                        pieserieData.add(jsonObjects.get(j));
+                    }
+
+                }
+            }
+
+
+
+            //itemDataMap.get(policyItemIdList.get(0));
+            //生成series的数据
+//            List<JSONObject> serieDataList = new ArrayList<>();
+//            if(Blank.isNotEmpty(validDataList)){
+//                serieDataList = validDataList.stream().map(v -> {
+//                    JSONObject jsonObject = new JSONObject();
+//                    jsonObject.put("value", v.getValue());
+//                    jsonObject.put("name", v.getTime());
+//                    return jsonObject;
+//                }).collect(Collectors.toList());
+//            }
+            series.getJSONObject(0).put("data", pieserieData);
         }
         return chartJson;
     }
@@ -760,7 +815,8 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
                     .value(CalculateDataFactory.getCalculateData(valueTakingMode).calculateData(
                             itemList.stream()
                                     .map(Item::getValue).collect(Collectors.toList()), scale, defaultScale))
-                    .time(startDateTime.format(DateTimeFormatter.ofPattern(timePattern))));
+                    .time(startDateTime.format(DateTimeFormatter.ofPattern(timePattern)))
+                    .name(itemList.get(0).getName()));
         }
         return newItemList;
     }

+ 10 - 5
industry-system/industry-da/src/main/resources/static/reportSheet/js/src/model/chart-right-window.js

@@ -113,11 +113,11 @@ layui.define(['layer', 'form', 'jquery', 'element', 'laydate', 'colorpicker', 's
 						if (!layui.sheetUtil.checkAutoSheet(layui.rightMenu.data.chart[_this.data.chartId].dataForm)) {
 							return false
 						}else if(fn.data.chartType=='pie'){
-							let itemList = layui.rightMenu.data.chart[_this.data.chartId].items;
-							if(itemList.length>1){
-								layer.msg('饼状图目前只支持选择一个点位!', {icon: 2});
-								return false
-							}
+							// let itemList = layui.rightMenu.data.chart[_this.data.chartId].items;
+							// if(itemList.length>1){
+							// 	layer.msg('饼状图目前只支持选择一个点位!', {icon: 2});
+							// 	return false
+							// }
 						}
 					}
 					const policyId = $('select[name="chart-item-group"]').val()
@@ -1190,6 +1190,11 @@ layui.define(['layer', 'form', 'jquery', 'element', 'laydate', 'colorpicker', 's
 				`
 			} else {
 				html = `
+					<div class="cr-form-label">取值类型:</div>
+					<div class="layui-form-item">
+						<input type="radio" name="dataValueType" value="0" title="数据集" lay-filter="chart-hand-data-type" checked>
+						<input type="radio" name="dataValueType" value="1" title="单值" lay-filter="chart-hand-data-type"> 
+					</div>
 					<div class="cr-form-label">取值模式:</div>
 					<div class="layui-form-item">
 						<input type="radio" name="valueTakingMode" value="1" title="平均值" lay-filter="value-taking-mode">