diff --git a/ym-influx/src/main/java/com/cnbm/influx/config/InfluxClient.java b/ym-influx/src/main/java/com/cnbm/influx/config/InfluxClient.java index bed6e47..0a144ca 100644 --- a/ym-influx/src/main/java/com/cnbm/influx/config/InfluxClient.java +++ b/ym-influx/src/main/java/com/cnbm/influx/config/InfluxClient.java @@ -113,13 +113,13 @@ public enum InfluxClient { Point point = null; if(event.getSampleNumber()==null){ point = Point.measurement(measurement) - .addTag("transationId", event.getTransationId()) + .addTag("transationId", event.getTransationId()==null ? "" : event.getTransationId()) .addTag("argName", event.getArgName()) .addField("argValue", event.getArgValue()) .time(event.getTime().toEpochMilli(), WritePrecision.MS); }else { point = Point.measurement(measurement) - .addTag("transationId", event.getTransationId()) + .addTag("transationId", event.getTransationId()==null ? "" : event.getTransationId()) .addTag("inspectionSheetId", event.getInspectionSheetId()) // .addTag("batchNum", event.getBatchNum()) @@ -141,13 +141,18 @@ public enum InfluxClient { public List query(QueryDataParam param){ String measurement = param.getMeasurement(); - List dropedTagNames = param.getDropedTagNames(); - Range range = param.getRange(); + + String bucket = param.getBucket(); - PageInfo pageInfo = param.getPageInfo(); + String flux = "from(bucket:\""+bucket+"\")"; - flux += "|> range(start: "+range.getBegin()+",stop:"+range.getEnd()+")"; + + if(param.getRange() != null){ + Range range = param.getRange(); + flux += "|> range(start: "+range.getBegin()+",stop:"+range.getEnd()+")"; + } + flux += "|> filter(fn: (r) => r[\"_measurement\"] == \""+measurement+"\")"; if(param.getTags()!=null && param.getTags().size()>0){ @@ -161,12 +166,16 @@ public enum InfluxClient { //调整时区,查询出的结果 +8个小时 //flux += "|> timeShift(duration: 8h)"; - - for(String dropName:dropedTagNames){ - flux += "|> drop(columns: [\""+dropName+"\"])"; + if(param.getDropedTagNames() != null){ + List dropedTagNames = param.getDropedTagNames(); + for(String dropName:dropedTagNames){ + flux += "|> drop(columns: [\""+dropName+"\"])"; + } } + flux += "|> sort(columns: [\"_time\"], desc: true)"; - if(pageInfo!=null){ + if(param.getPageInfo() != null){ + PageInfo pageInfo = param.getPageInfo(); flux += "|> limit(n: "+pageInfo.getSize()+", offset: "+(pageInfo.getCurrent()-1)* pageInfo.getSize()+")"; } return queryApi.query(flux); diff --git a/ym-influx/src/main/java/com/cnbm/influx/controller/InfluxData.java b/ym-influx/src/main/java/com/cnbm/influx/controller/InfluxData.java new file mode 100644 index 0000000..1d22bd0 --- /dev/null +++ b/ym-influx/src/main/java/com/cnbm/influx/controller/InfluxData.java @@ -0,0 +1,25 @@ +package com.cnbm.influx.controller; + +import com.cnbm.influx.template.Event; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.Instant; +import java.util.List; + +/** + * @Desc: "" + * @Author: caixiang + * @DATE: 2022/12/9 15:53 + */ +@Data +@ApiModel(value = "Events") +public class InfluxData { + @ApiModelProperty("ID (transationId、argName、argValue、time 必填)") + private List events; + + @ApiModelProperty("measurement(相当于mysql 中的table,一台工艺设备一个measurement)") + private String measurement; + +} diff --git a/ym-influx/src/main/java/com/cnbm/influx/controller/SPCController.java b/ym-influx/src/main/java/com/cnbm/influx/controller/SPCController.java new file mode 100644 index 0000000..ebd608c --- /dev/null +++ b/ym-influx/src/main/java/com/cnbm/influx/controller/SPCController.java @@ -0,0 +1,49 @@ +package com.cnbm.influx.controller; + +import com.cnbm.common.spc.util.DataUtils; +import com.cnbm.common.utils.Result; +import com.cnbm.influx.config.InfluxClient; +import com.cnbm.influx.constant.Constant; +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.influxdb.query.FluxTable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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.time.Instant; +import java.util.*; + +@RestController +@RequestMapping("/spcData") +public class SPCController { + private static final Logger logger = LoggerFactory.getLogger(SPCController.class); + + + @PostMapping("/getData") + public Result getData(@RequestBody QueryDataParam param) throws InterruptedException { + List query = InfluxClient.Client.query(param); + return new Result>().ok(query); + } + + + @PostMapping("/insertOrUpdate") + public Result insertBatchForNew(@RequestBody InfluxData data){ + if(data.getEvents()== null || data.getMeasurement()== null){ + return new Result().error("传入events 或者 measurement为空"); + } + try { + InfluxClient.Client.batchInsert(data.getEvents(),data.getMeasurement()); + }catch (Exception e){ + return new Result().ok("influxdb 操作异常"); + } + return new Result().error("成功"); + } + + +} diff --git a/ym-influx/src/main/java/com/cnbm/influx/controller/TIMETest.java b/ym-influx/src/main/java/com/cnbm/influx/controller/TIMETest.java index e4e0e43..c4e58f1 100644 --- a/ym-influx/src/main/java/com/cnbm/influx/controller/TIMETest.java +++ b/ym-influx/src/main/java/com/cnbm/influx/controller/TIMETest.java @@ -1,10 +1,12 @@ package com.cnbm.influx.controller; +import com.cnbm.influx.template.Event; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.Instant; +import java.util.List; /** * @Desc: "" @@ -14,7 +16,9 @@ import java.time.Instant; @Data @ApiModel(value = "检验样本 DTO对象") public class TIMETest { - @ApiModelProperty(value = "时间2") + + + @ApiModelProperty(value = "Events") private Instant time2; } diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/controller/ProcessInspectionController.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/controller/ProcessInspectionController.java index 121c8ed..f92f0f0 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/controller/ProcessInspectionController.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/controller/ProcessInspectionController.java @@ -147,49 +147,48 @@ public class ProcessInspectionController { xmrGraph.getSpecificationLimit()==null?null:xmrGraph.getSpecificationLimit(), xmrGraph.getProcessCapacity()==null?null:xmrGraph.getProcessCapacity(), (xmrGraph.getXigma()==null||xmrGraph.getTotalXigma()==null)?null:new StandardDiviation(xmrGraph.getXigma(),xmrGraph.getTotalXigma()) - ); return R.ok("成功",xmrGraphData); } - @PostMapping("/getBatchs") - public R> getBatchs() throws InterruptedException { - List list = new ArrayList<>(); - Random r = new Random(); - Instant instant = DataUtils.getBeforeDate(400).toInstant(); - List res = new ArrayList<>(); - - QueryDataParam queryDataParam = new QueryDataParam(); - queryDataParam.setBucket("qgs-bucket"); - queryDataParam.setMeasurement("Weight"); - List dropNames = new ArrayList<>(); - dropNames.add("transationId"); - dropNames.add("_value"); - dropNames.add("_start"); - dropNames.add("_stop"); - dropNames.add("_time"); - dropNames.add("_field"); - dropNames.add("_measurement"); - dropNames.add("inspectionSheetId"); - dropNames.add("argName"); - queryDataParam.setDropedTagNames(dropNames); - - queryDataParam.setTags(Arrays.asList(new Tag("argName","LTWeight"))); - - queryDataParam.setRange(new Range(DataUtils.getBeforeDate(100).toInstant(),Instant.now())); -// queryDataParam.setPageInfo(new PageInfo(1,10)); - List query = InfluxClient.Client.queryByGroup(queryDataParam); - - - for (FluxTable fluxTable : query) { - List records = fluxTable.getRecords(); - if(records.size()!=0){ - res.add((String) records.get(0).getValueByKey("batchNum")); - continue; - } - } - return R.ok(res); - } +// @PostMapping("/getBatchs") +// public R> getBatchs() throws InterruptedException { +// List list = new ArrayList<>(); +// Random r = new Random(); +// Instant instant = DataUtils.getBeforeDate(400).toInstant(); +// List res = new ArrayList<>(); +// +// QueryDataParam queryDataParam = new QueryDataParam(); +// queryDataParam.setBucket("qgs-bucket"); +// queryDataParam.setMeasurement("Weight"); +// List dropNames = new ArrayList<>(); +// dropNames.add("transationId"); +// dropNames.add("_value"); +// dropNames.add("_start"); +// dropNames.add("_stop"); +// dropNames.add("_time"); +// dropNames.add("_field"); +// dropNames.add("_measurement"); +// dropNames.add("inspectionSheetId"); +// dropNames.add("argName"); +// queryDataParam.setDropedTagNames(dropNames); +// +// queryDataParam.setTags(Arrays.asList(new Tag("argName","LTWeight"))); +// +// queryDataParam.setRange(new Range(DataUtils.getBeforeDate(100).toInstant(),Instant.now())); +//// queryDataParam.setPageInfo(new PageInfo(1,10)); +// List query = InfluxClient.Client.queryByGroup(queryDataParam); +// +// +// for (FluxTable fluxTable : query) { +// List records = fluxTable.getRecords(); +// if(records.size()!=0){ +// res.add((String) records.get(0).getValueByKey("batchNum")); +// continue; +// } +// } +// return R.ok(res); +// } @PostMapping("/NPGraphTest") @@ -216,6 +215,32 @@ public class ProcessInspectionController { return R.ok("成功",npGraph1); } + @PostMapping("/NPGraph") + public R NPGraph(@RequestBody GraphArg graphArg) throws Exception { + + ProductFeatures productFeatures = setRealSampleSize(graphArg); + + if(productFeatures == null){ + return R.failed("检验参数异常"); + } + + NPGraph npGraph = new NPGraph(productFeatures); + + QueryDataGroupByTimeParam queryDataParam = new QueryDataGroupByTimeParam(); + queryDataParam.setMeasurement(Constant.measurement); + queryDataParam.setRange(new Range( graphArg.getBegin().toInstant() , graphArg.getEnd().toInstant() )); + queryDataParam.setTimeType(graphArg.getGroupType()); + npGraph.initialDate(queryDataParam); + + NPGraphData npGraph1 = new NPGraphData( + npGraph.getList()==null?null:npGraph.getList(), + npGraph.getArgName()==null?null:npGraph.getArgName() + ); + return R.ok("成功",npGraph1); + } + + + @PostMapping("/PGraphTest") public R PGraphTest() throws Exception { ProductFeatures productFeatures = new ProductFeatures(); @@ -296,9 +321,13 @@ public class ProcessInspectionController { private ProductFeatures setRealSampleSize(GraphArg graphArg){ ProductFeaturesDTO productFeaturesDTO = productFeaturesService.get(graphArg.getProductFeaturesId()); + if(productFeaturesDTO == null){ + return null; + } if(graphArg.getSampleSize()!=null){ productFeaturesDTO.setSampleSize(graphArg.getSampleSize()); } + ProductFeatures productFeatures = new ProductFeatures(); BeanUtils.copyProperties(productFeaturesDTO, productFeatures); return productFeatures; @@ -313,7 +342,13 @@ public class ProcessInspectionController { @PostMapping("/XbarSGraph") public R xbarSGraph(@RequestBody GraphArg graphArg) throws Exception { ProductFeatures productFeatures = setRealSampleSize(graphArg); - + if(productFeatures == null){ + return R.failed("检验参数异常"); + }else { + if(productFeatures.getSampleSize()==null || productFeatures.getName()==null){ + return R.failed("ProductFeatures 参数异常"); + } + } MeanStandardDeviationGraph meanStandardDeviationGraph = new MeanStandardDeviationGraph(productFeatures); if(graphArg.getInterpretationScheme()!=null){ meanStandardDeviationGraph.isNeedInterpretation(graphArg.getInterpretationScheme()); @@ -339,6 +374,13 @@ public class ProcessInspectionController { public R XbarRGraph(@RequestBody GraphArg graphArg) throws Exception { ProductFeatures productFeatures = setRealSampleSize(graphArg); + if(productFeatures == null){ + return R.failed("检验参数异常"); + }else { + if(productFeatures.getSampleSize()==null || productFeatures.getName()==null){ + return R.failed("ProductFeatures 参数异常"); + } + } MeanRGraph meanRGraph = new MeanRGraph(productFeatures); //如果要检验,,那么set 判读方案 @@ -372,7 +414,9 @@ public class ProcessInspectionController { public R XMRGraph(@RequestBody GraphArg graphArg) throws Exception { ProductFeatures productFeatures = setRealSampleSize(graphArg); - + if(productFeatures == null){ + return R.failed("检验参数异常"); + } XMRGraph xmrGraph = new XMRGraph(productFeatures); //如果要检验,,那么set 判读方案 if(graphArg.getInterpretationScheme()!=null){ @@ -397,31 +441,15 @@ public class ProcessInspectionController { return R.ok("成功",xmrGraphData); } - @PostMapping("/NPGraph") - public R NPGraph(@RequestBody GraphArg graphArg) throws Exception { - ProductFeatures productFeatures = setRealSampleSize(graphArg); - - NPGraph npGraph = new NPGraph(productFeatures); - - QueryDataGroupByTimeParam queryDataParam = new QueryDataGroupByTimeParam(); - queryDataParam.setMeasurement(Constant.measurement); - queryDataParam.setRange(new Range( graphArg.getBegin().toInstant() , graphArg.getEnd().toInstant() )); - queryDataParam.setTimeType(graphArg.getGroupType()); - npGraph.initialDate(queryDataParam); - - NPGraphData npGraph1 = new NPGraphData( - npGraph.getList()==null?null:npGraph.getList(), - npGraph.getArgName()==null?null:npGraph.getArgName() - ); - return R.ok("成功",npGraph1); - } @PostMapping("/PGraph") public R PGraph(@RequestBody GraphArg graphArg) throws Exception { ProductFeatures productFeatures = setRealSampleSize(graphArg); - + if(productFeatures == null){ + return R.failed("检验参数异常"); + } PGraph pGraph = new PGraph(productFeatures); QueryDataGroupByTimeParam queryDataParam = new QueryDataGroupByTimeParam(); @@ -440,7 +468,9 @@ public class ProcessInspectionController { public R CGraph(@RequestBody GraphArg graphArg) throws Exception { ProductFeatures productFeatures = setRealSampleSize(graphArg); - + if(productFeatures == null){ + return R.failed("检验参数异常"); + } CGraph cGraph = new CGraph(productFeatures); QueryDataGroupByTimeParam queryDataParam = new QueryDataGroupByTimeParam(); @@ -460,7 +490,9 @@ public class ProcessInspectionController { public R UGraph(@RequestBody GraphArg graphArg) throws Exception { ProductFeatures productFeatures = setRealSampleSize(graphArg); - + if(productFeatures == null){ + return R.failed("检验参数异常"); + } UGraph uGraph = new UGraph(productFeatures); QueryDataGroupByTimeParam queryDataParam = new QueryDataGroupByTimeParam(); diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/GraphArg.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/GraphArg.java index 086dd43..0720310 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/GraphArg.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/GraphArg.java @@ -2,10 +2,12 @@ package com.cnbm.processInspection.dto; import com.cnbm.basic.entity.ProductFeatures; import com.cnbm.influx.param.Range; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotNull; import java.util.Date; import java.util.List; @@ -18,15 +20,20 @@ import java.util.List; @ApiModel(value = "控制图 查询参数类") public class GraphArg { @ApiModelProperty(value = "检验特性Id") + @NotNull(message = "检验特性Id 不能为空") private Long productFeaturesId; @ApiModelProperty(value = "查询时间段,开始") + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") + @NotNull(message = "时间段,开始 不能为空") private Date begin; @ApiModelProperty(value = "查询时间段,结束") + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") + @NotNull(message = "时间段,结束 不能为空") private Date end; - @ApiModelProperty(value = "判读方案列表") + @ApiModelProperty(value = "判读方案列表,只用于 计量型") private List interpretationScheme; @ApiModelProperty(value = "样本大小,不填的话用之前配置的") diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java index f6d5686..e7c9970 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java @@ -65,9 +65,7 @@ public class MeanRGraph { public MeanRGraph(ProductFeatures productFeatures) throws Exception { - if(productFeatures.getSampleSize()==null || productFeatures.getName()==null){ - throw new Exception("ProductFeatures 参数异常"); - } + this.argName = productFeatures.getName(); this.sampleSize = productFeatures.getSampleSize().intValue(); this.a2 = XBarRCoefficients.getA2(sampleSize); @@ -92,6 +90,7 @@ public class MeanRGraph { this.interpretationScheme = list; } + /** * name : 初始化数据函数 * desc : 从influxdb 里面读取数据,然后 加工处理成 我需要的 diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java index ee92dcc..9070ac8 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java @@ -62,9 +62,7 @@ public class MeanStandardDeviationGraph { public MeanStandardDeviationGraph(ProductFeatures productFeatures) throws Exception { - if(productFeatures.getSampleSize()==null || productFeatures.getName()==null){ - throw new Exception("ProductFeatures 参数异常"); - } + this.argName = productFeatures.getName(); this.sampleSize = productFeatures.getSampleSize().intValue(); this.as = XBarSCoefficients.getAS(sampleSize); @@ -123,6 +121,9 @@ public class MeanStandardDeviationGraph { List rArray = new ArrayList<>(); for(int i=0;i inspectionSheetFeaturesList = getInspectionSheetFeaturesList(params); if (inspectionSheetFeaturesList != null && inspectionSheetFeaturesList.size() != 0) { - //分组样本数=样本大小=检验特性分组数的最大值 + //分组样本数 = 样本大小 = 检验特性分组数的最大值 //Integer numbersOfSamples = inspectionSheetFeaturesList.stream().max(Comparator.comparing(ProductFeaturesDTO::getSampleSize)).get().getSampleSize(); //过滤计量型特性 List featuresList = inspectionSheetFeaturesList.stream().filter(s-> s.getSampleSize()!=null && s.getType()==1).collect(Collectors.toList()); @@ -308,19 +308,9 @@ public class InspectionSheetServiceImpl extends CrudServiceImpl rsUnsatisfiedRules; + public XMRPoint(Integer position, Double value, Double x, Double rs) { + super(position,value); + this.x = x; + this.rs = rs; + xUnsatisfiedRules = new HashSet(); + rsUnsatisfiedRules = new HashSet(); + } private void setValueToTest(Double value){ setValueForInterpretation(value); @@ -57,11 +65,7 @@ public class XMRPoint extends Point { this.rs = rs; } - public XMRPoint(Integer position, Double value, Double x, Double rs) { - super(position,value); - this.x = x; - this.rs = rs; - } + @Override public Integer getPosition() { diff --git a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarRPoint.java b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarRPoint.java index 2e9b5dd..4fb255f 100644 --- a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarRPoint.java +++ b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarRPoint.java @@ -1,6 +1,7 @@ package com.cnbm.qualityPlanning.entity; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -21,7 +22,14 @@ public class XbarRPoint extends Point { private Set rUnsatisfiedRules; //xbar 不满足 的 判读方案 private Set xbarUnsatisfiedRules; - + public XbarRPoint(Integer position, Double value, Double xbar, Double r, List data) { + super(position,value); + this.xbar = xbar; + this.r = r; + this.data = data; + rUnsatisfiedRules = new HashSet(); + xbarUnsatisfiedRules = new HashSet(); + } private void setValueToTest(Double value){ setValueForInterpretation(value); @@ -68,12 +76,7 @@ public class XbarRPoint extends Point { this.r = r; } - public XbarRPoint(Integer position, Double value, Double xbar, Double r, List data) { - super(position,value); - this.xbar = xbar; - this.r = r; - this.data = data; - } + @Override public Integer getPosition() { diff --git a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarSPoint.java b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarSPoint.java index 12ba008..5c81fd4 100644 --- a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarSPoint.java +++ b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XbarSPoint.java @@ -3,6 +3,7 @@ package com.cnbm.qualityPlanning.entity; import io.swagger.models.auth.In; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -20,12 +21,21 @@ public class XbarSPoint extends Point { public XbarSPoint(Integer position, Double value) { super(position, value); } + //s 不满足 的 判读方案 private Set sUnsatisfiedRules; //xbar 不满足 的 判读方案 private Set xbarUnsatisfiedRules; - + public XbarSPoint(Integer position, Double value, Double xbar, Double s, Double r,List data) { + super(position,value); + this.xbar = xbar; + this.s = s; + this.r = r; + this.data = data; + sUnsatisfiedRules = new HashSet(); + xbarUnsatisfiedRules = new HashSet(); + } private void setValueToTest(Double value){ setValueForInterpretation(value); } @@ -78,13 +88,7 @@ public class XbarSPoint extends Point { this.r = r; } - public XbarSPoint(Integer position, Double value, Double xbar, Double s, Double r,List data) { - super(position,value); - this.xbar = xbar; - this.s = s; - this.r = r; - this.data = data; - } + @Override public Integer getPosition() {