mark
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.cnbm.processInspection.controller;
|
||||
|
||||
import com.cnbm.basic.dto.FactoryDTO;
|
||||
import com.cnbm.basic.dto.UnitDTO;
|
||||
import com.cnbm.basic.entity.ProductFeatures;
|
||||
import com.cnbm.common.spc.math.StandardDiviation;
|
||||
@@ -13,23 +14,30 @@ import com.cnbm.influx.param.QueryDataParam;
|
||||
import com.cnbm.influx.param.Range;
|
||||
import com.cnbm.influx.param.Tag;
|
||||
import com.cnbm.influx.template.Event;
|
||||
import com.cnbm.processInspection.dto.GraphArg;
|
||||
import com.cnbm.processInspection.dto.InterpretationListArg;
|
||||
import com.cnbm.processInspection.dto.XbarSGraphData;
|
||||
import com.cnbm.processInspection.graphAnalyzed.MeanStandardDeviationGraph;
|
||||
import com.cnbm.qualityPlanning.common.StatisticalControlledTest;
|
||||
import com.cnbm.qualityPlanning.entity.ControlLimit;
|
||||
import com.cnbm.qualityPlanning.entity.Point;
|
||||
import com.cnbm.qualityPlanning.entity.SpecificationLimit;
|
||||
import com.cnbm.qualityPlanning.entity.XbarSPoint;
|
||||
import com.influxdb.client.domain.WritePrecision;
|
||||
import com.influxdb.client.write.Point;
|
||||
import com.influxdb.query.FluxRecord;
|
||||
import com.influxdb.query.FluxTable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@@ -40,8 +48,8 @@ public class ProcessInspectionController {
|
||||
|
||||
|
||||
|
||||
@PostMapping("/XbarSGraph")
|
||||
public R<XbarSGraphData> xbarSGraph() throws Exception {
|
||||
@PostMapping("/XbarSGraphTest")
|
||||
public R<XbarSGraphData> xbarSGraphTest() throws Exception {
|
||||
ProductFeatures productFeatures = new ProductFeatures();
|
||||
productFeatures.setSl(new Float(5));
|
||||
productFeatures.setUsl(new Float(10));
|
||||
@@ -55,6 +63,40 @@ public class ProcessInspectionController {
|
||||
queryDataParam.setMeasurement("Weight");
|
||||
queryDataParam.setRange(new Range(DataUtils.getBeforeDate(10).toInstant(), Instant.now()));
|
||||
meanStandardDeviationGraph.initialDate(queryDataParam);
|
||||
|
||||
XbarSGraphData xbarSGraphData = new XbarSGraphData(
|
||||
meanStandardDeviationGraph.getMsdGraphEntity(),
|
||||
meanStandardDeviationGraph.getXbarCL(),
|
||||
meanStandardDeviationGraph.getSCL(),
|
||||
meanStandardDeviationGraph.getSpecificationLimit(),
|
||||
meanStandardDeviationGraph.getProcessCapacity(),
|
||||
new StandardDiviation(meanStandardDeviationGraph.getXigma(),meanStandardDeviationGraph.getTotalXigma())
|
||||
);
|
||||
|
||||
return R.ok("成功",xbarSGraphData);
|
||||
}
|
||||
|
||||
|
||||
//筛选条件顺序:
|
||||
// ① 先工厂(产品表) => ② 检验类型(产品表)=> ③ 产品名(产品表)=> ④ 工序(产品表)=> ⑤ 特性(检验参数name)( product_features 表) ;;
|
||||
// ① 时间段(influxdb,必填);② 样本大小(界面上可以设置,如果要自己设置,就要更新 ProductFeatures.name)
|
||||
//条件:1.检验时间段(influxdb里面) ; 7.样本大小(这个可选,也可以 用默认,产品那里配置。)
|
||||
// 2.工厂(先放一下) ;
|
||||
// 3.检验类型(产品表) ; 4.产品名 (产品表); 5.工艺流程(就是工序 ,也是设备名,用到工序表); 6.特性(product_features.name ,也是influxdb中的argName) ;
|
||||
@PostMapping("/XbarSGraph")
|
||||
public R<XbarSGraphData> xbarSGraph(@RequestBody GraphArg graphArg) throws Exception {
|
||||
|
||||
ProductFeatures productFeatures = graphArg.getProductFeatures();
|
||||
|
||||
MeanStandardDeviationGraph meanStandardDeviationGraph = new MeanStandardDeviationGraph(productFeatures);
|
||||
if(graphArg.getInterpretationScheme()!=null){
|
||||
meanStandardDeviationGraph.isNeedInterpretation(graphArg.getInterpretationScheme());
|
||||
}
|
||||
QueryDataParam queryDataParam = new QueryDataParam();
|
||||
queryDataParam.setMeasurement(Constant.measurement);
|
||||
queryDataParam.setRange(new Range(graphArg.getBegin().toInstant(), graphArg.getEnd().toInstant()));
|
||||
meanStandardDeviationGraph.initialDate(queryDataParam);
|
||||
|
||||
XbarSGraphData xbarSGraphData = new XbarSGraphData(
|
||||
meanStandardDeviationGraph.getMsdGraphEntity(),
|
||||
meanStandardDeviationGraph.getXbarCL(),
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.cnbm.processInspection.dto;
|
||||
|
||||
import com.cnbm.basic.entity.ProductFeatures;
|
||||
import com.cnbm.influx.param.Range;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Desc: ""
|
||||
* @Author: caixiang
|
||||
* @DATE: 2022/7/26 14:44
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "控制图 查询参数类")
|
||||
public class GraphArg {
|
||||
@ApiModelProperty(value = "检验特性,,全量传过来")
|
||||
private ProductFeatures productFeatures;
|
||||
|
||||
@ApiModelProperty(value = "查询时间段,开始")
|
||||
private Date begin;
|
||||
|
||||
@ApiModelProperty(value = "查询时间段,结束")
|
||||
private Date end;
|
||||
|
||||
@ApiModelProperty(value = "判读方案列表")
|
||||
private List<InterpretationListArg> interpretationScheme;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.cnbm.processInspection.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Desc: ""
|
||||
* @Author: caixiang
|
||||
* @DATE: 2022/7/27 15:56
|
||||
*/
|
||||
@Data
|
||||
public class InterpretationListArg {
|
||||
private Integer number;
|
||||
private Integer arg1;
|
||||
private Integer arg2;
|
||||
}
|
||||
@@ -4,19 +4,16 @@ import com.cnbm.basic.entity.ProductFeatures;
|
||||
import com.cnbm.common.spc.math.Math;
|
||||
import com.cnbm.common.spc.math.StandardDiviation;
|
||||
import com.cnbm.common.spc.util.DataUtils;
|
||||
import com.cnbm.common.utils.DateUtils;
|
||||
import com.cnbm.influx.config.InfluxClient;
|
||||
import com.cnbm.influx.constant.Constant;
|
||||
import com.cnbm.influx.param.PageInfo;
|
||||
import com.cnbm.influx.param.QueryDataParam;
|
||||
import com.cnbm.influx.param.Range;
|
||||
import com.cnbm.influx.param.Tag;
|
||||
import com.cnbm.processInspection.controlCoefficientConstant.XBarSCoefficients;
|
||||
|
||||
import com.cnbm.qualityPlanning.entity.ControlLimit;
|
||||
import com.cnbm.qualityPlanning.entity.ProcessCapability;
|
||||
import com.cnbm.qualityPlanning.entity.SpecificationLimit;
|
||||
import com.cnbm.qualityPlanning.entity.XbarSPoint;
|
||||
import com.cnbm.processInspection.dto.InterpretationListArg;
|
||||
import com.cnbm.qualityPlanning.common.StatisticalControlledTest;
|
||||
import com.cnbm.qualityPlanning.entity.*;
|
||||
import com.influxdb.query.FluxRecord;
|
||||
import com.influxdb.query.FluxTable;
|
||||
import lombok.Data;
|
||||
@@ -51,6 +48,8 @@ public class MeanStandardDeviationGraph {
|
||||
//母体的 xigma ,全局计算的;
|
||||
private Double totalXigma;
|
||||
|
||||
//需要去检验的 判读方案 eg:[1,2,3,4,6]
|
||||
private List<InterpretationListArg> interpretationScheme;
|
||||
|
||||
private Double sbar;
|
||||
private Double xbarbar;
|
||||
@@ -88,6 +87,10 @@ public class MeanStandardDeviationGraph {
|
||||
return res;
|
||||
}
|
||||
|
||||
public void isNeedInterpretation(List<InterpretationListArg> list){
|
||||
this.interpretationScheme = list;
|
||||
}
|
||||
|
||||
/**
|
||||
* name : 初始化数据函数
|
||||
* desc : 从influxdb 里面读取数据,然后 加工处理成 我需要的
|
||||
@@ -131,7 +134,8 @@ public class MeanStandardDeviationGraph {
|
||||
new Double(0),
|
||||
xbar,
|
||||
s,
|
||||
r
|
||||
r,
|
||||
doubleListList.get(i)
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -145,8 +149,72 @@ public class MeanStandardDeviationGraph {
|
||||
Double sbar = Math.getMean(toDoubleArray(sArray.toArray()));
|
||||
Double rbar = Math.getMean(toDoubleArray(rArray.toArray()));
|
||||
this.msdGraphEntity = new MSDGraphEntity(list,xbarbar,sbar,rbar);
|
||||
|
||||
//4.判读方案 校验
|
||||
// 开始
|
||||
if(this.interpretationScheme != null){
|
||||
List<Point> forXBar = new ArrayList<>();
|
||||
List<Point> forS = new ArrayList<>();
|
||||
for(XbarSPoint x:list){
|
||||
forXBar.add(new Point(x.getPosition(),x.getXbar()));
|
||||
forS.add(new Point(x.getPosition(),x.getS()));
|
||||
}
|
||||
ControlLimit xbarcl = getXbarCL();
|
||||
ControlLimit scl = getSCL();
|
||||
|
||||
for(InterpretationListArg arg : this.interpretationScheme){
|
||||
switch (arg.getNumber())//值必须是整型或者字符型
|
||||
{
|
||||
case 1:
|
||||
StatisticalControlledTest.rule1(forXBar,xbarcl);
|
||||
StatisticalControlledTest.rule1(forS,scl);
|
||||
break;
|
||||
case 2:
|
||||
StatisticalControlledTest.rule2(forXBar,xbarcl,arg.getArg1());
|
||||
StatisticalControlledTest.rule2(forS,scl,arg.getArg1());
|
||||
break;
|
||||
case 3:
|
||||
StatisticalControlledTest.rule3(forXBar,arg.getArg1());
|
||||
StatisticalControlledTest.rule3(forS,arg.getArg1());
|
||||
break;
|
||||
case 4:
|
||||
StatisticalControlledTest.rule4(forXBar,arg.getArg1());
|
||||
StatisticalControlledTest.rule4(forS,arg.getArg1());
|
||||
break;
|
||||
case 5:
|
||||
StatisticalControlledTest.rule5(forXBar,xbarcl,arg.getArg1(), arg.getArg2());
|
||||
StatisticalControlledTest.rule5(forS,scl,arg.getArg1(), arg.getArg2());
|
||||
break;
|
||||
case 6:
|
||||
StatisticalControlledTest.rule6(forXBar,xbarcl,arg.getArg1(), arg.getArg2());
|
||||
StatisticalControlledTest.rule6(forS,scl,arg.getArg1(), arg.getArg2());
|
||||
break;
|
||||
case 7:
|
||||
StatisticalControlledTest.rule7(forXBar,xbarcl,arg.getArg1());
|
||||
StatisticalControlledTest.rule7(forS,scl, arg.getArg1());
|
||||
|
||||
break;
|
||||
case 8:
|
||||
StatisticalControlledTest.rule8(forXBar,xbarcl, arg.getArg1());
|
||||
StatisticalControlledTest.rule8(forS,scl, arg.getArg1());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0;i<list.size();i++){
|
||||
list.get(i).setsUnsatisfiedRules(forS.get(i).getUnsatisfiedRules());
|
||||
list.get(i).setXbarUnsatisfiedRules(forXBar.get(i).getUnsatisfiedRules());
|
||||
}
|
||||
}
|
||||
// 结束
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* desc: get Xbar控制图 的控制限
|
||||
* 注意:此函数 要在 initialDate()函数执行之后
|
||||
|
||||
Reference in New Issue
Block a user