Browse Source

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

Li Yuan 1 year ago
parent
commit
2f9f92aa71
22 changed files with 754 additions and 503 deletions
  1. 71 57
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/pv/persistence/entity/ExperimentalTbl.java
  2. 3 3
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model/ConfigVO.java
  3. 10 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model/InspectionConfigVO.java
  4. 7 2
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/LinearRangeEP6A.java
  5. 2 2
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PVItemBuilder.java
  6. 14 14
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PVModel.java
  7. 23 193
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PrecisionEP15.java
  8. 247 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/PrecisionEP15Item.java
  9. 43 4
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessEP15Patient.java
  10. 35 169
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessRefernece.java
  11. 178 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessReferneceItem.java
  12. 1 1
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/regression/PolynomialRegression.java
  13. 9 4
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/report/EchartsFreemarkerUtils.java
  14. 3 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/service/impl/PerformanceVerificationServiceImpl.java
  15. 56 54
      ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/pv/persistence/mapping/Experimental.map.xml
  16. 23 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/report/precisionEP15A2.ftl
  17. 12 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/report/truesnessUsingPatient.ftl
  18. 17 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/report/truesnessUsingRefernece.ftl
  19. 0 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/scatter/linearRegression.ftl
  20. 0 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/scatter/linesForRange.ftl
  21. 0 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/scatter/polynomialRegression.ftl
  22. 0 0
      ibps-provider-root/modules/provider-business/src/main/resources/pv/test.ftl

+ 71 - 57
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/pv/persistence/entity/ExperimentalTbl.java

@@ -8,11 +8,11 @@ import io.swagger.annotations.ApiModelProperty;
 
 /**
  * 性能验证实验信息 表对象
- * 
+ *
  *<pre> 
  * 开发公司:深圳市金源信通科技有限公司
  * 开发人员:codegen
- * 创建时间:2024-05-16 11:39:12
+ * 创建时间:2024-05-24 12:13:49
  *</pre>
  */
 @SuppressWarnings("serial")
@@ -72,8 +72,10 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	protected String  shiYanJieLun; 		/*实验结论*/
 	@ApiModelProperty(value = "性能指标")
 	protected String  xingNengZhiBia; 		/*性能指标*/
+	@ApiModelProperty(value = "指标ID")
+	protected String  zhiBiaoId; 		/*指标ID*/
 
-	public void setId(String id) 
+	public void setId(String id)
 	{
 		this.id = id;
 	}
@@ -81,11 +83,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 主键
 	 * @return
 	 */
-	public String getId() 
+	public String getId()
 	{
 		return this.id;
 	}
-	public void setTenantId(String tenantId) 
+	public void setTenantId(String tenantId)
 	{
 		this.tenantId = tenantId;
 	}
@@ -93,11 +95,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 租户ID
 	 * @return
 	 */
-	public String getTenantId() 
+	public String getTenantId()
 	{
 		return this.tenantId;
 	}
-	public void setIp(String ip) 
+	public void setIp(String ip)
 	{
 		this.ip = ip;
 	}
@@ -105,11 +107,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 IP地址
 	 * @return
 	 */
-	public String getIp() 
+	public String getIp()
 	{
 		return this.ip;
 	}
-	public void setShiFouGuoShen(String shiFouGuoShen) 
+	public void setShiFouGuoShen(String shiFouGuoShen)
 	{
 		this.shiFouGuoShen = shiFouGuoShen;
 	}
@@ -117,11 +119,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 是否过审
 	 * @return
 	 */
-	public String getShiFouGuoShen() 
+	public String getShiFouGuoShen()
 	{
 		return this.shiFouGuoShen;
 	}
-	public void setDiDian(String diDian) 
+	public void setDiDian(String diDian)
 	{
 		this.diDian = diDian;
 	}
@@ -129,11 +131,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 地点
 	 * @return
 	 */
-	public String getDiDian() 
+	public String getDiDian()
 	{
 		return this.diDian;
 	}
-	public void setBianZhiRen(String bianZhiRen) 
+	public void setBianZhiRen(String bianZhiRen)
 	{
 		this.bianZhiRen = bianZhiRen;
 	}
@@ -141,11 +143,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 编制人
 	 * @return
 	 */
-	public String getBianZhiRen() 
+	public String getBianZhiRen()
 	{
 		return this.bianZhiRen;
 	}
-	public void setBianZhiBuMen(String bianZhiBuMen) 
+	public void setBianZhiBuMen(String bianZhiBuMen)
 	{
 		this.bianZhiBuMen = bianZhiBuMen;
 	}
@@ -153,11 +155,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 编制部门
 	 * @return
 	 */
-	public String getBianZhiBuMen() 
+	public String getBianZhiBuMen()
 	{
 		return this.bianZhiBuMen;
 	}
-	public void setBianZhiShiJian(String bianZhiShiJian) 
+	public void setBianZhiShiJian(String bianZhiShiJian)
 	{
 		this.bianZhiShiJian = bianZhiShiJian;
 	}
@@ -165,11 +167,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 编制时间
 	 * @return
 	 */
-	public String getBianZhiShiJian() 
+	public String getBianZhiShiJian()
 	{
 		return this.bianZhiShiJian;
 	}
-	public void setKuaiZhao(String kuaiZhao) 
+	public void setKuaiZhao(String kuaiZhao)
 	{
 		this.kuaiZhao = kuaiZhao;
 	}
@@ -177,11 +179,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 快照
 	 * @return
 	 */
-	public String getKuaiZhao() 
+	public String getKuaiZhao()
 	{
 		return this.kuaiZhao;
 	}
-	public void setShiYanXiangMu(String shiYanXiangMu) 
+	public void setShiYanXiangMu(String shiYanXiangMu)
 	{
 		this.shiYanXiangMu = shiYanXiangMu;
 	}
@@ -189,11 +191,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 实验项目
 	 * @return
 	 */
-	public String getShiYanXiangMu() 
+	public String getShiYanXiangMu()
 	{
 		return this.shiYanXiangMu;
 	}
-	public void setShiYanFangFa(String shiYanFangFa) 
+	public void setShiYanFangFa(String shiYanFangFa)
 	{
 		this.shiYanFangFa = shiYanFangFa;
 	}
@@ -201,11 +203,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 实验方法
 	 * @return
 	 */
-	public String getShiYanFangFa() 
+	public String getShiYanFangFa()
 	{
 		return this.shiYanFangFa;
 	}
-	public void setYangBenLeiXing(String yangBenLeiXing) 
+	public void setYangBenLeiXing(String yangBenLeiXing)
 	{
 		this.yangBenLeiXing = yangBenLeiXing;
 	}
@@ -213,11 +215,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 样本类型
 	 * @return
 	 */
-	public String getYangBenLeiXing() 
+	public String getYangBenLeiXing()
 	{
 		return this.yangBenLeiXing;
 	}
-	public void setShiYanYiQi(String shiYanYiQi) 
+	public void setShiYanYiQi(String shiYanYiQi)
 	{
 		this.shiYanYiQi = shiYanYiQi;
 	}
@@ -225,11 +227,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 实验仪器
 	 * @return
 	 */
-	public String getShiYanYiQi() 
+	public String getShiYanYiQi()
 	{
 		return this.shiYanYiQi;
 	}
-	public void setYiQiBianHao(String yiQiBianHao) 
+	public void setYiQiBianHao(String yiQiBianHao)
 	{
 		this.yiQiBianHao = yiQiBianHao;
 	}
@@ -237,11 +239,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 仪器编号
 	 * @return
 	 */
-	public String getYiQiBianHao() 
+	public String getYiQiBianHao()
 	{
 		return this.yiQiBianHao;
 	}
-	public void setKaiShiShiJian(String kaiShiShiJian) 
+	public void setKaiShiShiJian(String kaiShiShiJian)
 	{
 		this.kaiShiShiJian = kaiShiShiJian;
 	}
@@ -249,11 +251,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 开始时间
 	 * @return
 	 */
-	public String getKaiShiShiJian() 
+	public String getKaiShiShiJian()
 	{
 		return this.kaiShiShiJian;
 	}
-	public void setJieShuShiJian(String jieShuShiJian) 
+	public void setJieShuShiJian(String jieShuShiJian)
 	{
 		this.jieShuShiJian = jieShuShiJian;
 	}
@@ -261,11 +263,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 结束时间
 	 * @return
 	 */
-	public String getJieShuShiJian() 
+	public String getJieShuShiJian()
 	{
 		return this.jieShuShiJian;
 	}
-	public void setJieGuoDanWei(String jieGuoDanWei) 
+	public void setJieGuoDanWei(String jieGuoDanWei)
 	{
 		this.jieGuoDanWei = jieGuoDanWei;
 	}
@@ -273,11 +275,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 结果单位
 	 * @return
 	 */
-	public String getJieGuoDanWei() 
+	public String getJieGuoDanWei()
 	{
 		return this.jieGuoDanWei;
 	}
-	public void setBaoLiuXiaoShu(String baoLiuXiaoShu) 
+	public void setBaoLiuXiaoShu(String baoLiuXiaoShu)
 	{
 		this.baoLiuXiaoShu = baoLiuXiaoShu;
 	}
@@ -285,11 +287,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 保留小数
 	 * @return
 	 */
-	public String getBaoLiuXiaoShu() 
+	public String getBaoLiuXiaoShu()
 	{
 		return this.baoLiuXiaoShu;
 	}
-	public void setBeiZhu(String beiZhu) 
+	public void setBeiZhu(String beiZhu)
 	{
 		this.beiZhu = beiZhu;
 	}
@@ -297,11 +299,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 备注
 	 * @return
 	 */
-	public String getBeiZhu() 
+	public String getBeiZhu()
 	{
 		return this.beiZhu;
 	}
-	public void setFangAnLeiXing(String fangAnLeiXing) 
+	public void setFangAnLeiXing(String fangAnLeiXing)
 	{
 		this.fangAnLeiXing = fangAnLeiXing;
 	}
@@ -309,11 +311,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 方案类型
 	 * @return
 	 */
-	public String getFangAnLeiXing() 
+	public String getFangAnLeiXing()
 	{
 		return this.fangAnLeiXing;
 	}
-	public void setShiYanCanShu(String shiYanCanShu) 
+	public void setShiYanCanShu(String shiYanCanShu)
 	{
 		this.shiYanCanShu = shiYanCanShu;
 	}
@@ -321,11 +323,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 实验参数
 	 * @return
 	 */
-	public String getShiYanCanShu() 
+	public String getShiYanCanShu()
 	{
 		return this.shiYanCanShu;
 	}
-	public void setShiYanShuJu(String shiYanShuJu) 
+	public void setShiYanShuJu(String shiYanShuJu)
 	{
 		this.shiYanShuJu = shiYanShuJu;
 	}
@@ -333,11 +335,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 实验数据
 	 * @return
 	 */
-	public String getShiYanShuJu() 
+	public String getShiYanShuJu()
 	{
 		return this.shiYanShuJu;
 	}
-	public void setShenHeRen(String shenHeRen) 
+	public void setShenHeRen(String shenHeRen)
 	{
 		this.shenHeRen = shenHeRen;
 	}
@@ -345,11 +347,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 结论审核人
 	 * @return
 	 */
-	public String getShenHeRen() 
+	public String getShenHeRen()
 	{
 		return this.shenHeRen;
 	}
-	public void setBaoGaoShiJian(String baoGaoShiJian) 
+	public void setBaoGaoShiJian(String baoGaoShiJian)
 	{
 		this.baoGaoShiJian = baoGaoShiJian;
 	}
@@ -357,11 +359,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 报告时间
 	 * @return
 	 */
-	public String getBaoGaoShiJian() 
+	public String getBaoGaoShiJian()
 	{
 		return this.baoGaoShiJian;
 	}
-	public void setFuJian(String fuJian) 
+	public void setFuJian(String fuJian)
 	{
 		this.fuJian = fuJian;
 	}
@@ -369,11 +371,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 附件
 	 * @return
 	 */
-	public String getFuJian() 
+	public String getFuJian()
 	{
 		return this.fuJian;
 	}
-	public void setShiYanJieLun(String shiYanJieLun) 
+	public void setShiYanJieLun(String shiYanJieLun)
 	{
 		this.shiYanJieLun = shiYanJieLun;
 	}
@@ -381,11 +383,11 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 实验结论
 	 * @return
 	 */
-	public String getShiYanJieLun() 
+	public String getShiYanJieLun()
 	{
 		return this.shiYanJieLun;
 	}
-	public void setXingNengZhiBia(String xingNengZhiBia) 
+	public void setXingNengZhiBia(String xingNengZhiBia)
 	{
 		this.xingNengZhiBia = xingNengZhiBia;
 	}
@@ -393,9 +395,21 @@ public class ExperimentalTbl extends AbstractPo<String>{
 	 * 返回 性能指标
 	 * @return
 	 */
-	public String getXingNengZhiBia() 
+	public String getXingNengZhiBia()
 	{
 		return this.xingNengZhiBia;
 	}
-	
+	public void setZhiBiaoId(String zhiBiaoId)
+	{
+		this.zhiBiaoId = zhiBiaoId;
+	}
+	/**
+	 * 返回 指标ID
+	 * @return
+	 */
+	public String getZhiBiaoId()
+	{
+		return this.zhiBiaoId;
+	}
+
 }

+ 3 - 3
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model/ConfigVO.java

@@ -4,7 +4,7 @@ public class ConfigVO {
 
 
     private String[] model;
-    private String range;
+    private int range;
     private String standard;
     private String remark;
     private double tea;
@@ -24,11 +24,11 @@ public class ConfigVO {
         this.model = model;
     }
 
-    public String getRange() {
+    public int getRange() {
         return range;
     }
 
-    public void setRange(String range) {
+    public void setRange(int range) {
         this.range = range;
     }
 

+ 10 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model/InspectionConfigVO.java

@@ -6,6 +6,8 @@ public class InspectionConfigVO extends ConfigVO {
 
     //检测指标名称
     private String name;
+    //单位
+    private String units;
     //检验天数
     private int days;
     //标本数
@@ -121,4 +123,12 @@ public class InspectionConfigVO extends ConfigVO {
     public void setTargetValue(double[] targetValue) {
         this.targetValue = targetValue;
     }
+
+    public String getUnits() {
+        return units;
+    }
+
+    public void setUnits(String units) {
+        this.units = units;
+    }
 }

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

@@ -158,6 +158,11 @@ public class LinearRangeEP6A extends PVModel {
         return new SheetDTO[]{sheet};
     }
 
+    @Override
+    public String generateResult() {
+        return null;
+    }
+
     public Map<String, TableDTO> buildReportTableDTO(){
         Map<String, TableDTO> reports = new HashMap<>();
         reports.put("表1: 重复性差异检测结果",buildTable1DTO());
@@ -185,7 +190,7 @@ public class LinearRangeEP6A extends PVModel {
         config.put("yAxisLow",-0.1);
         config.put("data",JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect));
 
-        chartDTO.setOption(EchartsFreemarkerUtils.generate("/scatter/linesForRange.ftl",config));
+        chartDTO.setOption(EchartsFreemarkerUtils.generateChart("/scatter/linesForRange.ftl",config));
         return chartDTO;
     }
 
@@ -198,7 +203,7 @@ public class LinearRangeEP6A extends PVModel {
 //        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));
+        chartDTO.setOption(EchartsFreemarkerUtils.generateChart("/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

@@ -104,7 +104,7 @@ public class PVItemBuilder {
                 for (int j = 0; j < list.size(); j++) {
                     data[j] = pvModel.transposeXValue(list.get(j).getConvertedData().get(sName));
                 }
-                precisionEP15.buildItem(sName,data,config.getBatchCVSValue(),config.getDailyCVSValue());
+                precisionEP15.buildItem(sName,data,config.getBatchCVSValue(),config.getDailyCVSValue(),config.getSpecimensNum(),config.getRange());
                 pvModel = precisionEP15;
             }
 
@@ -137,7 +137,7 @@ public class PVItemBuilder {
 
         }
 
-
+        pvModel.setUnits(config.getUnits());
 
     }
 

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

@@ -1,18 +1,15 @@
 package com.lc.ibps.components.verification.model2;
 
 import com.lc.ibps.components.verification.funcs.xValue;
-import com.lc.ibps.components.verification.report.ChartDTO;
 import com.lc.ibps.components.verification.report.SheetDTO;
 import com.lc.ibps.components.verification.report.TableDTO;
 import org.apache.commons.math3.distribution.ChiSquaredDistribution;
 import org.apache.commons.math3.distribution.TDistribution;
-import org.apache.poi.ss.usermodel.Sheet;
-
-import java.util.Map;
 
 public abstract class PVModel {
 
     private int scale;
+    private String units;
     public String format(double d){
         return String.format("%."+scale+"f", format(d,scale));
     }
@@ -20,26 +17,20 @@ public abstract class PVModel {
         return Double.parseDouble(String.format("%."+s+"f", d));
 //        return new BigDecimal(d).setScale(scale,BigDecimal.ROUND_HALF_UP).doubleValue();
     }
-
-
-    public static double getT(double degreesOfFreedom,double p){
+    public static double getTValue(double degreesOfFreedom, double p){
         TDistribution t = new TDistribution(degreesOfFreedom);
         double value = t.inverseCumulativeProbability(1 - p/2);
 //        double value = t.inverseCumulativeProbability(1 - 0.01/2);
         return format(value,2);
     }
 
-    public static double getC(double degreesOfFreedom, int level){
-        return getC(degreesOfFreedom,level,0.05);
-    }
-
-    public static double getC(double degreesOfFreedom, int level,double p){
-        ChiSquaredDistribution x2 = new ChiSquaredDistribution( 10 );
+    public static double getCValue(double degreesOfFreedom, int level, double p){
+        ChiSquaredDistribution x2 = new ChiSquaredDistribution( degreesOfFreedom );
         return x2.inverseCumulativeProbability(1 - p/level);//level
     }
 
 
-    public  double[][] transposeMatrix(double[][] before) {
+    public static double[][] transposeMatrix(double[][] before) {
         double[][] after = new double[before[0].length][before.length];
         for (int i = 0; i < after.length; i++) {
             for (int j = 0; j < after[i].length; j++) {
@@ -51,6 +42,7 @@ public abstract class PVModel {
 
     public abstract TableDTO buildDataTableDTO();
     public abstract SheetDTO[] buildSheetDTO();
+    public abstract String generateResult();
 
     public int getScale() {
         return scale;
@@ -60,6 +52,14 @@ public abstract class PVModel {
         this.scale = scale;
     }
 
+    public String getUnits() {
+        return units;
+    }
+
+    public void setUnits(String units) {
+        this.units = units;
+    }
+
     public static double[] transposeXValue(xValue[] xValues){
         double[] doubles = new double[xValues.length];
         for (int i = 0; i < doubles.length; i++) {

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

@@ -1,16 +1,14 @@
 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;
-import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 
 import java.util.*;
 
 public class PrecisionEP15 extends PVModel {
 
-    private List<Item> items = new ArrayList<>(); //[day][replicate]
+    private List<PrecisionEP15Item> items = new ArrayList<>(); //[day][replicate]
 
     private String[] specimensName;
 
@@ -19,8 +17,8 @@ public class PrecisionEP15 extends PVModel {
         this.setScale(decimal);
     }
 
-    public void buildItem(String name,double[][] data, double allowableCvr, double allowableCv1 ){
-        items.add(new Item(name,data,allowableCvr,allowableCv1));
+    public void buildItem(String name,double[][] data, double allowableCvr, double allowableCv1 ,int level,int range){
+        items.add(new PrecisionEP15Item(name,data,allowableCvr,allowableCv1,level,range));
     }
 
 
@@ -71,208 +69,40 @@ public class PrecisionEP15 extends PVModel {
         return reports;
     }
 
-    private Map<String, TableDTO> buildTable1DTO(Item item) {
+    @Override
+    public String generateResult() {
+        return EchartsFreemarkerUtils.generate("/report/precisionEP15A2.ftl",this);
+
+    }
+
+    private Map<String, TableDTO> buildTable1DTO(PrecisionEP15Item item) {
         Map<String, TableDTO> reports = new HashMap<>();
         TableDTO table = new TableDTO();
         String[][] data = new String[8][2];
 
-        data[0] =new String[]{"总均值" , format(item.mean)};
-        data[1] =new String[]{"批内方差 (V<sub>r</sub>)" , format(item.vr)};
-        data[2] =new String[]{"批内标准差 (S<sub>r</sub>)" , format(item.sr)};
-        data[3] =new String[]{"批内变异系数 (CV<sub>r</sub>)" , format(item.cvr)};
-        data[4] =new String[]{"",""};
-        data[5] =new String[]{"批间方差 (V<sub>b</sub>)" , format(item.vb)};
-//        data[4] =new String[]{"批间标准差 (S<sub>b</sub>)" , format(item.sb)};
-        data[6] =new String[]{"实验室内标准差 (S<sub>1</sub>)" , format(item.s1)};
-        data[7] =new String[]{"实验室变异系数 (CV)" , format(item.cv1)};
+        data[0] =new String[]{"总均值" , format(item.getMean())};
+        data[1] =new String[]{"批内方差 (V<sub>r</sub>)" , format(item.getVr())};
+        data[2] =new String[]{"批内标准差 (SD<sub>r</sub>)" , format(item.getSdr())};
+        data[3] =new String[]{"批内变异系数 (CV<sub>r</sub>)" , format(item.getCvr())};
+        data[4] =new String[]{"批间标准差 (SD<sub>b</sub>)" , format(item.getSdb())};
+        data[5] =new String[]{"批间方差 (V<sub>b</sub>)" , format(item.getVb())};
+        data[6] =new String[]{"实验室内标准差 (SD<sub>1</sub>)" , format(item.getSd1())};
+        data[7] =new String[]{"实验室变异系数 (CV)" , format(item.getCv1())};
         table.buildData(data);
         reports.put(item.name,table);
         return  reports;
     }
 
-
-    class Item {
-
-        private double[][] data;
-        private String name;
-
-        /*
-
-            Number of replicates 	3
-            Number of days				5
-            A       B       C       D       E           F       G
-                    Rep 1	Rep 2	Rep 3	Run mean	Run SD	Variance
-        5   Day 1	3.3	    3.23	3.43	3.320	    0.101	0.010
-        6   Day 2	3.21	3.45	3.42	3.360	    0.131	0.017
-        7   Day 3	3.21	3.24	3.45	3.300	    0.131	0.017
-        8   Day 4	3.5	    3.45	3.51	3.487	    0.032	0.001
-        9   Day 5	3.33	3.45	3.32	3.367	    0.072	0.005
-
-        11  Over all mean [ Average E5:E9]	        3.367       总均值
-        12  Within run variance Vr [ average G5:G9]	0.010
-        13 Within run SD [SQRT(B12)]	            0.101       批内标准差(Sr)
-        14  Between run SD [SD(E5:E9)]	            0.073
-        15  Between run variance Vb [B14*B14]	    0.005       批间方差
-        16  Ratio Vr/Vb  [+B12/B15]	                1.928
-        17  Total variance [((B2-1)/B2)*B12+B15]	0.012
-        18  Laboratory SD [SQRT B17]	            0.110       室内标准差
-        19  Laboratory CV[ (B18/B11)*100]	        3.259
-        */
-        private double mean;
-        private double sr;
-        private double vb;
-        private double s1;
-
-        private double cvr;
-        private double cv1;
-        private double n;
-
-
-        private double allowableCvr;
-        private double allowableCv1;
-        private double allowableSr;
-        private double allowableS1;
-        private double vr;
-        private double sb;
-
-        public Item(String name,double[][] data, double allowableCvr, double allowableCv1) {
-            this.name = name;
-            this.data = data;
-            this.n = data[0].length;
-            this.allowableCvr = allowableCvr;
-            this.allowableCv1 = allowableCv1;
-            calculate();
-        }
-
-        public double getSr() {
-            return sr;
-        }
-
-        public double getVb() {
-            return vb;
-        }
-
-        public double getMean() {
-            return mean;
-        }
-
-        public void setMean(double mean) {
-            this.mean = mean;
-        }
-
-        public void setSr(double sr) {
-            this.sr = sr;
-        }
-
-        public void setVb(double vb) {
-            this.vb = vb;
-        }
-
-        public double getS1() {
-            return s1;
-        }
-
-        public void setS1(double s1) {
-            this.s1 = s1;
-        }
-
-        public double getCvr() {
-            return cvr;
-        }
-
-        public void setCvr(double cvr) {
-            this.cvr = cvr;
-        }
-
-        public double getCv1() {
-            return cv1;
-        }
-
-        public void setCv1(double cv1) {
-            this.cv1 = cv1;
-        }
-
-
-        public double getAllowableCvr() {
-            return allowableCvr;
-        }
-
-        public void setAllowableCvr(double allowableCvr) {
-            this.allowableCvr = allowableCvr;
-        }
-
-        public double getAllowableCv1() {
-            return allowableCv1;
-        }
-
-        public void setAllowableCv1(double allowableCv1) {
-            this.allowableCv1 = allowableCv1;
-        }
-
-        public double getAllowableSr() {
-            return allowableSr;
-        }
-
-        public void setAllowableSr(double allowableSr) {
-            this.allowableSr = allowableSr;
-        }
-
-        public double getAllowableS1() {
-            return allowableS1;
-        }
-
-        public void setAllowableS1(double allowableS1) {
-            this.allowableS1 = allowableS1;
-        }
-
-        public void calculate() {
-            //批内标准差
-//        xValue[] vrs = Arrays.stream(data).map(SpecimensCalcVO::getVariance).toArray(xValue[]::new);
-//        double withinVr = xAverage.eval(vrs).getDoub();
-//        sr = Math.sqrt(withinVr);
-            double[] vrs = new double[data.length];
-            for (int i = 0; i < data.length; i++) {
-                vrs[i] = StatUtils.variance(data[i]);
-            }
-            vr = StatUtils.mean(vrs);
-            sr = Math.sqrt(vr);
-            //总均值
-//        xValue[] means = Arrays.stream(data).map(SpecimensCalcVO::getMean).toArray(xValue[]::new);
-            double[] means = new double[data.length];
-            for (int i = 0; i < data.length; i++) {
-                means[i] = StatUtils.mean(data[i]);
-            }
-            DescriptiveStatistics stat = new DescriptiveStatistics(means);
-            mean = stat.getMean();
-            //批间标准差
-            sb = stat.getStandardDeviation();
-            //批间方差
-            vb = Math.pow(sb, 2);
-
-            //室内标准差
-            double v = (n - 1) / n;
-            s1 = Math.sqrt(v * vr + vb);
-
-            cvr = (sr / mean) * 100;
-            cv1 = (s1 / mean) * 100;
-
-            //实验室允许不精密度
-            allowableSr = allowableCvr * mean / 100;
-            allowableS1 = allowableCv1 * mean / 100;
-
-
-        }
-    }
-
     public static void main(String[] args) {
         double[][] data = {{3.3, 3.23, 3.43}, {3.21, 3.45, 3.42}, {3.21, 3.24, 3.45}, {3.5, 3.45, 3.51}, {3.33, 3.45, 3.32}};
         PrecisionEP15 precisionEP15 = new PrecisionEP15(new String[]{"test 1","test 2"},3);
-        precisionEP15.buildItem("test 1",data, 0, 0 );
-        precisionEP15.buildItem("test 2",data, 0, 0 );
+        precisionEP15.buildItem("test 1",data, 0, 0 ,2,99);
+        precisionEP15.buildItem("test 2",data, 0, 0 ,2,99);
         TableDTO tableDTO = precisionEP15.buildDataTableDTO();
         SheetDTO[] sheetDTOS = precisionEP15.buildSheetDTO();
+        String s = precisionEP15.generateResult();
 //        ChiSquaredDistribution x2 = new ChiSquaredDistribution( 10 );
 //        double result = x2.inverseCumulativeProbability(1 - 0.05/2);//level
-        System.out.println(precisionEP15);
+        System.out.println(s);
     }
 }

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

@@ -0,0 +1,247 @@
+package com.lc.ibps.components.verification.model2;
+
+import org.apache.commons.math3.stat.StatUtils;
+import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
+
+public class PrecisionEP15Item {
+
+    protected double[][] data;
+    protected String name;
+
+    /*
+
+        Number of replicates 	3
+        Number of days				5
+        A       B       C       D       E           F       G
+                Rep 1	Rep 2	Rep 3	Run mean	Run SD	Variance
+    5   Day 1	3.3	    3.23	3.43	3.320	    0.101	0.010
+    6   Day 2	3.21	3.45	3.42	3.360	    0.131	0.017
+    7   Day 3	3.21	3.24	3.45	3.300	    0.131	0.017
+    8   Day 4	3.5	    3.45	3.51	3.487	    0.032	0.001
+    9   Day 5	3.33	3.45	3.32	3.367	    0.072	0.005
+
+    11  Over all mean [ Average E5:E9]	        3.367       总均值
+    12  Within run variance Vr [ average G5:G9]	0.010
+    13 Within run SD [SQRT(B12)]	            0.101       批内标准差(Sr)
+    14  Between run SD [SD(E5:E9)]	            0.073
+    15  Between run variance Vb [B14*B14]	    0.005       批间方差
+    16  Ratio Vr/Vb  [+B12/B15]	                1.928
+    17  Total variance [((B2-1)/B2)*B12+B15]	0.012
+    18  Laboratory SD [SQRT B17]	            0.110       室内标准差
+    19  Laboratory CV[ (B18/B11)*100]	        3.259
+    */
+    private double mean;
+    private double sdr;
+    private double vb;
+    private double sd1;
+    private double sdb;
+
+    private double cvr;
+    private double cv1;
+    private double n; //replicates
+
+
+    private double allowableCvr;
+    private double allowableCv1;
+    private double allowableSr;
+    private double allowableS1;
+    private double vr;
+
+
+    private double t;
+    private double c;
+    private double v;
+    private int level;
+
+    private double p;//0.01 or 0.05
+
+    public PrecisionEP15Item(String name,double[][] data, double allowableCvr, double allowableCv1,int level,int range) {
+        this.name = name;
+        this.data = data;
+        this.n = data[0].length;
+        this.allowableCvr = allowableCvr;
+        this.allowableCv1 = allowableCv1;
+        this.level = level;
+        if(range > 0 && range < 100){
+            this.p = (double) (100-range)/100;
+        }else{
+            this.p = 0.01;
+        }
+        calculate();
+    }
+
+    public double getN() {
+        return n;
+    }
+
+    public void setN(double n) {
+        this.n = n;
+    }
+
+    public double getVr() {
+        return vr;
+    }
+
+    public void setVr(double vr) {
+        this.vr = vr;
+    }
+
+    public double getSdb() {
+        return sdb;
+    }
+
+    public void setSdb(double sdb) {
+        this.sdb = sdb;
+    }
+
+    public double getSdr() {
+        return sdr;
+    }
+
+    public double getVb() {
+        return vb;
+    }
+
+    public double getMean() {
+        return mean;
+    }
+
+    public void setMean(double mean) {
+        this.mean = mean;
+    }
+
+    public void setSdr(double sdr) {
+        this.sdr = sdr;
+    }
+
+    public void setVb(double vb) {
+        this.vb = vb;
+    }
+
+    public double getSd1() {
+        return sd1;
+    }
+
+    public void setSd1(double sd1) {
+        this.sd1 = sd1;
+    }
+
+    public double getCvr() {
+        return cvr;
+    }
+
+    public void setCvr(double cvr) {
+        this.cvr = cvr;
+    }
+
+    public double getCv1() {
+        return cv1;
+    }
+
+    public void setCv1(double cv1) {
+        this.cv1 = cv1;
+    }
+
+
+    public double getAllowableCvr() {
+        return allowableCvr;
+    }
+
+    public void setAllowableCvr(double allowableCvr) {
+        this.allowableCvr = allowableCvr;
+    }
+
+    public double getAllowableCv1() {
+        return allowableCv1;
+    }
+
+    public void setAllowableCv1(double allowableCv1) {
+        this.allowableCv1 = allowableCv1;
+    }
+
+    public double getAllowableSr() {
+        return allowableSr;
+    }
+
+    public void setAllowableSr(double allowableSr) {
+        this.allowableSr = allowableSr;
+    }
+
+    public double getAllowableS1() {
+        return allowableS1;
+    }
+
+    public void setAllowableS1(double allowableS1) {
+        this.allowableS1 = allowableS1;
+    }
+
+    public double getT() {
+        return t;
+    }
+
+    public void setT(double t) {
+        this.t = t;
+    }
+
+    public double getC() {
+        return c;
+    }
+
+    public void setC(double c) {
+        this.c = c;
+    }
+
+    public double getV() {
+        return v;
+    }
+
+    public void setV(double v) {
+        this.v = v;
+    }
+
+    public void calculate() {
+        //批内标准差
+//        xValue[] vrs = Arrays.stream(data).map(SpecimensCalcVO::getVariance).toArray(xValue[]::new);
+//        double withinVr = xAverage.eval(vrs).getDoub();
+//        sr = Math.sqrt(withinVr);
+        double[] vrs = new double[data.length];
+        for (int i = 0; i < data.length; i++) {
+            vrs[i] = StatUtils.variance(data[i]);
+        }
+        vr = StatUtils.mean(vrs);
+        sdr = Math.sqrt(vr);//SDr 为批内标准差
+        //总均值
+//        xValue[] means = Arrays.stream(data).map(SpecimensCalcVO::getMean).toArray(xValue[]::new);
+        double[] means = new double[data.length];
+        for (int i = 0; i < data.length; i++) {
+            means[i] = StatUtils.mean(data[i]);
+        }
+        DescriptiveStatistics stat = new DescriptiveStatistics(means);
+        mean = stat.getMean();
+        //批间标准差
+        sdb = stat.getStandardDeviation();//SDb 为批间标准差
+        //批间方差
+        vb = Math.pow(sdb, 2);
+
+        //室内标准差
+        double vv = (n - 1) / n;
+        sd1 = Math.sqrt(vv * vr + vb);//SDl 为实验室标准差
+
+        cvr = (sdr / mean) * 100;
+        cv1 = (sd1 / mean) * 100;
+
+        //实验室允许不精密度
+        allowableSr = allowableCvr * mean / 100;
+        allowableS1 = allowableCv1 * mean / 100;
+        double d = data.length;
+
+
+        //t=((((C14-1)*(C16^2))+(C14*M11))^2)/(((C14-1)/C13*(C16^4))+(((C14^2)*(M11^2))/(C13-1)))
+        t = (Math.pow((((n-1)*(Math.pow(sdr,2)))+(n*vb)),2))/(((n-1)/d*(Math.pow(sdr,4)))+(((Math.pow(n,2))*(Math.pow(vb,2)))/(d-1)));
+        c= PVModel.getCValue(t,level,0.05);
+        double sdclarim = 3;
+
+        v = sdclarim *  Math.sqrt(c/t);
+
+    }
+}

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

@@ -1,5 +1,7 @@
 package com.lc.ibps.components.verification.model2;
 
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.lc.ibps.components.verification.report.ChartDTO;
 import com.lc.ibps.components.verification.report.EchartsFreemarkerUtils;
 import com.lc.ibps.components.verification.report.SheetDTO;
@@ -37,7 +39,7 @@ public class TruenessEP15Patient extends PVModel {
         meanX = StatUtils.mean(x);
         meanY = StatUtils.mean(y);
         if(t == 0){
-            this.t = getT(this.y.length-1,0.01);
+            this.t = getTValue(this.y.length-1,0.01);
         }else {
             this.t = t;
         }
@@ -214,18 +216,55 @@ public class TruenessEP15Patient extends PVModel {
         return new SheetDTO[]{sheet};
     }
 
+    @Override
+    public String generateResult() {
+        return EchartsFreemarkerUtils.generate("/report/truesnessUsingPatient.ftl",this);
+    }
+
     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);
+//        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));
+        config.put("data", JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect));
+        chartDTO.setOption(EchartsFreemarkerUtils.generateChart("/scatter/linesForRange.ftl",config));
         return chartDTO;
     }
+
+    public static void main(String[] args) {
+        double[][] data = {{125,123},
+                {77,74  },
+                {320,315},
+                {303,296},
+                {29,25  },
+                {221,218},
+                {44,40  },
+                {154,154},
+                {388,378},
+                {95,94  },
+                {238,241},
+                {74,71  },
+                {310,306},
+                {370,370},
+                {100,98 },
+                {168,162},
+                {54,58  },
+                {180,183},
+                {210,202},
+                {435,430}};
+        TruenessEP15Patient tr = new TruenessEP15Patient(transposeMatrix(data), 2,0,3);
+        tr.setUnits("mmol/L");
+        TableDTO tableDTO = tr.buildDataTableDTO();
+        SheetDTO[] sheetDTOS = tr.buildSheetDTO();
+        String s = tr.generateResult();
+
+//        ChiSquaredDistribution x2 = new ChiSquaredDistribution( 10 );
+//        double result = x2.inverseCumulativeProbability(1 - 0.05/2);//level
+        System.out.println(s);
+    }
 }

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

@@ -1,6 +1,6 @@
 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.descriptive.DescriptiveStatistics;
@@ -9,7 +9,7 @@ import java.util.*;
 
 public class TruenessRefernece extends PVModel {
 
-    private List<Item> items = new ArrayList<>();
+    private List<TruenessReferneceItem> items = new ArrayList<>();
     private String[] specimensName;
 
     public TruenessRefernece(String[] specimensName, int decimal) {
@@ -18,165 +18,7 @@ public class TruenessRefernece extends PVModel {
     }
 
     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;
-        private double[] calcData;
-
-        private double target;
-        private double mean;
-        private double sd;
-        private double se;
-        private double ucl;//Upper confidence limit
-        private double lcl;//Lower confidence limit
-        private double uvl;//Upper verification limit
-        private double lvl;//Lower verification limit
-
-        private double t;//t critical
-        private double sdClaim;//SD assigned value
-
-        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) {
-                    calcData[i++] = dd;
-                }
-            }
-            this.target = target;
-            this.sdClaim = sdClaim;
-            if (t == 0) {
-                this.t = PVModel.getT(calcData.length - 1, 0.01);
-            } else {
-                this.t = t;
-            }
-            calculate();
-        }
-
-        /*
-        Reference assigned value 50mg/dl
-
-          Day 1	Replicate 1	48
-                  Replicate 2	46
-          Day 2	Replicate 1	48
-                  Replicate 2	47
-          Day 3	Replicate 1	46
-                  Replicate 2	46
-          Day 4	Replicate 1	48
-                  Replicate 2	47
-          Day 5	Replicate 1	47
-                  Replicate 2	46
-
-          Count	    Count(C3:c12)	    10
-          SQRT        count		        3.16227766
-          Mean	    Average C3 :12	    46.9
-          SD	        SD(C3:C12)	        0.875595036
-          SE of mean                                      C17/SQRT14		0.276887462
-          t critical 		                                                3.25
-          Upper confidence limit	                        c16 +c19*c18	47.79988425
-          Lower confidence limit	                        c16 -c19*c18	46.00011575
-          SD assigned value 		                                        0.15
-          Combined SD uncertainity SE square + SD assign value square		0.099166667
-          Combined SD uncertaininty SQRT (SE square + SD assign)		    0.314907394
-          Upper verification limit		                                47.92344903
-          Lower verification limit		                                45.87655097
-      */
-        public void calculate() {
-            DescriptiveStatistics stat = new DescriptiveStatistics(calcData);
-            mean = stat.getMean();
-            sd = stat.getStandardDeviation();
-            se = sd / Math.sqrt(calcData.length);
-            ucl = mean + t * se;
-            lcl = mean - t * se;
-            double combinedSD = Math.sqrt(se * se + sdClaim * sdClaim);
-            uvl = mean + t * combinedSD;
-            lvl = mean - t * combinedSD;
-        }
-
-        public double getTarget() {
-            return target;
-        }
-
-        public void setTarget(double target) {
-            this.target = target;
-        }
-
-        public double getMean() {
-            return mean;
-        }
-
-        public void setMean(double mean) {
-            this.mean = mean;
-        }
-
-        public double getSd() {
-            return sd;
-        }
-
-        public void setSd(double sd) {
-            this.sd = sd;
-        }
-
-        public double getSe() {
-            return se;
-        }
-
-        public void setSe(double se) {
-            this.se = se;
-        }
-
-        public double getUcl() {
-            return ucl;
-        }
-
-        public void setUcl(double ucl) {
-            this.ucl = ucl;
-        }
-
-        public double getLcl() {
-            return lcl;
-        }
-
-        public void setLcl(double lcl) {
-            this.lcl = lcl;
-        }
-
-        public double getUvl() {
-            return uvl;
-        }
-
-        public void setUvl(double uvl) {
-            this.uvl = uvl;
-        }
-
-        public double getLvl() {
-            return lvl;
-        }
-
-        public void setLvl(double lvl) {
-            this.lvl = lvl;
-        }
-
-        public double getT() {
-            return t;
-        }
-
-        public void setT(double t) {
-            this.t = t;
-        }
-
-        public double getSdClaim() {
-            return sdClaim;
-        }
-
-        public void setSdClaim(double sdClaim) {
-            this.sdClaim = sdClaim;
-        }
+        items.add(new TruenessReferneceItem(name, data, target, sdClaim, t));
     }
 
     @Override
@@ -224,31 +66,55 @@ public class TruenessRefernece extends PVModel {
         return reports;
     }
 
-    private Map<String, TableDTO> buildTable1DTO(Item item) {
+    private Map<String, TableDTO> buildTable1DTO(TruenessReferneceItem item) {
         Map<String, TableDTO> reports = new HashMap<>();
         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.getMean())};
+        data[1] = new String[]{"标准差", format(item.getSd())};
+        data[2] = new String[]{"置信区间上限", format(item.getUcl())};
+        data[3] = new String[]{"置信区间下限", format(item.getLcl())};
+        data[4] = new String[]{"验证区间上限", format(item.getUvl())};
+        data[5] = new String[]{"验证区间下限", format(item.getLvl())};
         table.buildData(data);
         reports.put(item.name, table);
         return reports;
     }
+    @Override
+    public String generateResult(){
+
+        return EchartsFreemarkerUtils.generate("/report/truesnessUsingRefernece.ftl",this);
+    }
+
+    public List<TruenessReferneceItem> getItems() {
+        return items;
+    }
+
+    public void setItems(List<TruenessReferneceItem> items) {
+        this.items = items;
+    }
+
+    public String[] getSpecimensName() {
+        return specimensName;
+    }
+
+    public void setSpecimensName(String[] specimensName) {
+        this.specimensName = specimensName;
+    }
 
     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.setUnits("mmol/L");
         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();
+        String s = tr.generateResult();
+
 //        ChiSquaredDistribution x2 = new ChiSquaredDistribution( 10 );
 //        double result = x2.inverseCumulativeProbability(1 - 0.05/2);//level
-        System.out.println(tr);
+        System.out.println(s);
     }
 }

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

@@ -0,0 +1,178 @@
+package com.lc.ibps.components.verification.model2;
+
+import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
+
+public class TruenessReferneceItem {
+    protected String name;
+    protected double[][] data;
+    private double[] calcData;
+
+    private double target;
+    private double mean;
+    private double sd;
+    private double se;
+    private double ucl;//Upper confidence limit
+    private double lcl;//Lower confidence limit
+    private double uvl;//Upper verification limit
+    private double lvl;//Lower verification limit
+
+    private double t;//t critical
+    private double sdClaim;//SD assigned value
+    private double cse;
+
+    public TruenessReferneceItem(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) {
+                calcData[i++] = dd;
+            }
+        }
+        this.target = target;
+        this.sdClaim = sdClaim;
+        if (t == 0) {
+            this.t = PVModel.getTValue(calcData.length - 1, 0.01);
+        } else {
+            this.t = t;
+        }
+        calculate();
+    }
+
+    /*
+    Reference assigned value 50mg/dl
+
+      Day 1	Replicate 1	48
+              Replicate 2	46
+      Day 2	Replicate 1	48
+              Replicate 2	47
+      Day 3	Replicate 1	46
+              Replicate 2	46
+      Day 4	Replicate 1	48
+              Replicate 2	47
+      Day 5	Replicate 1	47
+              Replicate 2	46
+
+      Count	    Count(C3:c12)	    10
+      SQRT        count		        3.16227766
+      Mean	    Average C3 :12	    46.9
+      SD	        SD(C3:C12)	        0.875595036
+      SE of mean                                      C17/SQRT14		0.276887462
+      t critical 		                                                3.25
+      Upper confidence limit	                        c16 +c19*c18	47.79988425
+      Lower confidence limit	                        c16 -c19*c18	46.00011575
+      SD assigned value 		                                        0.15
+      Combined SD uncertainity SE square + SD assign value square		0.099166667
+      Combined SD uncertaininty SQRT (SE square + SD assign)		    0.314907394
+      Upper verification limit		                                47.92344903
+      Lower verification limit		                                45.87655097
+  */
+    public void calculate() {
+        DescriptiveStatistics stat = new DescriptiveStatistics(calcData);
+        mean = stat.getMean();
+        sd = stat.getStandardDeviation();
+        se = sd / Math.sqrt(calcData.length);
+        ucl = mean + t * se;
+        lcl = mean - t * se;
+        cse = Math.sqrt(se * se + sdClaim * sdClaim);
+        uvl = mean + t * cse;
+        lvl = mean - t * cse;
+    }
+
+    public double getTarget() {
+        return target;
+    }
+
+    public void setTarget(double target) {
+        this.target = target;
+    }
+
+    public double getMean() {
+        return mean;
+    }
+
+    public void setMean(double mean) {
+        this.mean = mean;
+    }
+
+    public double getSd() {
+        return sd;
+    }
+
+    public void setSd(double sd) {
+        this.sd = sd;
+    }
+
+    public double getSe() {
+        return se;
+    }
+
+    public void setSe(double se) {
+        this.se = se;
+    }
+
+    public double getUcl() {
+        return ucl;
+    }
+
+    public void setUcl(double ucl) {
+        this.ucl = ucl;
+    }
+
+    public double getLcl() {
+        return lcl;
+    }
+
+    public void setLcl(double lcl) {
+        this.lcl = lcl;
+    }
+
+    public double getUvl() {
+        return uvl;
+    }
+
+    public void setUvl(double uvl) {
+        this.uvl = uvl;
+    }
+
+    public double getLvl() {
+        return lvl;
+    }
+
+    public void setLvl(double lvl) {
+        this.lvl = lvl;
+    }
+
+    public double getT() {
+        return t;
+    }
+
+    public void setT(double t) {
+        this.t = t;
+    }
+
+    public double getSdClaim() {
+        return sdClaim;
+    }
+
+    public void setSdClaim(double sdClaim) {
+        this.sdClaim = sdClaim;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public double getCse() {
+        return cse;
+    }
+
+    public void setCse(double cse) {
+        this.cse = cse;
+    }
+}

+ 1 - 1
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/regression/PolynomialRegression.java

@@ -47,7 +47,7 @@ public class PolynomialRegression extends Regression{
         for (int i = 0; i < getParameters().length; i++) {
             tValues[i] = getParameters()[i] / getStdErrors()[i];
         }
-        t = PVModel.getT(getDfDependent(), 0.05);
+        t = PVModel.getTValue(getDfDependent(), 0.05);
         if (getParameters().length >2) {
             for (int i = 2; i < getParameters().length; i++) {
                 if(tValues[i] > 0){

+ 9 - 4
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/report/EchartsFreemarkerUtils.java

@@ -11,7 +11,7 @@ import java.util.Map;
 public class EchartsFreemarkerUtils {
     private static final ClassLoader CLASS_LOADER = EchartsFreemarkerUtils.class.getClassLoader();
     // 模板存放的目录
-    private static final String BASE_PATH = "echarts";
+    private static final String BASE_PATH = "pv";
 
     /**
      * 加载模板并生成ECharts的option数据字符串
@@ -19,7 +19,11 @@ public class EchartsFreemarkerUtils {
      * @param data
      * @return {@link String}
      */
-    public static String generate(String templateFileName, Map<String, Object> data) {
+    public static String generateChart(String templateFileName, Map<String, Object> data) {
+        return generate(templateFileName,data).replaceAll( "\\s*|\t|\r|\n", "" );
+    }
+
+    public static String generate(String templateFileName, Object data) {
         Configuration configuration = new Configuration(Configuration.VERSION_2_3_30);
         // 设置默认编码
         configuration.setDefaultEncoding("UTF-8");
@@ -33,14 +37,15 @@ public class EchartsFreemarkerUtils {
             Template template = configuration.getTemplate(templateFileName);
             template.process(data, writer);
             writer.flush();
-            return writer.getBuffer().toString().replaceAll( "\\s*|\t|\r|\n", "" );
+            return writer.getBuffer().toString();
         } catch (Exception e) {
+            System.out.println(e);
         }
         return null;
     }
 
     public static void main(String[] args){
-        final String generate = generate("test.ftl", new HashMap<>());
+        final String generate = generateChart("test.ftl", new HashMap<>());
         System.out.println(generate);
     }
 

+ 3 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/service/impl/PerformanceVerificationServiceImpl.java

@@ -32,6 +32,7 @@ public class PerformanceVerificationServiceImpl implements PerformanceVerificati
 //        InspectionItemVO item = new InspectionItemVO(config);
 //        item.importExcelRecord(applyFiles.getInputStream());
         PVItemBuilder builder = PVItemBuilder.getInstance(config);
+
         builder.importExcelRecord(applyFiles.getInputStream());
         Experimental experimental = experimentalRepository.load(id);
 //        if(!item.isDataPass()){
@@ -39,6 +40,7 @@ public class PerformanceVerificationServiceImpl implements PerformanceVerificati
 //        }
         ReportDataDTO dataDTO = ReportFactory.build(builder);
         experimental.getData().setShiYanShuJu(JSONObject.toJSONString(dataDTO,SerializerFeature.DisableCircularReferenceDetect));
+        experimental.getData().setShiYanJieLun(builder.getPvModel().generateResult());
         experimental.save();
         return dataDTO;
     }
@@ -77,6 +79,7 @@ public class PerformanceVerificationServiceImpl implements PerformanceVerificati
         InspectionConfigVO config = JSON.parseObject(shiYanCanShu, InspectionConfigVO.class);
         config.setName(experimentalPo.getFangAnLeiXing());
         config.setDecimal(Integer.valueOf(experimentalPo.getBaoLiuXiaoShu()));
+        config.setUnits(experimentalPo.getJieGuoDanWei());
         if(ArrayUtils.isEmpty(config.getSpecimensName())){
             String[] names = new String[config.getSpecimensNum()];
             for (int i = 0; i < config.getSpecimensNum(); i++) {

+ 56 - 54
ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/pv/persistence/mapping/Experimental.map.xml

@@ -34,26 +34,27 @@
 		<result property="fuJian" column="FU_JIAN_" jdbcType="VARCHAR"/>
 		<result property="shiYanJieLun" column="SHI_YAN_JIE_LUN_" jdbcType="BLOB"/>
 		<result property="xingNengZhiBia" column="XING_NENG_ZHI_BIA" jdbcType="VARCHAR"/>
+		<result property="zhiBiaoId" column="ZHI_BIAO_ID_" jdbcType="VARCHAR"/>
 	</resultMap>
-	
+
 	<sql id="columns">
-		ID_,TENANT_ID_,IP_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,SHI_FOU_GUO_SHEN_,DI_DIAN_,BIAN_ZHI_REN_,BIAN_ZHI_BU_MEN_,BIAN_ZHI_SHI_JIAN,KUAI_ZHAO_,SHI_YAN_XIANG_MU_,SHI_YAN_FANG_FA_,YANG_BEN_LEI_XING,SHI_YAN_YI_QI_,YI_QI_BIAN_HAO_,KAI_SHI_SHI_JIAN_,JIE_SHU_SHI_JIAN_,JIE_GUO_DAN_WEI_,BAO_LIU_XIAO_SHU_,BEI_ZHU_,FANG_AN_LEI_XING_,SHI_YAN_CAN_SHU_,SHI_YAN_SHU_JU_,SHEN_HE_REN_,BAO_GAO_SHI_JIAN_,FU_JIAN_,SHI_YAN_JIE_LUN_,XING_NENG_ZHI_BIA
+		ID_,TENANT_ID_,IP_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,SHI_FOU_GUO_SHEN_,DI_DIAN_,BIAN_ZHI_REN_,BIAN_ZHI_BU_MEN_,BIAN_ZHI_SHI_JIAN,KUAI_ZHAO_,SHI_YAN_XIANG_MU_,SHI_YAN_FANG_FA_,YANG_BEN_LEI_XING,SHI_YAN_YI_QI_,YI_QI_BIAN_HAO_,KAI_SHI_SHI_JIAN_,JIE_SHU_SHI_JIAN_,JIE_GUO_DAN_WEI_,BAO_LIU_XIAO_SHU_,BEI_ZHU_,FANG_AN_LEI_XING_,SHI_YAN_CAN_SHU_,SHI_YAN_SHU_JU_,SHEN_HE_REN_,BAO_GAO_SHI_JIAN_,FU_JIAN_,SHI_YAN_JIE_LUN_,XING_NENG_ZHI_BIA,ZHI_BIAO_ID_
 	</sql>
-	
+
 	<insert id="create" parameterType="com.lc.ibps.components.pv.persistence.entity.ExperimentalPo">
 		INSERT INTO T_XNYZSYXX
 		(<include refid="columns"/>)
-		VALUES 
-		(#{id,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR}, #{ip,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{shiFouGuoShen,jdbcType=VARCHAR}, #{diDian,jdbcType=VARCHAR}, #{bianZhiRen,jdbcType=VARCHAR}, #{bianZhiBuMen,jdbcType=VARCHAR}, #{bianZhiShiJian,jdbcType=VARCHAR}, #{kuaiZhao,jdbcType=VARCHAR}, #{shiYanXiangMu,jdbcType=VARCHAR}, #{shiYanFangFa,jdbcType=VARCHAR}, #{yangBenLeiXing,jdbcType=VARCHAR}, #{shiYanYiQi,jdbcType=VARCHAR}, #{yiQiBianHao,jdbcType=VARCHAR}, #{kaiShiShiJian,jdbcType=VARCHAR}, #{jieShuShiJian,jdbcType=VARCHAR}, #{jieGuoDanWei,jdbcType=VARCHAR}, #{baoLiuXiaoShu,jdbcType=VARCHAR}, #{beiZhu,jdbcType=VARCHAR}, #{fangAnLeiXing,jdbcType=VARCHAR}, #{shiYanCanShu,jdbcType=BLOB}, #{shiYanShuJu,jdbcType=BLOB}, #{shenHeRen,jdbcType=VARCHAR}, #{baoGaoShiJian,jdbcType=VARCHAR}, #{fuJian,jdbcType=VARCHAR}, #{shiYanJieLun,jdbcType=BLOB}, #{xingNengZhiBia,jdbcType=VARCHAR})
+		VALUES
+		(#{id,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR}, #{ip,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{shiFouGuoShen,jdbcType=VARCHAR}, #{diDian,jdbcType=VARCHAR}, #{bianZhiRen,jdbcType=VARCHAR}, #{bianZhiBuMen,jdbcType=VARCHAR}, #{bianZhiShiJian,jdbcType=VARCHAR}, #{kuaiZhao,jdbcType=VARCHAR}, #{shiYanXiangMu,jdbcType=VARCHAR}, #{shiYanFangFa,jdbcType=VARCHAR}, #{yangBenLeiXing,jdbcType=VARCHAR}, #{shiYanYiQi,jdbcType=VARCHAR}, #{yiQiBianHao,jdbcType=VARCHAR}, #{kaiShiShiJian,jdbcType=VARCHAR}, #{jieShuShiJian,jdbcType=VARCHAR}, #{jieGuoDanWei,jdbcType=VARCHAR}, #{baoLiuXiaoShu,jdbcType=VARCHAR}, #{beiZhu,jdbcType=VARCHAR}, #{fangAnLeiXing,jdbcType=VARCHAR}, #{shiYanCanShu,jdbcType=BLOB}, #{shiYanShuJu,jdbcType=BLOB}, #{shenHeRen,jdbcType=VARCHAR}, #{baoGaoShiJian,jdbcType=VARCHAR}, #{fuJian,jdbcType=VARCHAR}, #{shiYanJieLun,jdbcType=BLOB}, #{xingNengZhiBia,jdbcType=VARCHAR}, #{zhiBiaoId,jdbcType=VARCHAR})
 	</insert>
-	
+
 	<select id="get" parameterType="java.lang.String" resultMap="ExperimentalPo">
-		SELECT <include refid="columns"/> FROM T_XNYZSYXX 
-		WHERE 
+		SELECT <include refid="columns"/> FROM T_XNYZSYXX
+		WHERE
 		ID_=#{id}
 	</select>
-	
-	
+
+
 	<sql id="querySql" >
 		SELECT <include refid="columns"/> FROM T_XNYZSYXX
 		<where>
@@ -68,63 +69,64 @@
 			ORDER BY ID_ DESC
 		</if>
 	</sql>
-	
+
 	<select id="query" parameterType="java.util.Map" resultMap="ExperimentalPo">
 		<include refid="querySql"/>
 	</select>
-	
+
 	<select id="queryIds" parameterType="java.util.Map" resultMap="ExperimentalPo">
 		SELECT ID_ FROM (<include refid="querySql"/>) T
 	</select>
-	
+
 	<select id="findByIds" resultMap="ExperimentalPo">
 		SELECT <include refid="columns"/> FROM T_XNYZSYXX
-			WHERE ID_ in 
-			<foreach item="id" index="index" collection="ids" open="(" separator="," close=")">  
-				#{id}  
-			</foreach>  		
-			ORDER BY ID_ DESC			
-	</select>	
-	
+		WHERE ID_ in
+		<foreach item="id" index="index" collection="ids" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+		ORDER BY ID_ DESC
+	</select>
+
 	<update id="update" parameterType="com.lc.ibps.components.pv.persistence.entity.ExperimentalPo">
 		UPDATE T_XNYZSYXX SET
-		TENANT_ID_=#{tenantId,jdbcType=VARCHAR},
-		IP_=#{ip,jdbcType=VARCHAR},
-		UPDATE_BY_=#{updateBy,jdbcType=VARCHAR},
-		UPDATE_TIME_=#{updateTime,jdbcType=TIMESTAMP},
-		SHI_FOU_GUO_SHEN_=#{shiFouGuoShen,jdbcType=VARCHAR},
-		DI_DIAN_=#{diDian,jdbcType=VARCHAR},
-		BIAN_ZHI_REN_=#{bianZhiRen,jdbcType=VARCHAR},
-		BIAN_ZHI_BU_MEN_=#{bianZhiBuMen,jdbcType=VARCHAR},
-		BIAN_ZHI_SHI_JIAN=#{bianZhiShiJian,jdbcType=VARCHAR},
-		KUAI_ZHAO_=#{kuaiZhao,jdbcType=VARCHAR},
-		SHI_YAN_XIANG_MU_=#{shiYanXiangMu,jdbcType=VARCHAR},
-		SHI_YAN_FANG_FA_=#{shiYanFangFa,jdbcType=VARCHAR},
-		YANG_BEN_LEI_XING=#{yangBenLeiXing,jdbcType=VARCHAR},
-		SHI_YAN_YI_QI_=#{shiYanYiQi,jdbcType=VARCHAR},
-		YI_QI_BIAN_HAO_=#{yiQiBianHao,jdbcType=VARCHAR},
-		KAI_SHI_SHI_JIAN_=#{kaiShiShiJian,jdbcType=VARCHAR},
-		JIE_SHU_SHI_JIAN_=#{jieShuShiJian,jdbcType=VARCHAR},
-		JIE_GUO_DAN_WEI_=#{jieGuoDanWei,jdbcType=VARCHAR},
-		BAO_LIU_XIAO_SHU_=#{baoLiuXiaoShu,jdbcType=VARCHAR},
-		BEI_ZHU_=#{beiZhu,jdbcType=VARCHAR},
-		FANG_AN_LEI_XING_=#{fangAnLeiXing,jdbcType=VARCHAR},
-		SHI_YAN_CAN_SHU_=#{shiYanCanShu,jdbcType=BLOB},
-		SHI_YAN_SHU_JU_=#{shiYanShuJu,jdbcType=BLOB},
-		SHEN_HE_REN_=#{shenHeRen,jdbcType=VARCHAR},
-		BAO_GAO_SHI_JIAN_=#{baoGaoShiJian,jdbcType=VARCHAR},
-		FU_JIAN_=#{fuJian,jdbcType=VARCHAR},
-		SHI_YAN_JIE_LUN_=#{shiYanJieLun,jdbcType=BLOB},
-		XING_NENG_ZHI_BIA=#{xingNengZhiBia,jdbcType=VARCHAR}
+							  TENANT_ID_=#{tenantId,jdbcType=VARCHAR},
+							  IP_=#{ip,jdbcType=VARCHAR},
+							  UPDATE_BY_=#{updateBy,jdbcType=VARCHAR},
+							  UPDATE_TIME_=#{updateTime,jdbcType=TIMESTAMP},
+							  SHI_FOU_GUO_SHEN_=#{shiFouGuoShen,jdbcType=VARCHAR},
+							  DI_DIAN_=#{diDian,jdbcType=VARCHAR},
+							  BIAN_ZHI_REN_=#{bianZhiRen,jdbcType=VARCHAR},
+							  BIAN_ZHI_BU_MEN_=#{bianZhiBuMen,jdbcType=VARCHAR},
+							  BIAN_ZHI_SHI_JIAN=#{bianZhiShiJian,jdbcType=VARCHAR},
+							  KUAI_ZHAO_=#{kuaiZhao,jdbcType=VARCHAR},
+							  SHI_YAN_XIANG_MU_=#{shiYanXiangMu,jdbcType=VARCHAR},
+							  SHI_YAN_FANG_FA_=#{shiYanFangFa,jdbcType=VARCHAR},
+							  YANG_BEN_LEI_XING=#{yangBenLeiXing,jdbcType=VARCHAR},
+							  SHI_YAN_YI_QI_=#{shiYanYiQi,jdbcType=VARCHAR},
+							  YI_QI_BIAN_HAO_=#{yiQiBianHao,jdbcType=VARCHAR},
+							  KAI_SHI_SHI_JIAN_=#{kaiShiShiJian,jdbcType=VARCHAR},
+							  JIE_SHU_SHI_JIAN_=#{jieShuShiJian,jdbcType=VARCHAR},
+							  JIE_GUO_DAN_WEI_=#{jieGuoDanWei,jdbcType=VARCHAR},
+							  BAO_LIU_XIAO_SHU_=#{baoLiuXiaoShu,jdbcType=VARCHAR},
+							  BEI_ZHU_=#{beiZhu,jdbcType=VARCHAR},
+							  FANG_AN_LEI_XING_=#{fangAnLeiXing,jdbcType=VARCHAR},
+							  SHI_YAN_CAN_SHU_=#{shiYanCanShu,jdbcType=BLOB},
+							  SHI_YAN_SHU_JU_=#{shiYanShuJu,jdbcType=BLOB},
+							  SHEN_HE_REN_=#{shenHeRen,jdbcType=VARCHAR},
+							  BAO_GAO_SHI_JIAN_=#{baoGaoShiJian,jdbcType=VARCHAR},
+							  FU_JIAN_=#{fuJian,jdbcType=VARCHAR},
+							  SHI_YAN_JIE_LUN_=#{shiYanJieLun,jdbcType=BLOB},
+							  XING_NENG_ZHI_BIA=#{xingNengZhiBia,jdbcType=VARCHAR},
+							  ZHI_BIAO_ID_=#{zhiBiaoId,jdbcType=VARCHAR}
 		WHERE
-		ID_=#{id}
+			ID_=#{id}
 	</update>
-	
+
 	<delete id="remove" parameterType="java.lang.String">
-		DELETE FROM T_XNYZSYXX 
+		DELETE FROM T_XNYZSYXX
 		WHERE
-		ID_=#{id}
+			ID_=#{id}
 	</delete>
-	
-	
+
+
 </mapper>

+ 23 - 0
ibps-provider-root/modules/provider-business/src/main/resources/pv/report/precisionEP15A2.ftl

@@ -0,0 +1,23 @@
+结果判读
+
+① 与厂家声明的标准差或 CV 比较。如果测得的
+
+SDl 或 CV 小于厂家声明的实验室标准差则通过验
+
+证。若测得的室内标准差大于厂家声明的实验室标
+
+准差则应先计算 T 值(程序计算参数,即有效自由
+
+度),再通过 T 值来计算出“验证值”,验证厂家提供
+
+的精密度声明的上限。如果 SD 低于这一验证值,
+
+则已证实满足厂家的声明要求。
+
+② 与 CLIA’ 88 文件推荐的允许总误差(total allowable error,TEa)比
+
+较。得到的 CV 或标准差与 TEa 进行比较。a. 批内
+
+精密度或标准差应≤TEa 的 1/4。b. 批间精密度或
+
+标准差应≤TEa 的 1/3。

+ 12 - 0
ibps-provider-root/modules/provider-business/src/main/resources/pv/report/truesnessUsingPatient.ftl

@@ -0,0 +1,12 @@
+<p>
+本实验中计算的差值为 ${bias} ${units},自由度为 N-1=${n-1},p=0.01的t临界值为 ${t},
+计算的 SD<sub>diff</sub>为${sdDiff} ${units},当N为${n},图4中,上限为${ucl} ${units},下限为${lcl} ${units}。
+如果厂家声明的差值(“偏倚”)为 ${sdClaim} ${units},
+以相同的方式可计算厂家声明的验证限,图4中可获得验证限为${lvl} ${units}~${uvl} ${units},
+实验室计算的差值(“偏倚”)${bias} ${units},
+    <#if (bias > uvl) || (bias < lvl)>
+其并没有落在验证限之中,因此这些实验数据不能证实正确度。
+    <#else>
+落在验证限之中,证明了厂家的声明。也就是置信限覆盖厂家的声明,因此它们也证明数据与厂家的声明一致。
+    </#if>
+</p>

+ 17 - 0
ibps-provider-root/modules/provider-business/src/main/resources/pv/report/truesnessUsingRefernece.ftl

@@ -0,0 +1,17 @@
+<#list items! as item>
+    <h3>${item.name} 结论判断:</h3>
+    <p>
+        自由度为N-1及p=0.010的临界值为${item.t},计算的99%置信区间为 ${item.lcl} ${units}~${item.ucl} ${units},
+        <#if (item.target > item.ucl) || (item.target < item.lcl)>
+其并没有包括指定值 ${item.target} ${units},因此这些实验数据不能证实正确度。
+        <#else>
+其中包括指定值 ${item.target} ${units},因此这些实验数据能证实正确度。
+        </#if>
+当前指定值的不确定度规定s为 ${item.sdClaim} ${units}。当与实验不确定度合成时,标准差为 ${item.cse} ${units},
+         <#if (item.cse > item.se)>
+扩展的标准不确定度从 ${item.se} ${units}~${item.cse} ${units}。因此验证限稍微宽于置信限,即 ${item.lvl} ${units}~${item.uvl} ${units},比${item.lcl} ${units}~${item.ucl} ${units}范围宽,证明通过这些实验数据没能证实正确度。
+         <#else>
+扩展的标准不确定度从 ${item.se} ${units}~${item.cse} ${units}。因此验证限窄于置信限,即 ${item.lvl} ${units}~${item.uvl} ${units},比${item.lcl} ${units}~${item.ucl} ${units}范围窄,证明通过这些实验数据能证实正确度。
+         </#if>
+    </p>
+</#list>

+ 0 - 0
ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/linearRegression.ftl → ibps-provider-root/modules/provider-business/src/main/resources/pv/scatter/linearRegression.ftl


+ 0 - 0
ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/linesForRange.ftl → ibps-provider-root/modules/provider-business/src/main/resources/pv/scatter/linesForRange.ftl


+ 0 - 0
ibps-provider-root/modules/provider-business/src/main/resources/echarts/scatter/polynomialRegression.ftl → ibps-provider-root/modules/provider-business/src/main/resources/pv/scatter/polynomialRegression.ftl


+ 0 - 0
ibps-provider-root/modules/provider-business/src/main/resources/echarts/test.ftl → ibps-provider-root/modules/provider-business/src/main/resources/pv/test.ftl