diff --git a/pom.xml b/pom.xml
index 2858adf..a12076f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,7 @@
ym-schedule-task
ym-influx
ym-quality-planning
+ ym-process-inspection
pom
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/ApiErrorCode.java b/ym-common/src/main/java/com/cnbm/common/vo/ApiErrorCode.java
new file mode 100644
index 0000000..e5ce8fe
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/ApiErrorCode.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+
+/**
+ * REST API 错误码
+ *
+ * @author jiff
+ * @date 2018/11/1
+ * @since 1.0
+ */
+public enum ApiErrorCode implements IErrorCode {
+
+ /**
+ * 成功
+ */
+ SUCCESSFUL(CODE_SUCCESSFUL, "成功"),
+ /**
+ * 失败
+ */
+ FAILED(CODE_FAILED, "失败"),
+ /**
+ * 无效的请求参数
+ */
+ //INVALID_PARAMETER(CODE_INVALID_PARAMETER, "无效的请求参数"),
+ INVALID_PARAMETER(CODE_INVALID_PARAMETER, "Invalid request parameter"),
+ /**
+ * 数据未授权
+ */
+ FORBIDDEN_DATA(CODE_FORBIDDEN_DATA, "数据未授权"),
+ /**
+ * 用户已存在
+ */
+ USER_EXISTENT(CODE_USER_EXISTENT, "用户已存在"),
+ /**
+ * 用户不存在
+ */
+ //USER_NON_EXISTENT(CODE_USER_NON_EXISTENT, "用户不存在"),
+ USER_NON_EXISTENT(CODE_USER_NON_EXISTENT, "User does not exist"),
+ /**
+ * 用户已停用
+ */
+ USER_DISABLED(CODE_FAILED, "用户已停用"),
+ /**
+ * 用户不存在或密码错误
+ */
+ USER_NON_EXISTENT_OR_INVALID_PASSWORD(CODE_FAILED, "The user does not exist or the password is wrong"),
+ //USER_NON_EXISTENT_OR_INVALID_PASSWORD(CODE_FAILED, "用户不存在或密码错误"),
+ /**
+ * 密码错误
+ */
+ //INVALID_PASSWORD(CODE_FAILED, "密码错误"),
+ INVALID_PASSWORD(CODE_FAILED, "Wrong password"),
+
+ /**
+ * 电话号码不能为空
+ */
+ MOBILE_IS_EMPTY(CODE_FAILED, "手机号码不能为空"),
+
+ /**
+ * 用户未登录
+ */
+ UNAUTHORIZED(CODE_UNAUTHORIZED, "用户未登录"),
+ /**
+ * 用户未授权
+ */
+ FORBIDDEN(CODE_FORBIDDEN, "用户未授权");
+
+ private final int code;
+ private final String msg;
+
+ ApiErrorCode(final int code, final String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public static ApiErrorCode fromCode(int code) {
+ ApiErrorCode[] apiErrorCodes = ApiErrorCode.values();
+ for (ApiErrorCode apiErrorCode : apiErrorCodes) {
+ if (apiErrorCode.getCode() == code) {
+ return apiErrorCode;
+ }
+ }
+ return SUCCESSFUL;
+ }
+
+ @Override
+ public int getCode() {
+ return code;
+ }
+
+ @Override
+ public String getMsg() {
+ return msg;
+ }
+
+ @Override
+ public String toString() {
+ return String.format(" ErrorCode:{code=%s, msg=%s} ", code, msg);
+ }
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/CommonVo.java b/ym-common/src/main/java/com/cnbm/common/vo/CommonVo.java
new file mode 100644
index 0000000..293e963
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/CommonVo.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * 公共视图对象
+ *
+ * @author jiff
+ * @date 2018/11/9
+ * @since 1.0
+ */
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@Data
+@ApiModel("公共视图对象")
+public class CommonVo {
+
+ /**
+ * 启用状态:0 、停用,1、启用
+ */
+ @ApiModelProperty(value = "启用状态:0 、停用,1、启用", example = "1", position = Integer.MAX_VALUE - 1)
+ private Integer enabled;
+
+ /**
+ * 备注
+ */
+ @ApiModelProperty(value = "备注", position = Integer.MAX_VALUE - 1)
+ private String remark;
+
+
+ /**
+ * 创建人
+ */
+ @ApiModelProperty(value = "创建人", example = "1", position = Integer.MAX_VALUE)
+ private Long creatorId;
+
+ /**
+ * 创建人姓名
+ */
+ @ApiModelProperty(value = "创建人姓名", example = "ulabcare", position = Integer.MAX_VALUE)
+ private String creatorName;
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间", position = Integer.MAX_VALUE)
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ @ApiModelProperty(value = "更新人", example = "1", position = Integer.MAX_VALUE)
+ private Long updaterId;
+
+ /**
+ * 更新人姓名
+ */
+ @ApiModelProperty(value = "更新人姓名", example = "ulabcare", position = Integer.MAX_VALUE)
+ private String updaterName;
+
+ /**
+ * 更新时间
+ */
+ @ApiModelProperty(value = "更新时间", position = Integer.MAX_VALUE)
+ private LocalDateTime updateTime;
+
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/DictDataVo.java b/ym-common/src/main/java/com/cnbm/common/vo/DictDataVo.java
new file mode 100644
index 0000000..5f8eb37
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/DictDataVo.java
@@ -0,0 +1,24 @@
+package com.cnbm.common.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ *
+ *
+ *
+ * @author FanYi
+ * @date 2020/7/6
+ * @since 1.0
+ */
+@ApiModel("字典值对象")
+@Data
+public class DictDataVo {
+ @ApiModelProperty("字典编码")
+ private String code;
+
+ @ApiModelProperty("字典名称")
+ private String name;
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/IErrorCode.java b/ym-common/src/main/java/com/cnbm/common/vo/IErrorCode.java
new file mode 100644
index 0000000..24b1b92
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/IErrorCode.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+
+/**
+ * api错误码定义
+ *
+ * @author jiff
+ * @date 2018/11/1
+ * @since 1.0
+ */
+public interface IErrorCode {
+ /**
+ * 成功
+ */
+ int CODE_SUCCESSFUL = 0;
+ /**
+ * 失败
+ */
+ int CODE_FAILED = 1;
+ /**
+ * 无效的请求参数
+ */
+ int CODE_INVALID_PARAMETER = 2;
+ /**
+ * 数据未授权
+ */
+ int CODE_FORBIDDEN_DATA = 9;
+ /**
+ * 用户已存在
+ */
+ int CODE_USER_EXISTENT = 10;
+ /**
+ * 用户不存在
+ */
+ int CODE_USER_NON_EXISTENT = 11;
+ /**
+ * 用户未登录
+ */
+ int CODE_UNAUTHORIZED = 401;
+ /**
+ * 用户未授权
+ */
+ int CODE_FORBIDDEN = 403;
+
+ /**
+ * 错误编码:0、成功 否则失败
+ *
+ * @return 错误码:0、成功 否则失败
+ */
+ int getCode();
+
+ /**
+ * 错误描述
+ *
+ * @return 错误描述
+ */
+ String getMsg();
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/IdListVo.java b/ym-common/src/main/java/com/cnbm/common/vo/IdListVo.java
new file mode 100644
index 0000000..f63cbb2
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/IdListVo.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+
+/**
+ * 主键列表对象
+ *
+ * @author jiff
+ * @date 2018/11/14
+ * @since 1.0
+ */
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@Data
+@Builder
+@ApiModel("主键列表视图对象")
+public class IdListVo {
+ @ApiModelProperty(value = "主键列表", required = true, example = "[1]", notes = "根据实际接口返回不同对象的主键列表")
+ private List ids;
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/IdVo.java b/ym-common/src/main/java/com/cnbm/common/vo/IdVo.java
new file mode 100644
index 0000000..8a31782
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/IdVo.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+
+/**
+ * 主键对象
+ *
+ * @author jiff
+ * @date 2018/11/7
+ * @since 1.0
+ */
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@Data
+@Builder
+@ApiModel("主键视图对象")
+public class IdVo {
+ @ApiModelProperty(value = "主键", required = true, example = "1", notes = "根据实际接口返回不同对象的主键")
+ private Long id;
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/R.java b/ym-common/src/main/java/com/cnbm/common/vo/R.java
new file mode 100644
index 0000000..752cf61
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/R.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 处理结果类
+ *
+ * @param 返回的数据类型
+ * @author jiff
+ * @date 2018/11/7
+ * @since 1.0
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@ApiModel("处理结果类")
+@Accessors
+public class R implements Serializable {
+ @NonNull
+ @ApiModelProperty(value = "结果码", example = "0")
+ private int code = IErrorCode.CODE_SUCCESSFUL;
+ @ApiModelProperty(value = "结果说明", example = "成功")
+ private String msg;
+ @ApiModelProperty(value = "业务数据")
+ private T data;
+
+ public R code(int code) {
+ this.code = code;
+ return this;
+ }
+
+ public R msg(String msg) {
+ this.msg = msg;
+ return this;
+ }
+
+ public R data(T data) {
+ this.data = data;
+ return this;
+ }
+
+ public boolean ok() {
+ return code == IErrorCode.CODE_SUCCESSFUL;
+ }
+
+ public static R failed() {
+ return failed("系统错误!");
+ }
+
+ public static R failed(String msg) {
+ return failed(ApiErrorCode.FAILED.getCode(), msg);
+ }
+
+ public static R failed(int code, String msg) {
+ return failed(code, msg, null);
+ }
+
+ public static R failed(int code, String msg, T data) {
+ return r(code == ApiErrorCode.SUCCESSFUL.getCode() ? ApiErrorCode.FAILED.getCode() : code, msg, data);
+ }
+
+ public static R failed(IErrorCode errorCode) {
+ return r(errorCode, null);
+ }
+
+ public static R r(IErrorCode errorCode, T data) {
+ return r(errorCode.getCode(), errorCode.getMsg(), data);
+ }
+
+ public static R r(int code, String msg, T data) {
+ return new R().code(code).msg(msg).data(data);
+ }
+
+ public static R unauthorized() {
+ return failed(ApiErrorCode.UNAUTHORIZED);
+ }
+
+ public static R forbidden() {
+ return failed(ApiErrorCode.FORBIDDEN);
+ }
+
+ public static R ok(T data) {
+ return new R().data(data);
+ }
+
+ public static R ok(String msg, T data) {
+ return new R().msg(msg).data(data);
+ }
+
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/SelectVo.java b/ym-common/src/main/java/com/cnbm/common/vo/SelectVo.java
new file mode 100644
index 0000000..6011c7d
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/SelectVo.java
@@ -0,0 +1,26 @@
+package com.cnbm.common.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author FanYi
+ * @date 2020/7/6
+ * @since 1.0
+ */
+@ApiModel("下拉选择列表对象")
+@Data
+public class SelectVo {
+ @ApiModelProperty("key值,用于传给后端")
+ private Object k;
+
+ @ApiModelProperty("value值,用于前端显示")
+ private Object v;
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/SmsSignCodeVo.java b/ym-common/src/main/java/com/cnbm/common/vo/SmsSignCodeVo.java
new file mode 100644
index 0000000..7c8dc50
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/SmsSignCodeVo.java
@@ -0,0 +1,26 @@
+package com.cnbm.common.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author FanYi
+ * @date 2020/4/28
+ * @since 1.0
+ */
+@Data
+public class SmsSignCodeVo {
+ private Long sceneId;
+
+ private String signName;
+
+ private String templateCode;
+
+ private Integer templateType;
+
+ private String templateContent;
+}
diff --git a/ym-common/src/main/java/com/cnbm/common/vo/WhetherVo.java b/ym-common/src/main/java/com/cnbm/common/vo/WhetherVo.java
new file mode 100644
index 0000000..e76068f
--- /dev/null
+++ b/ym-common/src/main/java/com/cnbm/common/vo/WhetherVo.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018.
+ * http://www.ulabcare.com
+ */
+
+package com.cnbm.common.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+/**
+ * 是否对象
+ *
+ * @author jiff
+ * @date 2018/11/11
+ * @since 1.0
+ */
+@Data
+@Accessors(chain = true)
+@Builder
+@ApiModel("是否对象")
+public class WhetherVo {
+ @ApiModelProperty(value = "是否:true、是,false、否", required = true, example = "true")
+ private Boolean whether;
+}
diff --git a/ym-gateway/pom.xml b/ym-gateway/pom.xml
index 46ed380..79ca07b 100644
--- a/ym-gateway/pom.xml
+++ b/ym-gateway/pom.xml
@@ -42,7 +42,13 @@
ym-quality-planning
1.0-SNAPSHOT
-
+
+ com.cnbm
+ ym-process-inspection
+ 1.0-SNAPSHOT
+
+
+
diff --git a/ym-gateway/src/main/java/com/cnbm/config/SwaggerConfig.java b/ym-gateway/src/main/java/com/cnbm/config/SwaggerConfig.java
index c7b3426..2154162 100644
--- a/ym-gateway/src/main/java/com/cnbm/config/SwaggerConfig.java
+++ b/ym-gateway/src/main/java/com/cnbm/config/SwaggerConfig.java
@@ -128,6 +128,22 @@ public class SwaggerConfig {
.securitySchemes(Arrays.asList(new ApiKey("token", "token", "header")));
}
+ @Bean
+ public Docket processInspectionApi() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .groupName("ym-process-inspection")
+ .apiInfo(apiInfos("过程检验", "过程检验模块"))
+ .useDefaultResponseMessages(true)
+ .forCodeGeneration(false)
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("com.cnbm.processInspection"))
+ .paths(PathSelectors.any())
+ .build()
+ .securityContexts(Arrays.asList(securityContext()))
+ // ApiKey的name需与SecurityReference的reference保持一致
+ .securitySchemes(Arrays.asList(new ApiKey("token", "token", "header")));
+ }
+
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://ip:port/swagger-ui.html
diff --git a/ym-generator/src/main/java/com/cnbm/generator/build/CodeGenerator.java b/ym-generator/src/main/java/com/cnbm/generator/build/CodeGenerator.java
index 4f80800..8f5f41f 100644
--- a/ym-generator/src/main/java/com/cnbm/generator/build/CodeGenerator.java
+++ b/ym-generator/src/main/java/com/cnbm/generator/build/CodeGenerator.java
@@ -27,7 +27,7 @@ public class CodeGenerator {
@Test
public void test(){
- mybatisPlusGenerator(new String[]{"product_type"});
+ mybatisPlusGenerator(new String[]{"product_features"});
}
public static void mybatisPlusGenerator(String[] include){
diff --git a/ym-influx/src/main/java/com/cnbm/influx/controller/S7DemoController.java b/ym-influx/src/main/java/com/cnbm/influx/controller/S7DemoController.java
index 02cd253..2262ff5 100644
--- a/ym-influx/src/main/java/com/cnbm/influx/controller/S7DemoController.java
+++ b/ym-influx/src/main/java/com/cnbm/influx/controller/S7DemoController.java
@@ -7,14 +7,12 @@ 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.client.InfluxDBClient;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/ym-process-inspection/pom.xml b/ym-process-inspection/pom.xml
new file mode 100644
index 0000000..612eb5f
--- /dev/null
+++ b/ym-process-inspection/pom.xml
@@ -0,0 +1,36 @@
+
+
+
+ ym-pass
+ com.cnbm
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ ym-process-inspection
+
+
+ 8
+ 8
+
+
+
+
+ com.cnbm
+ ym-influx
+ 1.0-SNAPSHOT
+
+
+ com.cnbm
+ ym-baisc
+ 1.0-SNAPSHOT
+
+
+ com.cnbm
+ ym-common
+ 1.0-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/constant/XBarRCoefficients.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/controlCoefficientConstant/XBarRCoefficients.java
similarity index 99%
rename from ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/constant/XBarRCoefficients.java
rename to ym-process-inspection/src/main/java/com/cnbm/processInspection/controlCoefficientConstant/XBarRCoefficients.java
index 5fba1e2..0668f1d 100644
--- a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/constant/XBarRCoefficients.java
+++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/controlCoefficientConstant/XBarRCoefficients.java
@@ -1,4 +1,4 @@
-package com.cnbm.qualityPlanning.constant;
+package com.cnbm.processInspection.controlCoefficientConstant;
/**
* @Desc: " "x bar - R" 控制系数 "
diff --git a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/constant/XBarSCoefficients.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/controlCoefficientConstant/XBarSCoefficients.java
similarity index 98%
rename from ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/constant/XBarSCoefficients.java
rename to ym-process-inspection/src/main/java/com/cnbm/processInspection/controlCoefficientConstant/XBarSCoefficients.java
index e25f844..abacbd5 100644
--- a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/constant/XBarSCoefficients.java
+++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/controlCoefficientConstant/XBarSCoefficients.java
@@ -1,6 +1,7 @@
-package com.cnbm.qualityPlanning.constant;
+package com.cnbm.processInspection.controlCoefficientConstant;
/**
+ * 均值-标准差 控制图 常数系数
* @Desc: " "x bar - s" 控制系数 "
* @Author: caixiang
* @DATE: 2022/6/30 10:44
diff --git a/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/MeanStandardDeviationGraph.java b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/MeanStandardDeviationGraph.java
new file mode 100644
index 0000000..20b4c38
--- /dev/null
+++ b/ym-process-inspection/src/main/java/com/cnbm/processInspection/graphAnalyzed/MeanStandardDeviationGraph.java
@@ -0,0 +1,46 @@
+package com.cnbm.processInspection.graphAnalyzed;
+
+import com.cnbm.processInspection.controlCoefficientConstant.XBarSCoefficients;
+
+/**
+ * @Desc: ""
+ * @Author: caixiang
+ * @DATE: 2022/7/20 14:26
+ *
+ * 步骤:
+ * ① 先读mysql表,查询 product_features 表,先读到 sample_size(样本量)
+ * ② 再依据 influx.argName == mysql.product_feature.name && 时间段 查询所有的 参数数据
+ * ③ 拿到参数数据后,分组 整合成List,
+ * 计算控制限
+ * 计算 母体 的 \sigma 、 bar{x} 。。。
+ * 计算CPK 、CPU 、CPL这些
+ * ④ 如果配置了判读方案,还要 调用 StatisticalControlledTest Function 检验。
+ * ⑤
+ */
+
+public class MeanStandardDeviationGraph {
+ private Double sbar;
+ private Double xbarbar;
+ private Double as;
+ private Double bu;
+ private Double bl;
+ private Integer sampleSize;
+ private String argName;
+
+ MeanStandardDeviationGraph(Integer sampleSize){
+ this.sampleSize = sampleSize;
+ this.as = XBarSCoefficients.getAS(sampleSize);
+ this.bu = XBarSCoefficients.getBU(sampleSize);
+ this.bl = XBarSCoefficients.getBU(sampleSize);
+ }
+
+ /**
+ * name : 初始化数据函数
+ * desc : 从influxdb 里面读取数据,然后 加工处理成 我需要的
+ * 步骤:
+ * ①
+ * */
+ public void initialDate(){
+
+ }
+}
diff --git a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/common/StatisticalControlledTest.java b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/common/StatisticalControlledTest.java
index 632d866..24b6ff5 100644
--- a/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/common/StatisticalControlledTest.java
+++ b/ym-quality-planning/src/main/java/com/cnbm/qualityPlanning/common/StatisticalControlledTest.java
@@ -4,13 +4,13 @@ package com.cnbm.qualityPlanning.common;
import com.cnbm.qualityPlanning.entity.ControlLimit;
import com.cnbm.qualityPlanning.entity.ControlLimitDetail;
import com.cnbm.qualityPlanning.entity.Point;
-import io.swagger.models.auth.In;
import java.util.*;
/**
* @Desc: "检测参数统计受控 检验类"
* @Author: caixiang
+ * todo : ① 开头第一组,和最后一组 是否漏掉 问题;② 中间情况 时候把最后一个元素漏掉。
* @DATE: 2022/7/11 15:27
*/
public class StatisticalControlledTest {
@@ -26,18 +26,18 @@ public class StatisticalControlledTest {
private static final Integer rule10Number = 10;
public static List createData(){
- Point point = new Point(1,new Double(1.7));
- Point point2 = new Point(2,new Double(8));
- Point point3 = new Point(3,new Double(8));
- Point point4 = new Point(4,new Double(1.7));
- Point point5 = new Point(5,new Double(1.7));
- Point point6 = new Point(6,new Double(1.7)); //3
- Point point7 = new Point(7,new Double(1.7)); //3
- Point point8 = new Point(8,new Double(1.7)); //3 //3
- Point point9 = new Point(9,new Double(1.7));
- Point point10 = new Point(10,new Double(1.7));
- Point point11 = new Point(11,new Double(1.7));
- Point point12 = new Point(12,new Double(1.7));
+ Point point = new Point(1,new Double(0.7));
+ Point point2 = new Point(2,new Double(0.7));
+ Point point3 = new Point(3,new Double(3.7));
+ Point point4 = new Point(4,new Double(0.7));
+ Point point5 = new Point(5,new Double(0.7));
+ Point point6 = new Point(6,new Double(3.7)); //3
+ Point point7 = new Point(7,new Double(3.7)); //3
+ Point point8 = new Point(8,new Double(3.7)); //3 //3
+ Point point9 = new Point(9,new Double(3.7));
+ Point point10 = new Point(10,new Double(3.7));
+ Point point11 = new Point(11,new Double(3.7));
+ Point point12 = new Point(12,new Double(3.7));
List list = new ArrayList<>();
list.add(point);
list.add(point2);
@@ -62,8 +62,8 @@ public class StatisticalControlledTest {
// Boolean aBoolean1 = rule1(list, controlLimit);
//
//TEST FOR RULE2
- Boolean aBoolean2 = rule2(list, controlLimit, 9);
- System.out.println();
+// Boolean aBoolean2 = rule2(list, controlLimit, 9);
+// System.out.println();
//
//
// //TEST FOR RULE3
@@ -72,7 +72,7 @@ public class StatisticalControlledTest {
//
//
// //TEST FOR RULE4
-// Boolean aBoolean4 = rule4(list, 4);
+// Boolean aBoolean4 = rule4(list, 5);
// System.out.println();
// //TEST FOR RULE5
@@ -88,6 +88,10 @@ public class StatisticalControlledTest {
Boolean aBoolean7 = rule7(list, controlLimit,7);
System.out.println();
+ //TEST FOR RULE8
+// Boolean aBoolean8 = rule8(list, controlLimit,8);
+// System.out.println();
+
// int[] array={1,2,3,4,5,6};
// int[] ret=new int[3];
// System.arraycopy(array,0,ret,0,3);
@@ -123,7 +127,6 @@ public class StatisticalControlledTest {
* name : 规则2
* desc : 连续 n 点落在中心线的用一侧 (默认:9)
* 注意: 如果存在满足rule2的点,会在原数组 Point.unsatisfiedRules 里标注出来。
- * //todo 存在bug while((upi+1) < data.size()){ ,最后一个点轮询不到
* return :
* 存在满足rule2的点 => true
* 不存在满足rule2的点 => false
@@ -160,7 +163,7 @@ public class StatisticalControlledTest {
//1.
for (Point key:forMarkPoints){
for(Point j:data){
- if(key.getPosition()== j.getPosition()){
+ if(key.getPosition().equals(j.getPosition())){
j.getUnsatisfiedRules().add(rule2Number);
continue;
}
@@ -197,7 +200,7 @@ public class StatisticalControlledTest {
for (Point key:forMarkPoints){
for(Point j:data){
- if(key.getPosition()== j.getPosition()){
+ if(key.getPosition().equals(j.getPosition())){
j.getUnsatisfiedRules().add(rule2Number);
continue;
}
@@ -280,7 +283,6 @@ public class StatisticalControlledTest {
* name : 规则4
* desc : 连续 n 点中 相邻点 交替上下 ( 默认:14 )
* 注意: 如果存在满足rule4的点,会在原数组 Point.unsatisfiedRules 里标注出来。
- * //todo 有bug while((upi+1) < data.size()) 这里 upi+1 会存在问题
* return :
* 存在满足rule4的点 => true
* 不存在满足rule4的点 => false
@@ -301,6 +303,24 @@ public class StatisticalControlledTest {
while((upi+1) < data.size()){
if(isBetween( data.get(upi),data.get(upi+1) )){
+ //
+ if(forMarkKey.size()==(n-1)){
+ Double u1 = data.get(upi-2).getValue();
+ Double u2 = data.get(upi-1).getValue();
+ Double u3 = data.get(upi).getValue();
+ if(isUpAndDown(u1,u2,u3)){
+ forMarkKey.add(upi);
+ times++;
+ }
+ if(times >= n){
+ for(Integer key:forMarkKey){
+ data.get(key).getUnsatisfiedRules().add(rule4Number);
+ }
+ return true;
+ }
+ }
+
+
//A-B<0 True
//A-B>0 False
if(isSmall(data.get(upi),data.get(upi+1))){
@@ -313,7 +333,19 @@ public class StatisticalControlledTest {
if (current.equals(nextNeeded)){
times++;
forMarkKey.add(upi);
- if(times == n){
+ //加入最后一个元素的判断
+ if((upi+1)==(data.size()-1)){
+ Double u0 = data.get(upi - 1).getValue();
+ Double u1 = data.get(upi).getValue();
+ Double u2 = data.get(upi + 1).getValue();
+ if(isUpAndDown(u0,u1,u2)){
+ forMarkKey.add(upi+1);
+ times++;
+ }
+ }
+
+
+ if(times >= n){
for(Integer key:forMarkKey){
data.get(key).getUnsatisfiedRules().add(rule4Number);
}
@@ -334,6 +366,8 @@ public class StatisticalControlledTest {
return false;
}
+
+
/**
* name : 规则5
* desc : 连续 m 点中 有 n 点 落在中心线同一侧,B区以外。( 默认 m:3 , n:2 )
@@ -403,7 +437,7 @@ public class StatisticalControlledTest {
/**
* name : 规则6
* desc : 连续 m 点中 有 n 点 落在中心线同一侧,C区以外。( 默认 m:5 , n:4 )
- * 注意: 如果存在满足rule5的点,会在原数组 Point.unsatisfiedRules 里标注出来。
+ * 注意: 如果存在满足rule6的点,会在原数组 Point.unsatisfiedRules 里标注出来。
* return :
* 存在满足rule6的点 => true
* 不存在满足rule6的点 => false
@@ -469,7 +503,7 @@ public class StatisticalControlledTest {
/**
* name : 规则7
* desc : 连续 n 点 落在中心线两侧的C区内。( 默认 n:15 )
- * 注意: 如果存在满足rule5的点,会在原数组 Point.unsatisfiedRules 里标注出来。
+ * 注意: 如果存在满足rule7的点,会在原数组 Point.unsatisfiedRules 里标注出来。
* return :
* 存在满足rule7的点 => true
* 不存在满足rule7的点 => false
@@ -477,7 +511,7 @@ public class StatisticalControlledTest {
private static Boolean rule7(List data,ControlLimit controlLimit, Integer n){
- Integer upi = 0;
+ //Integer upi = 0;
ControlLimitDetail controlLimitDetail = new ControlLimitDetail(controlLimit.getUCL(), controlLimit.getCL(), controlLimit.getLCL());
System.out.println(controlLimitDetail.toString());
Integer times = 0;
@@ -486,12 +520,12 @@ public class StatisticalControlledTest {
for(int i=0;icontrolLimitDetail.getLC()[0] && point.getValue()controlLimitDetail.getLC()[0] && point.getValue() true
+ * 不存在满足rule8的点 => false
+ * */
+ private static Boolean rule8(List data,ControlLimit controlLimit, Integer n){
+ //Integer upi = 0;
+ ControlLimitDetail controlLimitDetail = new ControlLimitDetail(controlLimit.getUCL(), controlLimit.getCL(), controlLimit.getLCL());
+ System.out.println(controlLimitDetail.toString());
+ Integer times = 0;
+ List markKey = new ArrayList<>();
+
+
+ for(int i=0;icontrolLimitDetail.getUC()[1] || point.getValue()();
+ }
+ break;
+ }
+
+ //通常情况
+ Point point = data.get(i);
+ if( isBetween( data.get(i),data.get(i+1) ) ){
+ if( point.getValue()>controlLimitDetail.getUC()[1] || point.getValue()();
+ }
+ }else {
+ times = 0;
+ markKey = new ArrayList<>();
+ }
+ }
+ return false;
+ }
+
/**
* 如果 这两个点是相邻的 ==》 true
* */
@@ -549,4 +643,19 @@ public class StatisticalControlledTest {
return (head.getValue()- after.getValue()) > 0;
}
+
+ /**
+ * 如果这三个参数 是起伏的 ====> true
+ *
+ * */
+ private static boolean isUpAndDown(Double u1,Double u2,Double u3){
+ Boolean r1 = ((u1-u2)>0);
+ Boolean r2 = ((u2-u3)>0);
+ if(!r1.equals(r2)){
+ return true;
+ }else {
+ return false;
+ }
+ }
+
}