package com.zt.life.modules.mainPart.TestScheme.service;
|
|
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.springframework.stereotype.Service;
|
import com.zt.common.db.query.QueryFilter;
|
|
import java.util.ArrayList;
|
import java.util.Formatter;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
|
/**
|
* test_scheme
|
*
|
* @author zt generator
|
* @since 1.0.0 2024-08-07
|
*/
|
@Service
|
public class TestSchemeService extends BaseService<TestSchemeDao, TestScheme> {
|
|
/**
|
* 分页查询
|
*
|
* @param queryFilter
|
* @return
|
*/
|
/* public List<TestScheme> page(QueryFilter queryFilter) {
|
return baseDao.getList(queryFilter.getQueryParams());
|
}
|
*/
|
|
/**
|
* 删除
|
*
|
* @param ids
|
*/
|
public void delete(Long[] ids) {
|
super.deleteLogic(ids);
|
}
|
|
public List<ResultDto> getResult(ConditionDto dto) {
|
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);
|
}
|
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();
|
|
if (value >= strate) {
|
C = i;
|
if (strate - oldvalue < value - strate)
|
C = i - 1;
|
break;
|
}
|
oldvalue = value;
|
}
|
}
|
|
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();//
|
if (data3 != null) {
|
TST1 = data3.getValue() / 2; //T/θ1
|
//TST1 = Convert.ToDouble(TST1.ToString("G2")); //取两位有效数字
|
if (TST1 < 10) TST1 = TST1 + 0.1;
|
T = TST1 * dto.getMinAccepValue(); //总试验时间
|
TST0 = T / dto.getSpecifiedValue(); //T/θ0 TST1 * minAccepValue / specifiedValue
|
}
|
|
double productionRisk = 0; //生产方风险实际值
|
double userRisk = 0; //使用方风险实际值
|
double e = 2.71828182845904523536; //自然数e
|
|
for (int r = 0; r <= C; r++) {
|
productionRisk = productionRisk + Math.pow(TST0, r) * Math.pow(e, -TST0) / getjc(r);
|
userRisk = userRisk + Math.pow(TST1, r) * Math.pow(e, -TST1) / getjc(r);
|
}
|
ResultDto resultDto = new ResultDto();
|
productionRisk = 1 - productionRisk;
|
resultDto.setAcceptNumber(C);
|
resultDto.setTotalTestTime(String.valueOf(Math.round(T)));
|
resultDto.setProductionRiskReal(new Formatter().format("%.2f", productionRisk * 100).toString());
|
resultDto.setUserRiskReal(new Formatter().format("%.2f", userRisk * 100).toString());
|
result.add(resultDto);
|
return result;
|
}
|
|
public List<ResultDto> getCondition2(ConditionDto dto, List<TestScheme> list) {
|
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
|
}
|
double productionRisk = 0;
|
double userRisk = 0;
|
double e = 2.71828182845904523536;
|
for (int r = 0; r <= i; r++) {
|
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.setAcceptNumber(i + 1);
|
resultDto.setTotalTestTime(String.valueOf(Math.round(T)));
|
resultDto.setProductionRiskReal(new Formatter().format("%.2f", productionRisk * 100).toString());
|
resultDto.setUserRiskReal(new Formatter().format("%.2f", userRisk * 100).toString());
|
result.add(resultDto);
|
}
|
return result;
|
}
|
|
private List<ResultDto> getCondition3(ConditionDto dto, List<TestScheme> list) {
|
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;
|
}
|
|
double productionRisk = 0;
|
double userRisk = 0;
|
double e = 2.71828182845904523536;
|
for (int r = 0; r <= i; r++) {
|
productionRisk = productionRisk + Math.pow(TST0, r) * Math.pow(e, -TST0) / getjc(r);
|
userRisk = userRisk + Math.pow(TST1, r) * Math.pow(e, -TST1) / getjc(r);
|
}
|
ResultDto resultDto = new ResultDto();
|
resultDto.setAcceptNumber(i);
|
resultDto.setTotalTestTime(String.valueOf(Math.round(T)));
|
resultDto.setNumber(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);
|
}
|
return result;
|
}
|
|
//计算阶乘
|
int getjc(int a) {
|
int result = 1;
|
for (int i = a; i > 0; i--)
|
result = result * i;
|
return result;
|
}
|
}
|