Преглед изворни кода

[task-1766] 性能验证模块 开发 (二期) / 【后端】验证报告的接口开发

Li Yuan пре 1 година
родитељ
комит
bef0138ffe
11 измењених фајлова са 167 додато и 94 уклоњено
  1. 12 8
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/LinearRangeEP6A.java
  2. 2 2
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PVItemBuilder.java
  3. 0 2
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PVModel.java
  4. 11 15
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PrecisionEP15.java
  5. 22 7
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessEP15Patient.java
  6. 42 38
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessRefernece.java
  7. 13 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/report/ChartDTO.java
  8. 5 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/report/SheetDTO.java
  9. 1 3
      ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/linearRegression.ftl
  10. 22 4
      ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/linesForRange.ftl
  11. 37 15
      ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/polynomialRegression.ftl

+ 12 - 8
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/LinearRangeEP6A.java

@@ -152,7 +152,10 @@ public class LinearRangeEP6A extends PVModel {
 
     @Override
     public SheetDTO[] buildSheetDTO() {
-        return null;
+        SheetDTO sheet = new SheetDTO("EP6-A线性评价");
+        sheet.setReportDataDTO(buildReportTableDTO());
+        sheet.setChartDataDTO(buildChartDTO());
+        return new SheetDTO[]{sheet};
     }
 
     public Map<String, TableDTO> buildReportTableDTO(){
@@ -171,30 +174,31 @@ public class LinearRangeEP6A extends PVModel {
     }
 
     private ChartDTO buildChart2DTO() {
-        ChartDTO chartDTO = new ChartDTO();
+        ChartDTO chartDTO = new ChartDTO("linesForRange");
         double[][] data = new double[targetValues.length][2];
         for (int i = 0; i < data.length; i++) {
             data[i] = new double[]{i+1,diffs[1][i]};
         }
-        chartDTO.setData(data);
+//        chartDTO.setData(data);
         final HashMap<String, Object> config = new HashMap<>();
         config.put("yAxisUp",0.1);
         config.put("yAxisLow",-0.1);
+        config.put("data",JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect));
 
         chartDTO.setOption(EchartsFreemarkerUtils.generate("/scatter/linesForRange.ftl",config));
         return chartDTO;
     }
 
     private ChartDTO buildChart1DTO() {
-        ChartDTO chartDTO = new ChartDTO();
+        ChartDTO chartDTO = new ChartDTO("polynomialRegression");
         double[][] data = new double[targetValues.length][2];
         for (int i = 0; i < data.length; i++) {
             data[i] = new double[]{targetValues[i],means[i]};
         }
-        chartDTO.setData(data);
-
-
-        chartDTO.setOption(EchartsFreemarkerUtils.generate("/scatter/polynomialRegression.ftl",new HashMap<>()));
+//        chartDTO.setData(data);
+        Map<String,Object> map = new HashMap<>();
+        map.put("data",JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect));
+        chartDTO.setOption(EchartsFreemarkerUtils.generate("/scatter/polynomialRegression.ftl",map));
         return chartDTO;
     }
 

+ 2 - 2
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PVItemBuilder.java

@@ -108,7 +108,7 @@ public class PVItemBuilder {
                 pvModel = precisionEP15;
             }
 
-        }else if(config.getName().equals("定值参考物质验证")){
+        }else if(config.getName().equals("EP15-A2定值参考物质验证")){
             TruenessRefernece truenessRefernece = new TruenessRefernece(config.getSpecimensName(),config.getDecimal());
             for (String sName : config.getSpecimensName()) {
 //                final xValue[] total = new xValue[config.getRepeatNum() * config.getDays()];
@@ -126,7 +126,7 @@ public class PVItemBuilder {
                 truenessRefernece.buildItem(sName,data, config.getTargetValue()[0],config.getClaimValue(),0);
                 pvModel = truenessRefernece;
             }
-        }else if(config.getName().equals("EP15-A方法学比对")){
+        }else if(config.getName().equals("EP15-A2方法学比对")){
 
             pvModel = new TruenessEP15Patient(dataArrays, config.getClaimValue(),0,config.getDecimal());
 

+ 0 - 2
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PVModel.java

@@ -50,8 +50,6 @@ public abstract class PVModel {
     }
 
     public abstract TableDTO buildDataTableDTO();
-    public abstract Map<String, TableDTO> buildReportTableDTO();
-    public abstract Map<String, ChartDTO> buildChartDTO();
     public abstract SheetDTO[] buildSheetDTO();
 
     public int getScale() {

+ 11 - 15
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PrecisionEP15.java

@@ -56,23 +56,19 @@ public class PrecisionEP15 extends PVModel {
 
     }
 
-    @Override
-    public Map<String, TableDTO> buildReportTableDTO() {
-        Map<String, TableDTO> reports = new HashMap<>();
-        for (Item item : items) {
-            reports.putAll(buildTable1DTO(item));
-        }
-        return reports;
-    }
-
-    @Override
-    public Map<String, ChartDTO> buildChartDTO() {
-        return null;
-    }
 
     @Override
     public SheetDTO[] buildSheetDTO() {
-        return null;
+        SheetDTO[] reports = new SheetDTO[items.size()];
+        for (int i=0; i<items.size();i++) {
+            final SheetDTO sheet = new SheetDTO(items.get(i).name);
+            Map<String, TableDTO> table = new HashMap<>();
+            table.putAll(buildTable1DTO(items.get(i)));
+            sheet.setReportDataDTO(table);
+            reports[i] = sheet;
+        }
+
+        return reports;
     }
 
     private Map<String, TableDTO> buildTable1DTO(Item item) {
@@ -274,7 +270,7 @@ public class PrecisionEP15 extends PVModel {
         precisionEP15.buildItem("test 1",data, 0, 0 );
         precisionEP15.buildItem("test 2",data, 0, 0 );
         TableDTO tableDTO = precisionEP15.buildDataTableDTO();
-        Map<String, TableDTO> stringTableDTOMap = precisionEP15.buildReportTableDTO();
+        SheetDTO[] sheetDTOS = precisionEP15.buildSheetDTO();
 //        ChiSquaredDistribution x2 = new ChiSquaredDistribution( 10 );
 //        double result = x2.inverseCumulativeProbability(1 - 0.05/2);//level
         System.out.println(precisionEP15);

+ 22 - 7
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessEP15Patient.java

@@ -1,6 +1,7 @@
 package com.lc.ibps.components.verification.model2;
 
 import com.lc.ibps.components.verification.report.ChartDTO;
+import com.lc.ibps.components.verification.report.EchartsFreemarkerUtils;
 import com.lc.ibps.components.verification.report.SheetDTO;
 import com.lc.ibps.components.verification.report.TableDTO;
 import org.apache.commons.math3.stat.StatUtils;
@@ -177,7 +178,6 @@ public class TruenessEP15Patient extends PVModel {
         return table;
     }
 
-    @Override
     public Map<String, TableDTO> buildReportTableDTO() {
         Map<String, TableDTO> reports = new HashMap<>();
         TableDTO table = new TableDTO();
@@ -204,13 +204,28 @@ public class TruenessEP15Patient extends PVModel {
         return reports;
     }
 
-    @Override
-    public Map<String, ChartDTO> buildChartDTO() {
-        return null;
-    }
-
     @Override
     public SheetDTO[] buildSheetDTO() {
-        return null;
+        SheetDTO sheet = new SheetDTO("EP15-A方法学比对");
+        sheet.setReportDataDTO(buildReportTableDTO());
+        HashMap<String, ChartDTO> map = new HashMap<>();
+        map.put("图1: 对比数据的差值图",buildChart1DTO());
+        sheet.setChartDataDTO(map);
+        return new SheetDTO[]{sheet};
+    }
+
+    private ChartDTO buildChart1DTO() {
+        ChartDTO chartDTO = new ChartDTO("linesForRange");
+        double[][] data = new double[yx.length][2];
+        for (int i = 0; i < data.length; i++) {
+            data[i] = new double[]{x[i],yx[i]};
+        }
+        chartDTO.setData(data);
+        final HashMap<String, Object> config = new HashMap<>();
+        config.put("yAxisUp",sdClaim);
+        config.put("yAxisLow",-sdClaim);
+
+        chartDTO.setOption(EchartsFreemarkerUtils.generate("/scatter/linesForRange.ftl",config));
+        return chartDTO;
     }
 }

+ 42 - 38
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessRefernece.java

@@ -11,14 +11,16 @@ public class TruenessRefernece extends PVModel {
 
     private List<Item> items = new ArrayList<>();
     private String[] specimensName;
-    public TruenessRefernece(String[] specimensName, int decimal){
+
+    public TruenessRefernece(String[] specimensName, int decimal) {
         this.specimensName = specimensName;
         this.setScale(decimal);
     }
 
-    public void buildItem(String name,double[][] data, double target, double sdClaim, double t){
-        items.add(new Item(name,data,target,sdClaim,t));
+    public void buildItem(String name, double[][] data, double target, double sdClaim, double t) {
+        items.add(new Item(name, data, target, sdClaim, t));
     }
+
     class Item {
         private String name;
         private double[][] data;
@@ -36,20 +38,20 @@ public class TruenessRefernece extends PVModel {
         private double t;//t critical
         private double sdClaim;//SD assigned value
 
-        public Item(String name,double[][] data, double target, double sdClaim, double t) {
+        public Item(String name, double[][] data, double target, double sdClaim, double t) {
             this.name = name;
             this.data = data;
             int i = 0;
             this.calcData = new double[data.length * data[0].length];
             for (double[] d : data) {
-                for (double dd: d){
+                for (double dd : d) {
                     calcData[i++] = dd;
                 }
             }
             this.target = target;
             this.sdClaim = sdClaim;
             if (t == 0) {
-                this.t = PVModel.getT(data.length - 1, 0.01);
+                this.t = PVModel.getT(calcData.length - 1, 0.01);
             } else {
                 this.t = t;
             }
@@ -176,26 +178,27 @@ public class TruenessRefernece extends PVModel {
             this.sdClaim = sdClaim;
         }
     }
+
     @Override
     public TableDTO buildDataTableDTO() {
-        String[] h = new String[specimensName.length+1];
-        Map<String,String[]> child = new HashMap<>();
-        String[] c = new String[items.get(0).data[0].length ];
-        for (int i = 0; i < c.length ; i++) {
-            c[i] = String.format("重复 %d",(i+1));
+        String[] h = new String[specimensName.length + 1];
+        Map<String, String[]> child = new HashMap<>();
+        String[] c = new String[items.get(0).data[0].length];
+        for (int i = 0; i < c.length; i++) {
+            c[i] = String.format("重复 %d", (i + 1));
         }
         h[0] = "天数";
         for (int i = 0; i < specimensName.length; i++) {
-            h[1+i] = specimensName[i];
-            child.put(h[i+1],c);
+            h[1 + i] = specimensName[i];
+            child.put(h[i + 1], c);
         }
         TableDTO table = new TableDTO();
-        table.buildHeader(h,child);
+        table.buildHeader(h, child);
 
         List<double[]> temp = new ArrayList<>();
         double[] first = new double[items.get(0).data.length];
-        for (int i = 0; i <items.get(0).data.length; i++) {
-            first[i] = i+1;
+        for (int i = 0; i < items.get(0).data.length; i++) {
+            first[i] = i + 1;
         }
         temp.add(first);
         for (int i = 0; i < specimensName.length; i++) {
@@ -203,29 +206,18 @@ public class TruenessRefernece extends PVModel {
         }
 
         double[][] toArray = temp.toArray(new double[0][0]);
-        table.buildData(transposeMatrix(toArray),getScale());
+        table.buildData(transposeMatrix(toArray), getScale());
         return table;
     }
 
-    @Override
-    public Map<String, TableDTO> buildReportTableDTO() {
-        return null;
-    }
-
-    @Override
-    public Map<String, ChartDTO> buildChartDTO() {
-        return null;
-    }
-
     @Override
     public SheetDTO[] buildSheetDTO() {
         SheetDTO[] reports = new SheetDTO[items.size()];
-        for (int i=0; i<items.size();i++) {
-            final SheetDTO sheet = new SheetDTO();
+        for (int i = 0; i < items.size(); i++) {
+            final SheetDTO sheet = new SheetDTO(items.get(i).name);
             Map<String, TableDTO> table = new HashMap<>();
             table.putAll(buildTable1DTO(items.get(i)));
             sheet.setReportDataDTO(table);
-            sheet.setTitle(items.get(i).name);
             reports[i] = sheet;
         }
 
@@ -237,14 +229,26 @@ public class TruenessRefernece extends PVModel {
         TableDTO table = new TableDTO();
         String[][] data = new String[6][2];
 
-        data[0] =new String[]{"均值" , format(item.mean)};
-        data[1] =new String[]{"标准差" , format(item.sd)};
-        data[2] =new String[]{"置信区间上限" , format(item.ucl)};
-        data[3] =new String[]{"置信区间下限" , format(item.lcl)};
-        data[4] =new String[]{"验证区间上限" , format(item.uvl)};
-        data[5] =new String[]{"验证区间下限" , format(item.lvl)};
+        data[0] = new String[]{"均值", format(item.mean)};
+        data[1] = new String[]{"标准差", format(item.sd)};
+        data[2] = new String[]{"置信区间上限", format(item.ucl)};
+        data[3] = new String[]{"置信区间下限", format(item.lcl)};
+        data[4] = new String[]{"验证区间上限", format(item.uvl)};
+        data[5] = new String[]{"验证区间下限", format(item.lvl)};
         table.buildData(data);
-        reports.put(item.name,table);
-        return  reports;
+        reports.put(item.name, table);
+        return reports;
+    }
+
+    public static void main(String[] args) {
+        double[][] data = {{2.04, 2.09}, {2.15, 2.04}, {2.09, 1.98}, {2.15, 2.09}, {2.09, 2.04}};
+        TruenessRefernece tr = new TruenessRefernece(new String[]{"test 1", "test 2"}, 3);
+        tr.buildItem("test 1", data, 2.2, 0.008, 0);
+        tr.buildItem("test 2", data, 2, 0, 0);
+        TableDTO tableDTO = tr.buildDataTableDTO();
+        SheetDTO[] sheetDTOS = tr.buildSheetDTO();
+//        ChiSquaredDistribution x2 = new ChiSquaredDistribution( 10 );
+//        double result = x2.inverseCumulativeProbability(1 - 0.05/2);//level
+        System.out.println(tr);
     }
 }

+ 13 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/report/ChartDTO.java

@@ -5,6 +5,11 @@ public class ChartDTO {
     private double[][] data;
     private String option;
 
+    private String name;
+    public ChartDTO(String name){
+        this.name = name;
+    }
+
     public double[][] getData() {
         return data;
     }
@@ -21,5 +26,13 @@ public class ChartDTO {
         this.option = option;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     //    private
 }

+ 5 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/report/SheetDTO.java

@@ -8,6 +8,11 @@ public class SheetDTO {
 
 //    private String[] steps;
 
+    public SheetDTO(String title){
+        this.title = title;
+    }
+
+
     private Map<String, TableDTO> reportDataDTO;
 
     private Map<String,ChartDTO> chartDataDTO;

+ 1 - 3
ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/linearRegression.ftl

@@ -1,13 +1,11 @@
 {
   dataset: [
     {
-      source: data
+      source: ${data}
     },
     {
       transform: {
         type: 'ecStat:regression'
-        // 'linear' by default.
-        // config: { method: 'linear', formulaOn: 'end'}
       }
     }
   ],

+ 22 - 4
ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/linesForRange.ftl

@@ -1,12 +1,31 @@
 {
+  grid: {
+    left: '2%',
+    right: '2%',
+    bottom: '12%',
+    top: '12%',
+    containLabel: true
+  },
   xAxis: {},
   yAxis: {},
+  title: {
+    text: '线性回归图',
+    subtext: '',
+    sublink: '',
+    left: 'center',
+    top: 8,
+    textStyle: {
+      fontSize: 14,
+      fontWeight: 'bold',
+      color: '#333'
+    }
+  },
   series: [
     {
-      data: data,
+      data: ${data},
       type: 'scatter',
             markLine: {
-                symbol: ['none', 'none'],//去掉箭头
+                symbol: ['none', 'none'],
                 itemStyle: {
                     normal: { lineStyle: { type: 'solid', color:'blue'}
                     ,label: { show: false, position:'left' } }
@@ -17,8 +36,7 @@
                          valueDim: 'close'
                 },{
                         name: 'Y 轴值为 100 的水平线',
-                        yAxis: ${yAxisLow},
-                        // valueDim: 'close'
+                        yAxis: ${yAxisLow}
                 }
                 ]
         }

+ 37 - 15
ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/polynomialRegression.ftl

@@ -1,7 +1,14 @@
 {
+  grid: {
+    left: '2%',
+    right: '2%',
+    bottom: '12%',
+    top: '12%',
+    containLabel: true
+  },
   dataset: [
     {
-      source: data
+      source: ${data}
     },
     {
       transform: {
@@ -23,11 +30,16 @@
     }
   ],
   title: {
-    text: '18 companies net profit and main business income (million)',
-    subtext: 'By ecStat.regression',
-    sublink: 'https://github.com/ecomfe/echarts-stat',
+    text: '线性回归图',
+    subtext: '',
+    sublink: '',
     left: 'center',
-    top: 16
+    top: 8,
+    textStyle: {
+      fontSize: 14,
+      fontWeight: 'bold',
+      color: '#333'
+    }
   },
   tooltip: {
     trigger: 'axis',
@@ -36,15 +48,24 @@
     }
   },
   xAxis: {
-    splitLine: {
-      lineStyle: {
-        type: 'dashed'
-      }
+    name: 'x轴',
+    nameLocation: 'center',
+    nameTextStyle: {
+      fontSize: 14
     },
-    splitNumber: 20
+    nameGap: 20,
+    splitLine: {
+      show: false
+    }
   },
   yAxis: {
-    min: -40,
+    name: 'y轴',
+    nameLocation: 'center',
+    nameTextStyle: {
+      fontSize: 14
+    },
+    nameGap: 20,
+    min: 0,
     splitLine: {
       lineStyle: {
         type: 'dashed'
@@ -65,10 +86,10 @@
       symbol: 'circle',
       label: {
         show: true,
-        fontSize: 16
+        fontSize: 18
       },
       labelLayout: {
-        dx: -20
+        x: 100
       },
       encode: {
         label: 2,
@@ -84,10 +105,11 @@
       symbol: 'circle',
       label: {
         show: true,
-        fontSize: 16
+        fontSize: 18
       },
       labelLayout: {
-        dx: -20
+        x: 100,
+        dy: 20
       },
       encode: {
         label: 2,