diff --git a/ym-admin/src/main/java/com/cnbm/admin/basic/BaseParam.java b/ym-admin/src/main/java/com/cnbm/admin/basic/BaseParam.java new file mode 100644 index 0000000..81237d3 --- /dev/null +++ b/ym-admin/src/main/java/com/cnbm/admin/basic/BaseParam.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2018. + * http://www.ulabcare.com + */ + +package com.cnbm.admin.basic; + +import java.io.Serializable; + +/** + * 接口请求参数基类 + * + * @author jiff + * @date 2018/11/1 + * @since 1.0 + */ +public class BaseParam implements Serializable { +} diff --git a/ym-admin/src/main/java/com/cnbm/admin/params/IdParam.java b/ym-admin/src/main/java/com/cnbm/admin/params/IdParam.java new file mode 100644 index 0000000..8bf2d6a --- /dev/null +++ b/ym-admin/src/main/java/com/cnbm/admin/params/IdParam.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2018. + * http://www.ulabcare.com + */ + +package com.cnbm.admin.params; + + +import com.cnbm.admin.basic.BaseParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + + +/** + * 主键请求参数对象 + * + * @author jiff + * @date 2018/11/9 + * @since 1.0 + */ +@Data +@ApiModel("主键参数对象") +public class IdParam implements Serializable { + private static final long serialVersionUID = 1L; + + @NotNull(message = "主键不能为空") + @ApiModelProperty(value = "主键", required = true, example = "1", notes = "根据实际接口传递不同对象的主键") + private Long id; + +} diff --git a/ym-baisc/src/main/java/com/cnbm/basic/controller/MachineController.java b/ym-baisc/src/main/java/com/cnbm/basic/controller/MachineController.java index 869ae4a..2853b53 100644 --- a/ym-baisc/src/main/java/com/cnbm/basic/controller/MachineController.java +++ b/ym-baisc/src/main/java/com/cnbm/basic/controller/MachineController.java @@ -119,7 +119,7 @@ public class MachineController { public Result changeStatus(@PathVariable("id") Long id){ machineService.changeStatus(id); - return new Result(); + return new Result().ok(true); } } \ No newline at end of file diff --git a/ym-baisc/src/main/java/com/cnbm/basic/controller/ProductController.java b/ym-baisc/src/main/java/com/cnbm/basic/controller/ProductController.java index 34e1917..17b6d79 100644 --- a/ym-baisc/src/main/java/com/cnbm/basic/controller/ProductController.java +++ b/ym-baisc/src/main/java/com/cnbm/basic/controller/ProductController.java @@ -1,6 +1,7 @@ package com.cnbm.basic.controller; import com.cnbm.admin.annotation.LogOperation; +import com.cnbm.admin.params.IdParam; import com.cnbm.common.constant.Constant; import com.cnbm.common.page.PageData; import com.cnbm.common.utils.ExcelUtils; @@ -13,7 +14,6 @@ import com.cnbm.common.validator.group.UpdateGroup; import com.cnbm.basic.dto.ProductDTO; import com.cnbm.basic.excel.ProductExcel; import com.cnbm.basic.service.IProductService; -import com.google.gson.internal.$Gson$Preconditions; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -69,13 +69,13 @@ public class ProductController { @ApiOperation("保存") @LogOperation("保存") //@PreAuthorize("@ex.hasAuthority('code:product:save')") - public Result save(@RequestBody ProductDTO dto){ + public Result save(@RequestBody ProductDTO dto){ //效验数据 ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); productService.save(dto); - return new Result().ok(dto); + return new Result(); } @PutMapping @@ -114,12 +114,13 @@ public class ProductController { ExcelUtils.exportExcelToTarget(response, null, list, ProductExcel.class); } - @GetMapping("status/{id}") + @PostMapping("status") @ApiOperation("改变状态") @LogOperation("改变状态") - public Result changeStatus(@PathVariable("id") Long id){ - boolean b = productService.changeStatus(id); - return new Result().ok(b); + public Result changeStatus(@RequestBody IdParam id){ + productService.changeStatus(id.getId()); + + return new Result(); } } \ No newline at end of file diff --git a/ym-baisc/src/main/java/com/cnbm/basic/service/impl/MachineServiceImpl.java b/ym-baisc/src/main/java/com/cnbm/basic/service/impl/MachineServiceImpl.java index ddf9fc7..c36e011 100644 --- a/ym-baisc/src/main/java/com/cnbm/basic/service/impl/MachineServiceImpl.java +++ b/ym-baisc/src/main/java/com/cnbm/basic/service/impl/MachineServiceImpl.java @@ -90,6 +90,8 @@ public class MachineServiceImpl extends CrudServiceImpl xbarSGraphTest() throws Exception { + ProductFeaturesDTO productFeaturesDTO = productFeaturesService.get(new Long(1)); + + ProductFeatures productFeatures = new ProductFeatures(); productFeatures.setSl(new Float(5)); productFeatures.setUsl(new Float(10)); @@ -99,7 +104,49 @@ public class ProcessInspectionController { return R.ok("成功",xbarSGraphData); } + @PostMapping("/XMRGraphTest") + public R XMRGraphTest() throws Exception { + ProductFeatures productFeatures = new ProductFeatures(); + productFeatures.setSl(new Float(5)); + productFeatures.setUsl(new Float(10)); + productFeatures.setLsl(new Float(1)); + productFeatures.setName("LTWeight"); + productFeatures.setSampleSize(1); + XMRGraph xmrGraph = new XMRGraph(productFeatures); + //判读方案 + List interpretationScheme = new ArrayList<>(); + interpretationScheme.add(new InterpretationListArg(1,null,null)); + interpretationScheme.add(new InterpretationListArg(5,3,2)); + xmrGraph.isNeedInterpretation(interpretationScheme); + + + QueryDataParam queryDataParam = new QueryDataParam(); + queryDataParam.setMeasurement("Weight"); + queryDataParam.setRange(new Range(DataUtils.getBeforeDate(10).toInstant(), Instant.now())); + xmrGraph.initialDate(queryDataParam); + + XMRGraphData xmrGraphData = new XMRGraphData( + xmrGraph.getXmrGraphEntity(), + xmrGraph.getXCL(), + xmrGraph.getRSCL(), + xmrGraph.getSpecificationLimit(), + xmrGraph.getProcessCapacity(), + new StandardDiviation(xmrGraph.getXigma(),xmrGraph.getTotalXigma()) + ); + + return R.ok("成功",xmrGraphData); + } + + private ProductFeatures setRealSampleSize(GraphArg graphArg){ + ProductFeaturesDTO productFeaturesDTO = productFeaturesService.get(graphArg.getProductFeaturesId()); + if(graphArg.getSampleSize()!=null){ + productFeaturesDTO.setSampleSize(graphArg.getSampleSize()); + } + ProductFeatures productFeatures = new ProductFeatures(); + BeanUtils.copyProperties(productFeaturesDTO, productFeatures); + return productFeatures; + } //筛选条件顺序: // ① 先工厂(产品表) => ② 检验类型(产品表)=> ③ 产品名(产品表)=> ④ 工序(产品表)=> ⑤ 特性(检验参数name)( product_features 表) ;; @@ -109,8 +156,7 @@ public class ProcessInspectionController { // 3.检验类型(产品表) ; 4.产品名 (产品表); 5.工艺流程(就是工序 ,也是设备名,用到工序表); 6.特性(product_features.name ,也是influxdb中的argName) ; @PostMapping("/XbarSGraph") public R xbarSGraph(@RequestBody GraphArg graphArg) throws Exception { - - ProductFeatures productFeatures = graphArg.getProductFeatures(); + ProductFeatures productFeatures = setRealSampleSize(graphArg); MeanStandardDeviationGraph meanStandardDeviationGraph = new MeanStandardDeviationGraph(productFeatures); if(graphArg.getInterpretationScheme()!=null){ @@ -136,8 +182,8 @@ public class ProcessInspectionController { @PostMapping("/XbarRGraph") public R XbarRGraph(@RequestBody GraphArg graphArg) throws Exception { - //new 对象 - ProductFeatures productFeatures = graphArg.getProductFeatures(); + ProductFeatures productFeatures = setRealSampleSize(graphArg); + MeanRGraph meanRGraph = new MeanRGraph(productFeatures); //如果要检验,,那么set 判读方案 if(graphArg.getInterpretationScheme()!=null){ @@ -161,4 +207,32 @@ public class ProcessInspectionController { return R.ok("成功",xbarSGraphData); } + @PostMapping("/XMRGraph") + public R XMRGraph(@RequestBody GraphArg graphArg) throws Exception { + + ProductFeatures productFeatures = setRealSampleSize(graphArg); + + XMRGraph xmrGraph = new XMRGraph(productFeatures); + //如果要检验,,那么set 判读方案 + if(graphArg.getInterpretationScheme()!=null){ + xmrGraph.isNeedInterpretation(graphArg.getInterpretationScheme()); + } + + QueryDataParam queryDataParam = new QueryDataParam(); + queryDataParam.setMeasurement(Constant.measurement); + queryDataParam.setRange(new Range(graphArg.getBegin().toInstant(), graphArg.getEnd().toInstant())); + xmrGraph.initialDate(queryDataParam); + + XMRGraphData xmrGraphData = new XMRGraphData( + xmrGraph.getXmrGraphEntity(), + xmrGraph.getXCL(), + xmrGraph.getRSCL(), + xmrGraph.getSpecificationLimit(), + xmrGraph.getProcessCapacity(), + new StandardDiviation(xmrGraph.getXigma(),xmrGraph.getTotalXigma()) + ); + + return R.ok("成功",xmrGraphData); + } + } 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 b35a7ff..5b1212d 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 @@ -17,8 +17,8 @@ import java.util.List; @Data @ApiModel(value = "控制图 查询参数类") public class GraphArg { - @ApiModelProperty(value = "检验特性,,全量传过来") - private ProductFeatures productFeatures; + @ApiModelProperty(value = "检验特性Id") + private Long productFeaturesId; @ApiModelProperty(value = "查询时间段,开始") private Date begin; @@ -29,4 +29,8 @@ public class GraphArg { @ApiModelProperty(value = "判读方案列表") private List interpretationScheme; + @ApiModelProperty(value = "样本大小,不填的话用之前配置的") + private Integer sampleSize; + + } diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XMRGraphData.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XMRGraphData.java new file mode 100644 index 0000000..3842102 --- /dev/null +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XMRGraphData.java @@ -0,0 +1,45 @@ +package com.cnbm.processInspection.dto; + +import com.cnbm.common.spc.math.StandardDiviation; +import com.cnbm.processInspection.graphAnalyzed.forMeterage.xmr.XMRGraphEntity; +import com.cnbm.qualityPlanning.entity.ControlLimit; +import com.cnbm.qualityPlanning.entity.ProcessCapability; +import com.cnbm.qualityPlanning.entity.SpecificationLimit; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Desc: "" + * @Author: caixiang + * @DATE: 2022/7/22 14:18 + */ +@Data +@ApiModel(value = "均值极差控制图 结果类") +public class XMRGraphData { + @ApiModelProperty(value = "控制图list数据") + private XMRGraphEntity xmrGraphEntity; + @ApiModelProperty(value = "xbar控制图 控制限") + private ControlLimit XBarCL; + @ApiModelProperty(value = "R控制图 控制限") + private ControlLimit RCL; + + @ApiModelProperty(value = "工艺规格限") + private SpecificationLimit SL; + + @ApiModelProperty(value = "工序能力") + private ProcessCapability processCapability; + + @ApiModelProperty(value = "标准差/总体标准差") + private StandardDiviation standardDiviation; + + + public XMRGraphData(XMRGraphEntity xmrGraphEntity, ControlLimit xBarCL, ControlLimit rCL, SpecificationLimit sl, ProcessCapability processCapability, StandardDiviation standardDiviation){ + this.xmrGraphEntity = xmrGraphEntity; + this.XBarCL = xBarCL; + this.RCL = rCL; + this.SL = sl; + this.processCapability = processCapability; + this.standardDiviation = standardDiviation; + } +} diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarRGraphData.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarRGraphData.java index 1bf1681..92132ec 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarRGraphData.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarRGraphData.java @@ -1,7 +1,7 @@ package com.cnbm.processInspection.dto; import com.cnbm.common.spc.math.StandardDiviation; -import com.cnbm.processInspection.graphAnalyzed.mr.MRGraphEntity; +import com.cnbm.processInspection.graphAnalyzed.forMeterage.mr.MRGraphEntity; import com.cnbm.qualityPlanning.entity.ControlLimit; import com.cnbm.qualityPlanning.entity.ProcessCapability; import com.cnbm.qualityPlanning.entity.SpecificationLimit; diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarSGraphData.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarSGraphData.java index eb83328..2798f71 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarSGraphData.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/dto/XbarSGraphData.java @@ -1,7 +1,7 @@ package com.cnbm.processInspection.dto; import com.cnbm.common.spc.math.StandardDiviation; -import com.cnbm.processInspection.graphAnalyzed.ms.MSDGraphEntity; +import com.cnbm.processInspection.graphAnalyzed.forMeterage.ms.MSDGraphEntity; import com.cnbm.qualityPlanning.entity.ControlLimit; import com.cnbm.qualityPlanning.entity.ProcessCapability; import com.cnbm.qualityPlanning.entity.SpecificationLimit; diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/mr/MRGraphEntity.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MRGraphEntity.java similarity index 93% rename from ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/mr/MRGraphEntity.java rename to ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MRGraphEntity.java index 0345f1c..6b3101e 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/mr/MRGraphEntity.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MRGraphEntity.java @@ -1,4 +1,4 @@ -package com.cnbm.processInspection.graphAnalyzed.mr; +package com.cnbm.processInspection.graphAnalyzed.forMeterage.mr; diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/mr/MeanRGraph.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java similarity index 98% rename from ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/mr/MeanRGraph.java rename to ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java index 65493a9..075a50a 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/mr/MeanRGraph.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/mr/MeanRGraph.java @@ -1,4 +1,4 @@ -package com.cnbm.processInspection.graphAnalyzed.mr; +package com.cnbm.processInspection.graphAnalyzed.forMeterage.mr; import com.cnbm.basic.entity.ProductFeatures; import com.cnbm.common.spc.math.Math; @@ -7,7 +7,6 @@ import com.cnbm.common.spc.util.DataUtils; 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.processInspection.controlCoefficientConstant.XBarRCoefficients; import com.cnbm.processInspection.dto.InterpretationListArg; @@ -17,7 +16,6 @@ import com.influxdb.query.FluxRecord; import com.influxdb.query.FluxTable; import lombok.Data; -import java.time.Instant; import java.util.ArrayList; import java.util.List; @@ -106,7 +104,6 @@ public class MeanRGraph { dropNames.add("inspectionSheetId"); queryDataParam.setDropedTagNames(dropNames); queryDataParam.setTag(new Tag("argName",argName)); - queryDataParam.setRange(new Range(DataUtils.getBeforeDate(10).toInstant(), Instant.now())); List query = InfluxClient.Client.query(queryDataParam); //1. 先从fluxdb 里面提取原始数据 diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/ms/MSDGraphEntity.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MSDGraphEntity.java similarity index 94% rename from ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/ms/MSDGraphEntity.java rename to ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MSDGraphEntity.java index 759c818..f98fd2d 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/ms/MSDGraphEntity.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MSDGraphEntity.java @@ -1,4 +1,4 @@ -package com.cnbm.processInspection.graphAnalyzed.ms; +package com.cnbm.processInspection.graphAnalyzed.forMeterage.ms; diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/ms/MeanStandardDeviationGraph.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java similarity index 98% rename from ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/ms/MeanStandardDeviationGraph.java rename to ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java index f985e12..4a68763 100644 --- a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/ms/MeanStandardDeviationGraph.java +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/ms/MeanStandardDeviationGraph.java @@ -1,4 +1,4 @@ -package com.cnbm.processInspection.graphAnalyzed.ms; +package com.cnbm.processInspection.graphAnalyzed.forMeterage.ms; import com.cnbm.basic.entity.ProductFeatures; import com.cnbm.common.spc.math.Math; @@ -7,7 +7,6 @@ import com.cnbm.common.spc.util.DataUtils; 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.processInspection.controlCoefficientConstant.XBarSCoefficients; @@ -18,7 +17,6 @@ import com.influxdb.query.FluxRecord; import com.influxdb.query.FluxTable; import lombok.Data; -import java.time.Instant; import java.util.ArrayList; import java.util.List; @@ -103,7 +101,6 @@ public class MeanStandardDeviationGraph { dropNames.add("inspectionSheetId"); queryDataParam.setDropedTagNames(dropNames); queryDataParam.setTag(new Tag("argName",argName)); - queryDataParam.setRange(new Range(DataUtils.getBeforeDate(10).toInstant(), Instant.now())); List query = InfluxClient.Client.query(queryDataParam); //1. 先从fluxdb 里面提取原始数据 diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/xmr/XMRGraph.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/xmr/XMRGraph.java new file mode 100644 index 0000000..2522586 --- /dev/null +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/xmr/XMRGraph.java @@ -0,0 +1,299 @@ +package com.cnbm.processInspection.graphAnalyzed.forMeterage.xmr; + +import com.cnbm.basic.entity.ProductFeatures; +import com.cnbm.common.spc.math.Math; +import com.cnbm.common.spc.math.StandardDiviation; +import com.cnbm.influx.config.InfluxClient; +import com.cnbm.influx.constant.Constant; +import com.cnbm.influx.param.QueryDataParam; +import com.cnbm.influx.param.Tag; +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; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +/** + * @Desc: "均值标准差 控制图 , 计算类" + * @Author: caixiang + * @DATE: 2022/7/20 14:26 + * 使用方式:① 先new MeanStandardDeviationGraph 对象 ;② 再initialData 初始化数据;③ 再get 控制限 + * + * 步骤: + * ① 先读mysql表,查询 product_features 表,先读到 sample_size(样本量) + * ② 再依据 influx.argName == mysql.product_feature.name && 时间段 查询所有的 参数数据 + * ③ 拿到参数数据后,分组 整合成List, + * 计算控制限 + * 计算 母体 的 \sigma 、 bar{x} 。。。 + * 计算CPK 、CPU 、CPL这些 + * ④ 如果配置了判读方案,还要 调用 StatisticalControlledTest Function 检验。 + * ⑤ + */ +@Data +public class XMRGraph { + //母体的 μ = xbarbar + private Double miu; + //母体的 xigma ,全局计算的; + private Double xigma; + //母体的 xigma ,全局计算的; + private Double totalXigma; + + //需要去检验的 判读方案 eg:[1,2,3,4,6] + private List interpretationScheme; + + //这里 是特有参数 -- begin + + //单值移动极差 控制图 xbar == xbarbar + private Double xbar; + private Double rsbar; + //这里 是特有参数 -- end + + private Integer sampleSize; + private String argName; + + private SpecificationLimit specificationLimit; + private XMRGraphEntity xmrGraphEntity; + + + public XMRGraph(ProductFeatures productFeatures) throws Exception { + if(productFeatures.getSampleSize()==null || productFeatures.getName()==null){ + throw new Exception("ProductFeatures 参数异常"); + } + this.argName = productFeatures.getName(); + this.sampleSize = 1; + this.specificationLimit = new SpecificationLimit( + productFeatures.getUsl()==null?null:productFeatures.getUsl(), + productFeatures.getSl()==null?null:productFeatures.getSl(), + productFeatures.getUsl()==null?null:productFeatures.getUsl() + ); + } + + private Double[] toDoubleArray(Object[] o){ + Double[] res= new Double[o.length]; + for(int i=0;i list){ + this.interpretationScheme = list; + } + + /** + * name : 初始化数据函数 + * desc : 从influxdb 里面读取数据,然后 加工处理成 我需要的 + * 步骤: + * ① + * */ + public void initialDate(QueryDataParam queryDataParam){ + queryDataParam.setBucket(Constant.bucket); + List dropNames = new ArrayList<>(); + dropNames.add("transationId"); + dropNames.add("inspectionSheetId"); + queryDataParam.setDropedTagNames(dropNames); + queryDataParam.setTag(new Tag("argName",argName)); + + + List query = InfluxClient.Client.query(queryDataParam); + //1. 先从fluxdb 里面提取原始数据 + List originData = new ArrayList<>(); + for (FluxTable fluxTable : query) { + List records = fluxTable.getRecords(); + for (FluxRecord fluxRecord : records) { + //因为 传进去的就是Double 类型,所以取出来,自然而然就是Double + originData.add(Double.parseDouble(fluxRecord.getValueByKey("_value").toString())); + } + } + + //2. convert to XbarSPoint + List list = new ArrayList<>(); + Double lastOne = (double) 0; + List rsArray = new ArrayList<>(); + for(int i=0;i forX = new ArrayList<>(); + List forRS = new ArrayList<>(); + for(XMRPoint x:list){ + forX.add( new Point( x.getPosition() , x.getX() ) ); + if(x.getPosition()!=0){ + forRS.add( new Point( x.getPosition(), x.getRs() ) ); + } + } + ControlLimit xcl = getXCL(); + ControlLimit rscl = getRSCL(); + + for(InterpretationListArg arg : this.interpretationScheme){ + switch (arg.getNumber())//值必须是整型或者字符型 + { + case 1: + StatisticalControlledTest.rule1(forX,xcl); + StatisticalControlledTest.rule1(forRS,rscl); + break; + case 2: + StatisticalControlledTest.rule2(forX,xcl,arg.getArg1()); + StatisticalControlledTest.rule2(forRS,rscl,arg.getArg1()); + break; + case 3: + StatisticalControlledTest.rule3(forX,arg.getArg1()); + StatisticalControlledTest.rule3(forRS,arg.getArg1()); + break; + case 4: + StatisticalControlledTest.rule4(forX,arg.getArg1()); + StatisticalControlledTest.rule4(forRS,arg.getArg1()); + break; + case 5: + StatisticalControlledTest.rule5(forX,xcl,arg.getArg1(), arg.getArg2()); + StatisticalControlledTest.rule5(forRS,rscl,arg.getArg1(), arg.getArg2()); + break; + case 6: + StatisticalControlledTest.rule6(forX,xcl,arg.getArg1(), arg.getArg2()); + StatisticalControlledTest.rule6(forRS,rscl,arg.getArg1(), arg.getArg2()); + break; + case 7: + StatisticalControlledTest.rule7(forX,xcl,arg.getArg1()); + StatisticalControlledTest.rule7(forRS,rscl, arg.getArg1()); + + break; + case 8: + StatisticalControlledTest.rule8(forX,xcl, arg.getArg1()); + StatisticalControlledTest.rule8(forRS,rscl, arg.getArg1()); + break; + default: + break; + } + } + + for(int i=0;i()); + }else { + list.get(i).setxUnsatisfiedRules(forX.get(i).getUnsatisfiedRules()); + list.get(i).setRsUnsatisfiedRules(forRS.get(i-1).getUnsatisfiedRules()); + } + + } + } + // 结束 + + } + + + + + /** + * desc: get X控制图(单值控制图) 的控制限 + * 注意:此函数 要在 initialDate()函数执行之后 + * */ + public ControlLimit getXCL(){ + return new ControlLimit( + (this.xmrGraphEntity.getXbar() + 2.66 * this.xmrGraphEntity.getRsbar()), + this.xmrGraphEntity.getXbar() , + (this.xmrGraphEntity.getXbar() - 2.66 * this.xmrGraphEntity.getRsbar()) + ); + } + + /** + * desc: get R控制图 的控制限 + * 注意:此函数 要在 initialDate()函数执行之后 + * */ + public ControlLimit getRSCL(){ + return new ControlLimit( + ( 3.267 * this.xmrGraphEntity.getRsbar() ) , + this.xmrGraphEntity.getRsbar() , + (double) 0 + ); + } + + /** + * desc: get 工序能力 + * 注意:此函数 要在 initialDate()函数执行之后 + * */ + public ProcessCapability getProcessCapacity(){ + SpecificationLimit sp = this.specificationLimit; + List warming = new ArrayList<>(); + Float usl = sp.getUSL(); + Float lsl = sp.getLSL(); + if(usl==null || lsl==null){ + if(usl==null && lsl!=null){ + if(this.miuusl){ + warming.add("平均值已不能满足规范要求, 有相当多数据均为不合格, 则表示完全没有工序能力"); + return new ProcessCapability(null,null,(double)0,null,warming); + } + + Double cpu = ( (usl-this.miu) / (3 * this.xigma) ); + return new ProcessCapability(null,null,cpu,null,warming); + }else { + return new ProcessCapability(null,null,null,null,warming); + } + } + + //下面就是 usl 和 lsl 都部位null的情况 + Float k1 = usl-lsl; + Float k2 = usl+lsl; + + Double cp = ( k1 / (6*this.xigma) ); + Double k = ( java.lang.Math.abs( (this.miu-k2/2) ) / (k1/2) ); + if(k>1){ + warming.add("此工艺参数K 大于1, 说明均值μ已经偏离到规范范围意外,即相当多的工艺参数均不满足规范要求,这说明工艺加工结果很差,该设备根本不适用于批量生产"); + } + Double cpk = cp * ( 1- k); + if(cpk<0){ + warming.add("Cpk=0,该工序完全没有能力 批量生产"); + cpk = (double) 0; + } + Double cpu = ( (usl-this.miu) / (3 * this.xigma) ); + Double cpl = ( (this.miu-lsl) / (3 * this.xigma) ); + + return new ProcessCapability(cp,cpk,cpu,cpl,warming); + } +} diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/xmr/XMRGraphEntity.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/xmr/XMRGraphEntity.java new file mode 100644 index 0000000..83aea77 --- /dev/null +++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/forMeterage/xmr/XMRGraphEntity.java @@ -0,0 +1,50 @@ +package com.cnbm.processInspection.graphAnalyzed.forMeterage.xmr; + + + +import com.cnbm.qualityPlanning.entity.XMRPoint; +import com.cnbm.qualityPlanning.entity.XbarRPoint; + +import java.util.List; + +/** + * @Desc: "xbar-R 结果类" + * @Author: caixiang + * @DATE: 2022/7/21 16:26 + */ +public class XMRGraphEntity { + private List list; + private Double xbar; + private Double rsbar; + + public XMRGraphEntity(List list, Double xbar, Double rsbar){ + this.list = list; + this.rsbar = rsbar; + + this.xbar = xbar; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public Double getXbar() { + return xbar; + } + + public void setXbar(Double xbar) { + this.xbar = xbar; + } + + public Double getRsbar() { + return rsbar; + } + + public void setRsbar(Double rsbar) { + this.rsbar = rsbar; + } +} diff --git a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XMRPoint.java b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XMRPoint.java new file mode 100644 index 0000000..d47b8e7 --- /dev/null +++ b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/entity/XMRPoint.java @@ -0,0 +1,95 @@ +package com.cnbm.qualityPlanning.entity; + +import java.util.Set; + +/** + * @Desc: "整合,处理好 后的一行数据 (sampleSize 后的数据) " + * @Author: caixiang + * @DATE: 2022/7/21 9:43 + */ +public class XMRPoint extends Point { + + private Double x; + private Double rs; + //position 是这个数据在数组中的位置 ;; value 是待被判读方案 分析的value(从 xbar、s、r 中选一) + public XMRPoint(Integer position, Double value) { + super(position, value); + } + //r 不满足 的 判读方案 + private Set xUnsatisfiedRules; + //xbar 不满足 的 判读方案 + private Set rsUnsatisfiedRules; + + + private void setValueToTest(Double value){ + setValueForInterpretation(value); + } + + public Set getxUnsatisfiedRules() { + return xUnsatisfiedRules; + } + + public void setxUnsatisfiedRules(Set xUnsatisfiedRules) { + this.xUnsatisfiedRules = xUnsatisfiedRules; + } + + public Set getRsUnsatisfiedRules() { + return rsUnsatisfiedRules; + } + + public void setRsUnsatisfiedRules(Set rsUnsatisfiedRules) { + this.rsUnsatisfiedRules = rsUnsatisfiedRules; + } + + public Double getX() { + return x; + } + + public void setX(Double x) { + this.x = x; + } + + public Double getRs() { + return rs; + } + + public void setRs(Double rs) { + 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() { + return super.getPosition(); + } + + @Override + public Double getValueForInterpretation() { + return super.getValueForInterpretation(); + } + + @Override + public Set getUnsatisfiedRules() { + return super.getUnsatisfiedRules(); + } + + @Override + public void setPosition(Integer position) { + super.setPosition(position); + } + + @Override + public void setValueForInterpretation(Double valueForInterpretation) { + super.setValueForInterpretation(valueForInterpretation); + } + + @Override + public void setUnsatisfiedRules(Set unsatisfiedRules) { + super.setUnsatisfiedRules(unsatisfiedRules); + } +}