From 9fdb8bef649c8bba6ea97330d0e509fade235417 Mon Sep 17 00:00:00 2001
From: jinlin <jinlin>
Date: 星期三, 23 十月 2024 10:39:24 +0800
Subject: [PATCH] 关于修改可靠性产品重复
---
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/TestScheme/service/TestSchemeService.java | 177 ++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 114 insertions(+), 63 deletions(-)
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/TestScheme/service/TestSchemeService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/TestScheme/service/TestSchemeService.java
index e39eb41..e77e792 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/TestScheme/service/TestSchemeService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/TestScheme/service/TestSchemeService.java
@@ -1,17 +1,22 @@
package com.zt.life.modules.mainPart.TestScheme.service;
+import cn.hutool.core.convert.Convert;
import com.zt.common.service.BaseService;
import com.zt.life.modules.mainPart.TestScheme.dao.TestSchemeDao;
import com.zt.life.modules.mainPart.TestScheme.dto.ConditionDto;
import com.zt.life.modules.mainPart.TestScheme.dto.ResultDto;
import com.zt.life.modules.mainPart.TestScheme.model.TestScheme;
+import org.apache.commons.math3.distribution.ChiSquaredDistribution;
import org.springframework.stereotype.Service;
import com.zt.common.db.query.QueryFilter;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
@@ -44,35 +49,67 @@
}
public List<ResultDto> getResult(ConditionDto dto) {
+ this.insertNum();
List<ResultDto> result = new ArrayList<>();
- List<TestScheme> list = baseDao.getList();
- if (dto.getTjlx().equals("鏉′欢1")) {
- result = this.getCondition1(dto, list);
- } else if (dto.getTjlx().equals("鏉′欢2")) {
- result = this.getCondition2(dto, list);
- } else if (dto.getTjlx().equals("鏉′欢3")) {
- result = this.getCondition3(dto, list);
+ switch (dto.getTjlx()) {
+ case "鎸夐闄╁悕涔夊�兼煡璇�":
+ result = this.getCondition1(dto);
+ break;
+ case "涓嶉檺瀹氱敓浜ф柟椋庨櫓鏌ヨ":
+ result = this.getCondition2(dto);
+ break;
+ case "涓嶉檺瀹氭楠屼笂闄愭煡璇�":
+ result = this.getCondition3(dto);
+ break;
}
return result;
}
- private List<ResultDto> getCondition1(ConditionDto dto, List<TestScheme> list) {
- List<ResultDto> result = new ArrayList<>();
- int C = 0;
- double oldvalue = 0;
- for (int i = 1; i <= 10; i++) {
- Integer finalI = i;
- TestScheme data1 = list.stream().filter(k -> k.getPa().equals(dto.getUserRisk()) && k.getPc() == (2 * finalI + 2)).findFirst().get();//
- TestScheme data2 = list.stream().filter(k -> k.getPa().equals(1 - dto.getUserRisk()) && k.getPc() == (2 * finalI + 2)).findFirst().get();//
- if (data1 != null && data2 != null) {
- Double value = data2.getValue() / data1.getValue();
- double strate = dto.getMinAccepValue() / dto.getSpecifiedValue();
+ private void insertNum() {
+ baseDao.insertNum();
+ }
- if (value >= strate) {
- C = i;
- if (strate - oldvalue < value - strate)
- C = i - 1;
- break;
+ private List<ResultDto> getCondition1(ConditionDto dto) {
+ List<ResultDto> result = new ArrayList<>();
+ int C = 1;
+ double oldvalue = 0;
+ double strate = dto.getMinAccepValue() / dto.getSpecifiedValue();
+ for (int i = 1; i <= 10000; i++) {
+ Double data1 = getUpperQuantile(1 - dto.getProductionRisk(), 2 * i + 2);
+ Double data2 = getUpperQuantile(dto.getUserRisk(), 2 * i + 2);//绠楁硶璁$畻
+ if (data1 != null && data2 != null) {
+ double value = data1 / data2;
+ System.out.println(value);
+ if (dto.getUserRisk() < 1 - dto.getProductionRisk()) {
+ if (oldvalue != 0) {
+ if (value > strate) {
+ C = i;
+ if (strate - oldvalue < value - strate) {
+ C = i - 1;
+ }
+ break;
+ }
+ } else {
+ if (value > strate) {
+ C = i;
+ break;
+ }
+ }
+ } else {
+ if (oldvalue != 0) {
+ if (value < strate) {
+ C = i;
+ if (oldvalue - strate < strate - value) {
+ C = i - 1;
+ }
+ break;
+ }
+ } else {
+ if (value < strate) {
+ C = i;
+ break;
+ }
+ }
}
oldvalue = value;
}
@@ -81,12 +118,13 @@
double T = 0; //鎬昏瘯楠屾椂闂�
double TST1 = 0; //T/胃1
double TST0 = 0; //T/胃0
- Integer finalC = C;
- TestScheme data3 = list.stream().filter(k -> k.getPa().equals(1 - dto.getUserRisk()) && k.getPc() == (2 * finalC + 2)).findFirst().get();//
+ Double data3 = getUpperQuantile(dto.getUserRisk(), 2 * C + 2);
if (data3 != null) {
- TST1 = data3.getValue() / 2; //T/胃1
+ TST1 = data3 / 2; //T/胃1
//TST1 = Convert.ToDouble(TST1.ToString("G2")); //鍙栦袱浣嶆湁鏁堟暟瀛�
- if (TST1 < 10) TST1 = TST1 + 0.1;
+ if (TST1 < 10) {
+ TST1 = TST1 + 0.1;
+ }
T = TST1 * dto.getMinAccepValue(); //鎬昏瘯楠屾椂闂�
TST0 = T / dto.getSpecifiedValue(); //T/胃0 TST1 * minAccepValue / specifiedValue
}
@@ -96,11 +134,16 @@
double e = 2.71828182845904523536; //鑷劧鏁癳
for (int r = 0; r <= C; r++) {
- productionRisk = productionRisk + Math.pow(TST0, r) * Math.pow(e, -TST0) / getjc(r);
+ double a = Math.pow(TST0, r) * Math.pow(e, -TST0) / getjc(r);
+ /* if (r>35){
+ System.out.println(111);
+ }*/
+ productionRisk = productionRisk + a;
userRisk = userRisk + Math.pow(TST1, r) * Math.pow(e, -TST1) / getjc(r);
}
- ResultDto resultDto = new ResultDto();
productionRisk = 1 - productionRisk;
+
+ ResultDto resultDto = new ResultDto();
resultDto.setAcceptNumber(C);
resultDto.setTotalTestTime(String.valueOf(Math.round(T)));
resultDto.setProductionRiskReal(new Formatter().format("%.2f", productionRisk * 100).toString());
@@ -109,20 +152,19 @@
return result;
}
- public List<ResultDto> getCondition2(ConditionDto dto, List<TestScheme> list) {
+ public List<ResultDto> getCondition2(ConditionDto dto) {
List<ResultDto> result = new ArrayList<>();
- for (Integer i = 0; i < dto.getShowFailureTime(); i++) {
- Integer finalI = i;
- List<TestScheme> data = list.stream().filter(k -> k.getPa().equals(dto.getUserRisk()) && k.getPc() == (2 * finalI + 2)).collect(Collectors.toList());//
- ResultDto resultDto = new ResultDto();
- double T = 0;
- double TST1 = 0; // T/胃1
- double TST0 = 0;// T/胃0
- for (TestScheme item : data) {
- TST1 = item.getValue() / 2;
- T = TST1 * dto.getMinAccepValue();
- TST0 = T / dto.getSpecifiedValue(); // T/胃0
- }
+ for (int i = 0; i < dto.getShowFailureTime(); i++) {
+ double T;
+ double TST1; // T/胃1
+ double TST0;// T/胃0
+
+ Double data2 = getUpperQuantile(dto.getUserRisk(), 2 * i + 2);
+ TST1 = data2 / 2;
+ T = TST1 * dto.getMinAccepValue();
+ TST0 = T / dto.getSpecifiedValue(); // T/胃0
+
+
double productionRisk = 0;
double userRisk = 0;
double e = 2.71828182845904523536;
@@ -132,6 +174,7 @@
}
productionRisk = 1 - productionRisk;
+ ResultDto resultDto = new ResultDto();
resultDto.setAcceptNumber(i + 1);
resultDto.setTotalTestTime(String.valueOf(Math.round(T)));
resultDto.setProductionRiskReal(new Formatter().format("%.2f", productionRisk * 100).toString());
@@ -141,24 +184,21 @@
return result;
}
- private List<ResultDto> getCondition3(ConditionDto dto, List<TestScheme> list) {
+ private List<ResultDto> getCondition3(ConditionDto dto) {
List<ResultDto> result = new ArrayList<>();
- for (int i = 0; i <= dto.getShowFailureTime(); i++) {
- Integer finalI = i;
- List<TestScheme> data = list.stream().filter(k -> k.getPa().equals(dto.getUserRisk()) && k.getPc() == (2 * finalI + 2)).collect(Collectors.toList());//
- List<TestScheme> data2 = list.stream().filter(k -> k.getPa().equals(1 - dto.getProductionRisk()) && k.getPc() == (2 * finalI + 2)).collect(Collectors.toList());//
- double T = 0;
- double TST1 = 0; // T/胃1
- double TST0 = 0;// T/胃0
- double ST0 = 0; // 胃0
- for (TestScheme item : data) {
- TST1 = item.getValue() / 2;
- T = TST1 * dto.getMinAccepValue();
- for (TestScheme item2 : data2) {
- ST0 = item.getValue() * dto.getMinAccepValue() / item2.getValue();
- }
- TST0 = T / ST0;
- }
+ for (int i = 0; i < dto.getShowFailureTime(); i++) {
+ double T;
+ double TST1; // T/胃1
+ double TST0;// T/胃0
+ double ST0; // 胃0
+
+ Double data1 = getUpperQuantile(dto.getUserRisk(), 2 * i + 2);
+ Double data2 = getUpperQuantile(1 - dto.getProductionRisk(), 2 * i + 2);
+ TST1 = data1 / 2;
+ T = TST1 * dto.getMinAccepValue();
+ ST0 = data1 * dto.getMinAccepValue() / data2;
+ TST0 = T / ST0;
+
double productionRisk = 0;
double userRisk = 0;
@@ -167,10 +207,12 @@
productionRisk = productionRisk + Math.pow(TST0, r) * Math.pow(e, -TST0) / getjc(r);
userRisk = userRisk + Math.pow(TST1, r) * Math.pow(e, -TST1) / getjc(r);
}
+ productionRisk = 1 - productionRisk;
+
ResultDto resultDto = new ResultDto();
- resultDto.setAcceptNumber(i);
+ resultDto.setAcceptNumber(i + 1);
resultDto.setTotalTestTime(String.valueOf(Math.round(T)));
- resultDto.setNumber(String.valueOf(Math.round(ST0)));
+ resultDto.setSpecifiedValue(String.valueOf(Math.round(ST0)));//妫�楠屼笂闄�
resultDto.setProductionRiskReal(new Formatter().format("%.2f", productionRisk * 100).toString());
resultDto.setUserRiskReal(new Formatter().format("%.2f", userRisk * 100).toString());
result.add(resultDto);
@@ -179,10 +221,19 @@
}
//璁$畻闃朵箻
- int getjc(int a) {
- int result = 1;
+ Double getjc(int a) {
+ double result = 1.0;
for (int i = a; i > 0; i--)
result = result * i;
return result;
}
+
+ //鍗℃柟鍒嗗竷鐨勪笂渚卞垎浣嶆暟绠楁硶
+ public Double getUpperQuantile(Double alpha, Integer degreesOfFreedom) {
+ ChiSquaredDistribution chiSquaredDistribution = new ChiSquaredDistribution(degreesOfFreedom);
+ Double upperQuantile = chiSquaredDistribution.inverseCumulativeProbability(1 - alpha);
+ String str = String.format("%.4f", upperQuantile);
+ upperQuantile = Convert.toDouble(str);
+ return upperQuantile;
+ }
}
--
Gitblit v1.9.1