Prechádzať zdrojové kódy

提交SOP重构内容

lijie 4 rokov pred
rodič
commit
879fcf98f8
100 zmenil súbory, kde vykonal 5208 pridanie a 838 odobranie
  1. 97 25
      fm-sop/pom.xml
  2. 34 0
      fm-sop/src/main/java/com/persagy/fm/sop/annotations/JsonFieldFilter.java
  3. 18 0
      fm-sop/src/main/java/com/persagy/fm/sop/annotations/JsonFieldFilters.java
  4. 59 0
      fm-sop/src/main/java/com/persagy/fm/sop/aop/BusinessAssert.java
  5. 93 0
      fm-sop/src/main/java/com/persagy/fm/sop/aop/GlobalExceptionHandler.java
  6. 37 0
      fm-sop/src/main/java/com/persagy/fm/sop/client/FeignConfig.java
  7. 26 0
      fm-sop/src/main/java/com/persagy/fm/sop/client/SaasClient.java
  8. 29 0
      fm-sop/src/main/java/com/persagy/fm/sop/client/SaasFallBackFactory.java
  9. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/config/AspectConfig.java
  10. 51 0
      fm-sop/src/main/java/com/persagy/fm/sop/config/InitializingRequestMappingHandler.java
  11. 0 25
      fm-sop/src/main/java/com/persagy/fm/sop/config/MpJsonConfig.java
  12. 33 0
      fm-sop/src/main/java/com/persagy/fm/sop/config/MybatisConfigure.java
  13. 22 0
      fm-sop/src/main/java/com/persagy/fm/sop/config/MybatisKeyGenerator.java
  14. 37 0
      fm-sop/src/main/java/com/persagy/fm/sop/constant/SopCommonConst.java
  15. 57 0
      fm-sop/src/main/java/com/persagy/fm/sop/constant/SopQueryConst.java
  16. 100 0
      fm-sop/src/main/java/com/persagy/fm/sop/controller/EquipCompanyController.java
  17. 78 0
      fm-sop/src/main/java/com/persagy/fm/sop/controller/GeneralDictController.java
  18. 205 172
      fm-sop/src/main/java/com/persagy/fm/sop/controller/GroupSopController.java
  19. 478 0
      fm-sop/src/main/java/com/persagy/fm/sop/controller/ObjectController.java
  20. 571 12
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopController.java
  21. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopEditController.java
  22. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopEquipModelRelController.java
  23. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopHisController.java
  24. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopLabelRelController.java
  25. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopObjRelController.java
  26. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopOrderTypeRelController.java
  27. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopReviseMsgController.java
  28. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopSopRelController.java
  29. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/CustomInfoPointMapper.java
  30. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/OperateLogMapper.java
  31. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopCellMapper.java
  32. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopDestroyMsgMapper.java
  33. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopDomainRelMapper.java
  34. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEditMapper.java
  35. 0 39
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEditMapper.xml
  36. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEquipModelRelMapper.java
  37. 0 20
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEquipModelRelMapper.xml
  38. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopHisMapper.java
  39. 0 39
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopHisMapper.xml
  40. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopLabelRelMapper.java
  41. 0 20
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopLabelRelMapper.xml
  42. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopMapper.java
  43. 0 39
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopMapper.xml
  44. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopMediaRelMapper.java
  45. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopObjRelMapper.java
  46. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopObjRelMapper.xml
  47. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopOrderTypeRelMapper.java
  48. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopOrderTypeRelMapper.xml
  49. 8 7
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopReviseMsgMapper.java
  50. 0 23
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopReviseMsgMapper.xml
  51. 0 16
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopSopRelMapper.java
  52. 0 21
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopSopRelMapper.xml
  53. 17 0
      fm-sop/src/main/java/com/persagy/fm/sop/dao/SopToolRelMapper.java
  54. 52 0
      fm-sop/src/main/java/com/persagy/fm/sop/deserializers/SpecialParamDeserializer.java
  55. 58 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/CustomInfoPoint.java
  56. 81 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/OperateLog.java
  57. 159 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/Sop.java
  58. 187 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopCell.java
  59. 77 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopDestroyMsg.java
  60. 64 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopDomainRel.java
  61. 198 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopEdit.java
  62. 78 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopEquipModelRel.java
  63. 198 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopHis.java
  64. 76 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopLabelRel.java
  65. 74 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopMediaRel.java
  66. 130 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopObjRel.java
  67. 82 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopOrderTypeRel.java
  68. 77 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopReviseMsg.java
  69. 68 0
      fm-sop/src/main/java/com/persagy/fm/sop/entity/SopToolRel.java
  70. 39 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/AttTypeEnum.java
  71. 57 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/IdPrefixEnum.java
  72. 38 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/MsgStatusEnum.java
  73. 37 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/MsgTypeEnum.java
  74. 39 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/ObjOwnerEnum.java
  75. 49 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/ObjTypeEnum.java
  76. 45 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/ResultEnum.java
  77. 39 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/SopPublishStatusEnum.java
  78. 39 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/SopSignCodeEnum.java
  79. 39 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/SopStatusEnum.java
  80. 37 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/SopTypeEnum.java
  81. 88 0
      fm-sop/src/main/java/com/persagy/fm/sop/filters/LoginFilter.java
  82. 93 0
      fm-sop/src/main/java/com/persagy/fm/sop/filters/RequestWrapper.java
  83. 13 0
      fm-sop/src/main/java/com/persagy/fm/sop/filters/SpecialValueFilter.java
  84. 109 0
      fm-sop/src/main/java/com/persagy/fm/sop/filters/SuberJacksonFilterProvider.java
  85. 41 0
      fm-sop/src/main/java/com/persagy/fm/sop/handler/DbJsonTypeHandler.java
  86. 53 0
      fm-sop/src/main/java/com/persagy/fm/sop/handler/JsonReturnFilterHandler.java
  87. 52 0
      fm-sop/src/main/java/com/persagy/fm/sop/handler/JsonTypeHandlerFactory.java
  88. 24 0
      fm-sop/src/main/java/com/persagy/fm/sop/handler/ListTypeHandler.java
  89. 0 114
      fm-sop/src/main/java/com/persagy/fm/sop/mapper/SopMapper.java
  90. 0 7
      fm-sop/src/main/java/com/persagy/fm/sop/model/SopDTO.java
  91. 39 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/AbnormalSetBean.java
  92. 22 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/AttBean.java
  93. 53 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/BaseInfoPointsBean.java
  94. 58 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/BaseObjBean.java
  95. 18 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/CmptDataBean.java
  96. 64 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ConfirmResultBean.java
  97. 61 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ContentObjsBean.java
  98. 33 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ConvertClassBean.java
  99. 45 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/CustomInfoPointsBean.java
  100. 0 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/EquipModelBean.java

+ 97 - 25
fm-sop/pom.xml

@@ -12,7 +12,42 @@
     <packaging>jar</packaging>
     <properties>
         <hbase.version>1.3.0</hbase.version>
+        <platform.version>1.0.0</platform.version>
     </properties>
+    <repositories>
+        <repository>
+            <id>SagaCloud</id>
+            <name>SagaCloud</name>
+            <url>http://47.93.33.207:8082/repository/SagaCloud/</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+        <repository>
+            <id>Persagy</id>
+            <name>Persagy</name>
+            <url>http://47.93.132.139:8081/nexus/content/groups/public/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>alimaven</id>
+            <name>aliyun maven</name>
+            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
+        </repository>
+        <repository>
+            <id>spring-milestones</id>
+            <name>Spring Milestones</name>
+            <url>https://repo.spring.io/milestone</url>
+        </repository>
+    </repositories>
     <dependencies>
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -31,40 +66,48 @@
             <groupId>com.persagy</groupId>
             <artifactId>integrated-config-client</artifactId>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-test</artifactId>-->
+<!--            <scope>test</scope>-->
+<!--        </dependency>-->
 
         <dependency>
-            <groupId>com.baomidou</groupId>
-            <artifactId>mybatis-plus-generator</artifactId>
-            <version>3.3.1</version>
+            <groupId>com.persagy</groupId>
+            <artifactId>fm-mybatis</artifactId>
+            <version>3.0.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.velocity</groupId>
             <artifactId>velocity-engine-core</artifactId>
             <version>2.3</version>
         </dependency>
-
+        <!-- swagger -->
         <dependency>
-            <groupId>com.sagacloud</groupId>
-            <artifactId>zillion-util</artifactId>
-            <version>2.2.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.httpcomponents</groupId>
-                    <artifactId>httpclient</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.apache.httpcomponents</groupId>
-                    <artifactId>httpcore</artifactId>
-                </exclusion>
-            </exclusions>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-swagger2-spring-boot-starter</artifactId>
+            <version>${platform.version}</version>
         </dependency>
-
+        <!--执行 SQL 分析打印插件-->
         <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.8.6</version>
+            <groupId>p6spy</groupId>
+            <artifactId>p6spy</artifactId>
+            <version>3.8.1</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.5.9</version>
+        </dependency>
+        <!-- redis -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.apache.hbase</groupId>
             <artifactId>hbase-server</artifactId>
@@ -101,16 +144,45 @@
         </dependency>
         <dependency>
             <groupId>com.sagacloud</groupId>
+            <artifactId>zillion-util</artifactId>
+            <version>2.1.3</version>
+           <!-- <exclusions>
+                <exclusion>
+                    <groupId>org.apache.httpcomponents</groupId>
+                    <artifactId>httpclient</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.httpcomponents</groupId>
+                    <artifactId>httpcore</artifactId>
+                </exclusion>
+            </exclusions>-->
+        </dependency>
+        <dependency>
+            <groupId>com.sagacloud</groupId>
             <artifactId>json-lib-zillion</artifactId>
             <version>1.0</version>
             <type>jar</type>
-            <exclusions>
+<!--            <exclusions>
                 <exclusion>
                     <groupId>com.google.guava</groupId>
                     <artifactId>guava</artifactId>
                 </exclusion>
-            </exclusions>
+            </exclusions>-->
+        </dependency>
+        <!-- 映入JSON -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-db-spring-boot-starter</artifactId>
+            <version>1.0.0</version>
         </dependency>
-
     </dependencies>
 </project>

+ 34 - 0
fm-sop/src/main/java/com/persagy/fm/sop/annotations/JsonFieldFilter.java

@@ -0,0 +1,34 @@
+package com.persagy.fm.sop.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * JSON 返回字段过滤
+ *
+ * @author zhufeihong
+ * @since 2020/12/28 14:32
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Repeatable(JsonFieldFilters.class)
+public @interface JsonFieldFilter {
+    /**
+     * 对象类
+     */
+    Class<?> type();
+
+    /**
+     * 只包含的字段
+     */
+    String[] include() default {};
+
+    /**
+     * 不包含的字段,如果重新赋值那么默认值失效
+     */
+    String[] exclude() default {"createBy", "updateBy"};
+
+    /**
+     * 不包含的字段,在exclude()默认值的条件下继续添加排除字段
+     */
+    String[] addExclude() default {};
+}

+ 18 - 0
fm-sop/src/main/java/com/persagy/fm/sop/annotations/JsonFieldFilters.java

@@ -0,0 +1,18 @@
+package com.persagy.fm.sop.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * JSON 返回字段过滤
+ *
+ * @author zhufeihong
+ * @since 2020/12/28 14:32
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface JsonFieldFilters {
+    JsonFieldFilter[] value();
+}

+ 59 - 0
fm-sop/src/main/java/com/persagy/fm/sop/aop/BusinessAssert.java

@@ -0,0 +1,59 @@
+package com.persagy.fm.sop.aop;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.text.CharSequenceUtil;
+import com.persagy.common.enums.ResponseCode;
+import com.persagy.common.exception.BusinessException;
+
+import java.util.Collection;
+
+/**
+ * @author yuecaipu
+ * @version 1.0
+ * @description 参数校验
+ * @date 2020/12/1 11:53
+ */
+public class BusinessAssert extends Assert {
+
+	private static final String EMPTY_ERROR_MSG_TEMPLATE = "argument [{}] must not empty";
+
+	private static final String CONTENT_NOT_EXIST_MSG_TEMPLATE = "content [{}] not exist";
+
+	private static final String CONTENT_NOT_MATCH_MSG_TEMPLATE = "content [{}] not match";
+
+	private static final String UPLOAD_FAIL = "upload fail";
+
+	public static void isNotEmpty(String text, Object params) throws IllegalArgumentException {
+		if (CharSequenceUtil.isBlank(text)) {
+			throw new BusinessException(ResponseCode.A10000.getCode(), CharSequenceUtil.format(EMPTY_ERROR_MSG_TEMPLATE, params));
+		}
+	}
+
+	public static void isNotEmpty(Object obj, Object params) throws IllegalArgumentException {
+		if (null == obj) {
+			throw new BusinessException(ResponseCode.A10000.getCode(), CharSequenceUtil.format(EMPTY_ERROR_MSG_TEMPLATE, params));
+		}
+	}
+
+	public static void isNotEmpty(String text, String code, Object params) throws IllegalArgumentException {
+		if (CharSequenceUtil.isBlank(text)) {
+			throw new BusinessException(code, CharSequenceUtil.format(EMPTY_ERROR_MSG_TEMPLATE, params));
+		}
+	}
+
+	public static void isNotEmpty(Collection collection, Object params) throws IllegalArgumentException {
+		if (CollUtil.isEmpty(collection)) {
+			throw new BusinessException(ResponseCode.A10000.getCode(), CharSequenceUtil.format(EMPTY_ERROR_MSG_TEMPLATE, params));
+		}
+	}
+
+	public static void notExist(Object params) throws IllegalArgumentException {
+		throw new BusinessException(ResponseCode.A10000.getCode(), CharSequenceUtil.format(CONTENT_NOT_EXIST_MSG_TEMPLATE, params));
+	}
+
+	public static void notMatch(Object params) throws IllegalArgumentException {
+		throw new BusinessException(ResponseCode.A10000.getCode(), CharSequenceUtil.format(CONTENT_NOT_MATCH_MSG_TEMPLATE, params));
+	}
+
+}

+ 93 - 0
fm-sop/src/main/java/com/persagy/fm/sop/aop/GlobalExceptionHandler.java

@@ -0,0 +1,93 @@
+package com.persagy.fm.sop.aop;
+
+import com.persagy.common.aop.GlobalBussinessExceptionHandler;
+import com.persagy.common.enums.ResponseCode;
+import com.persagy.common.exception.BusinessException;
+import com.persagy.common.utils.ResponseResult;
+import com.persagy.fm.sop.utils.OldResponseResultUtil;
+import feign.FeignException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.validation.BindException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+import javax.validation.ValidationException;
+
+/**
+ * 全局异常拦截器
+ * @author yuecaipu
+ * @date 11:32 2020/12/1
+ */
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler extends GlobalBussinessExceptionHandler {
+    @Override
+    @ExceptionHandler({NullPointerException.class})
+    public ResponseResult handleBusinessRuntimeException(NullPointerException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.B0001.getCode(), e.getMessage());
+    }
+    @Override
+    @ExceptionHandler({BusinessException.class})
+    public ResponseResult handleBusinessRuntimeException(BusinessException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(e.getErrorCode(), e.getErrorDesc(), e.getRespJson());
+    }
+    @Override
+    @ExceptionHandler({MethodArgumentNotValidException.class})
+    public ResponseResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), e.getBindingResult().getFieldError().getDefaultMessage());
+    }
+    @Override
+    @ExceptionHandler({BindException.class})
+    public ResponseResult handleBindException(BindException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), e.getBindingResult().getFieldError().getDefaultMessage());
+    }
+    @Override
+    @ExceptionHandler({ValidationException.class})
+    public ResponseResult handleValidationException(ValidationException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), e.getCause().getMessage());
+    }
+    @Override
+    @ExceptionHandler({IllegalArgumentException.class})
+    public ResponseResult handleIllegalArgumentException(IllegalArgumentException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), e.getMessage());
+    }
+    @Override
+    @ResponseStatus(HttpStatus.NOT_FOUND)
+    @ExceptionHandler({NoHandlerFoundException.class})
+    public ResponseResult handleNoHandlerFoundException(NoHandlerFoundException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.A0422.getCode(), e.getMessage());
+    }
+    @Override
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+    @ExceptionHandler({FeignException.class})
+    public ResponseResult handleFeignException(FeignException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.C0110.getCode(), e.getMessage());
+    }
+    @Override
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ExceptionHandler({HttpMessageNotReadableException.class})
+    public ResponseResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), ResponseCode.A0402.getDesc());
+    }
+    @Override
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+    @ExceptionHandler({Exception.class})
+    public ResponseResult handleException(Exception e) {
+        log.error(e.getMessage(), e);
+        return OldResponseResultUtil.errorResult(ResponseCode.Z9999.getCode(), ResponseCode.Z9999.getDesc());
+    }
+}

+ 37 - 0
fm-sop/src/main/java/com/persagy/fm/sop/client/FeignConfig.java

@@ -0,0 +1,37 @@
+package com.persagy.fm.sop.client;
+
+import feign.Logger;
+import feign.codec.Encoder;
+import feign.form.spring.SpringFormEncoder;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringEncoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+
+import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
+
+@Configuration
+public class FeignConfig {
+
+
+    @Autowired
+    private ObjectFactory<HttpMessageConverters> messageConverters;
+
+
+    @Bean
+    @Primary
+    @Scope(SCOPE_PROTOTYPE)
+    Encoder feignFormEncoder() {
+        return new SpringFormEncoder(new SpringEncoder(this.messageConverters));
+    }
+
+
+    @Bean
+    Logger.Level feignLevel(){
+        return Logger.Level.FULL;
+    }
+}

+ 26 - 0
fm-sop/src/main/java/com/persagy/fm/sop/client/SaasClient.java

@@ -0,0 +1,26 @@
+package com.persagy.fm.sop.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.response.FmResponseContent;
+import com.persagy.fm.sop.model.vo.GeneralDictVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+
+@FeignClient(name = "SAAS" ,fallbackFactory = SaasFallBackFactory.class, configuration = FeignConfig.class)
+public interface SaasClient {
+
+	/***
+	 * Description: 查询数据字典数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restGeneralDictService/queryGeneralDictByDictType")
+	String queryGeneralDictByDictType(@RequestBody JSONObject param);
+
+
+}

+ 29 - 0
fm-sop/src/main/java/com/persagy/fm/sop/client/SaasFallBackFactory.java

@@ -0,0 +1,29 @@
+package com.persagy.fm.sop.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.sop.model.vo.GeneralDictVo;
+import com.persagy.fm.sop.model.vo.QueryGeneralDictVo;
+import com.persagy.fm.sop.utils.OldResponseResult;
+import com.persagy.fm.sop.utils.OldResponseResultUtil;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+/**
+ * @author yuecaipu
+ * @version 1.0
+ * @description
+ * @date 2021/3/12 14:19
+ */
+@Slf4j
+@Component
+public class SaasFallBackFactory implements FallbackFactory<SaasClient> {
+	@Override
+	public SaasClient create(Throwable throwable) {
+		return queryGeneralDictVo -> JSONObject.toJSONString(OldResponseResultUtil
+				.successResult(Collections.singletonList(GeneralDictVo.builder().build())));
+	}
+}

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/config/AspectConfig.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.config;
+
+import com.persagy.fm.common.config.FeignExceptionHandler;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+
+@Configuration
+@EnableAspectJAutoProxy
+public class AspectConfig {
+
+//    @Bean
+//    public FeignExceptionHandler feignExceptionHandler(){
+//        return new FeignExceptionHandler();
+//    }
+
+}

+ 51 - 0
fm-sop/src/main/java/com/persagy/fm/sop/config/InitializingRequestMappingHandler.java

@@ -0,0 +1,51 @@
+package com.persagy.fm.sop.config;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.fm.sop.handler.JsonReturnFilterHandler;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
+import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 配置 HandlerMethodReturnValueHandler
+ * 在此配置 API 接口返回的 JSON 字段过滤处理器
+ * 在处理器 {@link RequestResponseBodyMethodProcessor} 前添加 {@link JsonReturnFilterHandler}
+ * 默认的返回值处理配置 {@link RequestMappingHandlerAdapter#getDefaultReturnValueHandlers()}
+ *
+ * @author zhufeihong
+ * @since 2020/12/30 10:10
+ */
+@Configuration
+public class InitializingRequestMappingHandler implements InitializingBean {
+
+    @Autowired
+    private RequestMappingHandlerAdapter adapter;
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        List<HandlerMethodReturnValueHandler> returnValueHandlers = adapter.getReturnValueHandlers();
+        if (CollUtil.isEmpty(returnValueHandlers)) {
+            return;
+        }
+        // 不能直接使用 returnValueHandlers集合,因为此集合被方法unmodifiableList设置为不可修改
+        List<HandlerMethodReturnValueHandler> handlers = new ArrayList<>(returnValueHandlers);
+        this.decorateHandlers(handlers);
+        adapter.setReturnValueHandlers(handlers);
+    }
+
+    private void decorateHandlers(List<HandlerMethodReturnValueHandler> handlers) {
+        for (int i = 0; i < handlers.size(); i++) {
+            // 在RequestResponseBodyMethodProcessor前添加自定义json数据返回处理器,用于返回字段过滤
+            if (handlers.get(i) instanceof RequestResponseBodyMethodProcessor) {
+                handlers.add(i, new JsonReturnFilterHandler());
+                break;
+            }
+        }
+    }
+}

+ 0 - 25
fm-sop/src/main/java/com/persagy/fm/sop/config/MpJsonConfig.java

@@ -1,25 +0,0 @@
-package com.persagy.fm.sop.config;
-
-import com.baomidou.mybatisplus.extension.handlers.GsonTypeHandler;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-/**
- * @author miemie
- * @since 2019-11-28
- */
-@Component
-public class MpJsonConfig implements CommandLineRunner {
-
-    /**
-     * 可以set进去自己的
-     */
-    @Override
-    public void run(String... args) throws Exception {
-        JacksonTypeHandler.setObjectMapper(new ObjectMapper());
-        GsonTypeHandler.setGson(new Gson());
-    }
-}

+ 33 - 0
fm-sop/src/main/java/com/persagy/fm/sop/config/MybatisConfigure.java

@@ -0,0 +1,33 @@
+package com.persagy.fm.sop.config;
+
+import com.persagy.db.config.DateMetaObjectHandler;
+import com.persagy.db.properties.MybatisPlusAutoFillProperties;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+@EnableConfigurationProperties({MybatisPlusAutoFillProperties.class})
+@RequiredArgsConstructor
+public class MybatisConfigure {
+
+    private final MybatisPlusAutoFillProperties autoFillProperties;
+
+    @Bean
+    @ConditionalOnProperty(
+            prefix = "integrated.mybatis-plus.auto-fill",
+            name = {"enabled"},
+            havingValue = "true",
+            matchIfMissing = true
+    )
+    @Primary
+    public DateMetaObjectHandler dateMetaObjectHandler(){
+        return new DateMetaObjectHandler(this.autoFillProperties);
+    }
+
+}

+ 22 - 0
fm-sop/src/main/java/com/persagy/fm/sop/config/MybatisKeyGenerator.java

@@ -0,0 +1,22 @@
+package com.persagy.fm.sop.config;
+
+import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+/***
+ * Description: 自定义主键ID生成策略
+ * @author : lijie
+ * @date :2021/4/1 21:49
+ * Update By lijie 2021/4/1 21:49
+ */
+@Slf4j
+@Component
+public class MybatisKeyGenerator implements IKeyGenerator {
+
+    @Override
+    public String executeSql(String incrementerName) {
+        log.info("mybatis plus keyGenerator: " + incrementerName);
+        return "select " + IdWorker.getIdStr() + " from dual";
+    }
+}

+ 37 - 0
fm-sop/src/main/java/com/persagy/fm/sop/constant/SopCommonConst.java

@@ -0,0 +1,37 @@
+package com.persagy.fm.sop.constant;
+/***
+ * Description: SOP模块使用的常量值
+ * @author : lijie
+ * @date :2021/4/1 14:51
+ * Update By lijie 2021/4/1 14:51
+ */
+public class SopCommonConst {
+
+    /**通用sop的项目ID(默认)*/
+    public final static String GROUP_SOP_ID = "group_sop_id";
+
+    /**发布状态-1-正常*/
+    public final static String PUBLISH_STATUS_NORMAL = "1";
+    /**发布状态-2-待修订*/
+    public final static String PUBLISH_STATUS_REVISE = "2";
+    /**发布状态-3-修订中*/
+    public final static String PUBLISH_STATUS_REVISEING = "3";
+
+    /**SOP状态-0-草稿*/
+    public final static String SOP_STATUS_DRAFT = "0";
+    /**SOP状态-1-已发布*/
+    public final static String SOP_STATUS_PUBLISH = "1";
+    /**SOP状态-2-已作废*/
+    public final static String SOP_STATUS_DESTROYED= "2";
+
+    /**SOP类型-1-集团(通用)*/
+    public final static String SOP_TYPE_GROUP = "1";
+    /**SOP状态-2-项目专用*/
+    public final static String SOP_TYPE_PROJECT= "2";
+    /**SOP版本号*/
+    public final static String SOP_VERSION_INIT= "V0.1";
+
+    /**SOP版本描述*/
+    public final static String VERSION_EXPLAIN_CREATE = "发布标准操作";
+
+}

+ 57 - 0
fm-sop/src/main/java/com/persagy/fm/sop/constant/SopQueryConst.java

@@ -0,0 +1,57 @@
+package com.persagy.fm.sop.constant;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/***
+ * Description: 接口查询的key
+ * @author : lijie
+ * @date :2021/4/6 20:14
+ * Update By lijie 2021/4/6 20:14
+ */
+public class SopQueryConst {
+    /**SOP列表返回值过滤,参考{@link JsonIgnoreProperties#value()}*/
+    public static final String[] SOP_LIST_FILTER_PROPERTIES={"project_id", "extend_field", "operator_id",
+            "operator_name", "sop_type","no_obj",
+            "related_data", "sop_status", "publish_status",
+            "version_count", "version_explain", "create_time",
+            "valid", "domains", "order_type", "tools",
+            "fit_objs", "equip_model_ids", "labels",
+            "steps", "step_count", "stauts_explain"};
+
+    /**设备模型id集合*/
+    public static final String EQUIP_MODEL_IDS="equip_model_ids";
+    /**标签名称列表*/
+    public static final String LABELS="labels";
+    /**工单类型id*/
+    public static final String ORDER_TYPE="order_type";
+    /**适用范围对象id*/
+    public static final String FIT_OBJ_IDS="fit_obj_ids";
+    /**项目id*/
+    public static final String PROJECT_ID="project_id";
+    /**设备模型id*/
+    public static final String EQUIP_MODEL_ID="equip_model_id";
+    /**设备模型名称*/
+    public static final String EQUIP_MODEL_NAME="equip_model_name";
+    /**版本号*/
+    public static final String VERSION="version";
+    /**sop_id*/
+    public static final String SOP_ID="sop_id";
+    /**rel_sop_id*/
+    public static final String REL_SOP_ID="rel_sop_id";
+    /**sop_his_id*/
+    public static final String SOP_HIS_ID="sop_his_id";
+    /**user_id*/
+    public static final String USER_ID="user_id";
+    /**dict_type*/
+    public static final String DICT_TYPE="dict_type";
+    /**--*/
+    public static final String SPECIAL_ROD="--";
+    /**""*/
+    public static final String SPECIAL_QUO="\"\"";
+    /**systemId*/
+    public static final String SYSTEM_ID="systemId";
+    /**version_explain*/
+    public static final String VERSION_EXPLAIN="version_explain";
+    /**version_count*/
+    public static final String VERSION_COUNT="version_count";
+}

+ 100 - 0
fm-sop/src/main/java/com/persagy/fm/sop/controller/EquipCompanyController.java

@@ -0,0 +1,100 @@
+package com.persagy.fm.sop.controller;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.sop.service.IEquipCompanyBookService;
+import com.persagy.fm.sop.service.IEquipCompanyService;
+import com.persagy.fm.sop.service.IEquipModelService;
+import com.persagy.old.common.StringUtil;
+import com.persagy.old.common.ToolsUtil;
+import com.persagy.old.dao.DBConst.Result;
+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;
+
+/**
+ * @desc
+ * @author yuecaipu
+ * Created on 2018/4/19
+ */
+
+@RestController
+@RequestMapping("/restEquipCompanyService")
+public class EquipCompanyController {
+
+	@Autowired
+	private IEquipCompanyService equipCompanyService;
+	@Autowired
+	private IEquipCompanyBookService equipCompanyBookService;
+	@Autowired
+	private IEquipModelService equipModelService;
+    /**
+     * sop管理-新增页:查询生产厂商列表
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryEquipCompanyForSel")
+    public String queryEquipCompanyForSel(@RequestBody JSONObject jsonObject) throws Exception {
+    	if(StringUtil.isNull(jsonObject, "user_id","company_type")) {
+    		return ToolsUtil.return_error_json;
+    	}
+    	return equipCompanyService.queryEquipCompanyForSel(jsonObject.toJSONString());
+    }
+    /**
+     * sop管理-新增页:查询生产商下的型号列表
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryEquipModelForSel")
+    public String queryEquipModelForSel(@RequestBody JSONObject jsonObject) throws Exception {
+    	if(StringUtil.isNull(jsonObject, "user_id","company_id")) {
+    		return ToolsUtil.return_error_json;
+    	}
+    	//return equipCompanyService.queryEquipModelForSel(jsonStr);
+    	return equipModelService.queryRecordByCondition(jsonObject.toJSONString());
+    }
+    /**
+     * sop管理-新增页:检索设备型号  模糊匹配设备名
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/searchEquipModelForSel")
+    public String searchEquipModelForSel(@RequestBody JSONObject jsonObject) throws Exception {
+    	if(StringUtil.isNull(jsonObject, "user_id")) {
+    		return ToolsUtil.return_error_json;
+    	}
+    	//获取所有
+    	String equipModelName = jsonObject.getString("equip_model_name");
+    	jsonObject.remove("equip_model_name");
+    	String resultStr = equipModelService.queryRecordByCondition(jsonObject.toJSONString());
+    	if (equipModelName==null || "".equals(equipModelName)) {
+			return resultStr;
+		}else {
+			//模糊匹配equipModelName
+			JSONObject resultJson = JSONObject.parseObject(resultStr);
+			JSONArray resultContent = resultJson.getJSONArray(Result.CONTENT);
+			JSONArray contents = new JSONArray();
+			JSONObject item ,companyObj,resultEquipCompanyBookObj;
+			String resultEquipCompanyBookStr;
+			for (int i = 0; i < resultContent.size(); i++) {
+				item = resultContent.getJSONObject(i);
+				if (item.getString("equip_model_name")!=null && item.getString("equip_model_name").contains(equipModelName)) {
+					//根据company_id 获取company_name
+					resultEquipCompanyBookStr = equipCompanyBookService.queryRecordByCondition(item.toJSONString());
+					resultEquipCompanyBookObj = JSONObject.parseObject(resultEquipCompanyBookStr);
+					if (Result.SUCCESS.equals(resultEquipCompanyBookObj.getString(Result.RESULT))&&resultEquipCompanyBookObj.getJSONArray(Result.CONTENT).size()!=0) {
+						companyObj = resultEquipCompanyBookObj.getJSONArray(Result.CONTENT).getJSONObject(0);
+						item.put("company_name", companyObj.getString("company_name"));
+						contents.add(item);
+					}
+				}
+			}
+			resultJson.put(Result.CONTENT, contents);
+			resultJson.put(Result.COUNT, contents.size());
+			return resultJson.toJSONString();
+		}
+    }
+}

+ 78 - 0
fm-sop/src/main/java/com/persagy/fm/sop/controller/GeneralDictController.java

@@ -0,0 +1,78 @@
+package com.persagy.fm.sop.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.sop.model.vo.*;
+import com.persagy.fm.sop.service.IGeneralDictService;
+import com.persagy.fm.sop.utils.OldResponseResult;
+import com.persagy.fm.sop.utils.OldResponseResultUtil;
+import com.persagy.old.common.StringUtil;
+import com.persagy.old.common.ToolsUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/***
+ * Description: 数据字典数据业务
+ * @author : lijie
+ * @date :2021/4/9 15:52
+ * Update By lijie 2021/4/9 15:52
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/restGeneralDictService/")
+@Api("数据字典业务")
+public class GeneralDictController {
+    private final IGeneralDictService generalDictService;
+    /***
+     * Description: 测试接口
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/19 12:17
+     * Update By lijie 2021/4/19 12:17
+     */
+    @ApiOperation("测试接口")
+    @PostMapping("test")
+    public String test(@RequestBody JSONObject jsonObject) throws Exception {
+        return ToolsUtil.successJsonMsg(new JSONArray());
+    }
+
+    /***
+     * Description: 人员信息-新增页:数据字典-专业
+     * @param queryGeneralDictVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/9 15:54
+     * Update By lijie 2021/4/9 15:54
+     */
+    @ApiOperation("人员信息-新增页:数据字典-专业")
+    @PostMapping("queryGeneralDictByKey")
+    public OldResponseResult<GeneralDictVo> queryGeneralDictByKey(@RequestBody QueryGeneralDictVo queryGeneralDictVo) {
+        return OldResponseResultUtil.successResult(generalDictService.queryGeneralDictByKey(queryGeneralDictVo.getDictType(),queryGeneralDictVo.getProjectId()));
+    }
+
+    /***
+     * Description: 数据字典:查询工单类型
+     * @param jsonObject : 
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 12:12
+     * Update By lijie 2021/4/19 12:12
+     */
+    @ApiOperation("数据字典:查询工单类型")
+    @PostMapping("queryWoTypeList")
+    public String queryWoTypeList(@RequestBody JSONObject jsonObject) {
+        if(StringUtil.isNull(jsonObject, "user_id")) {
+            return ToolsUtil.return_error_json;
+        }
+        return generalDictService.queryWoTypeList(jsonObject);
+    }
+
+}

+ 205 - 172
fm-sop/src/main/java/com/persagy/fm/sop/controller/GroupSopController.java

@@ -1,230 +1,263 @@
 package com.persagy.fm.sop.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.fm.common.response.FmResponseMsg;
-import com.persagy.fm.common.response.FmResponseUtil;
-import com.persagy.fm.sop.model.dto.RefSopInfo;
-import com.persagy.fm.sop.model.dto.Sop;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.persagy.common.exception.BusinessException;
+import com.persagy.fm.sop.model.dto.RefedSopBean;
+import com.persagy.fm.sop.model.dto.SopBean;
 import com.persagy.fm.sop.model.vo.*;
-import com.persagy.fm.sop.service.GroupSopService;
-import com.persagy.fm.sop.service.SopEditService;
-import com.persagy.old.common.CommonConst;
+import com.persagy.fm.sop.service.IGroupSopService;
+import com.persagy.fm.sop.utils.OldResponseResult;
+import com.persagy.fm.sop.utils.OldResponseResultUtil;
+import com.persagy.fm.sop.validator.Insert;
+import com.persagy.fm.sop.validator.Update;
+import com.persagy.old.common.StringUtil;
 import com.persagy.old.common.ToolsUtil;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.persagy.fm.sop.service.IObjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 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.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.ArrayList;
 
+/**
+ * 集团SOP业务
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ */
+@Slf4j
+@RequiredArgsConstructor
 @RestController
-@RequestMapping("restGroupSopService")
+@RequestMapping("/restGroupSopService/")
+@Api("集团SOP业务")
 public class GroupSopController {
-
-    @Autowired
-    private GroupSopService groupSopService;
+    private final IGroupSopService groupSopService;
+    private final IObjectService objectService;
 
 
     /**
-     * 集团sop-新增页-添加发布状态sop
-     * <p>
-     * 重构完成
-     *
-     * @param saveSopVo
-     * @return
-     * @throws Exception
+     * Description: 集团sop-新增页-添加发布状态sop
+     * @param saveSopVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/3/31 20:46
+     * Update By lijie 2021/3/31 20:46
      */
-    @PostMapping("/addPublishedSop")
-    public FmResponseMsg addPublishedSop(@RequestBody SaveSopVo saveSopVo) throws Exception {
-        //设置查询的项目类型为集团类型的
-        saveSopVo.setProject_id(CommonConst.group_sop_id);
+    @ApiOperation("集团sop-新增页-添加发布状态sop")
+    @PostMapping("addPublishedSop")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> addPublishedSop(@RequestBody @Validated(Insert.class) SaveSopVo saveSopVo) throws Exception {
         groupSopService.addPublishedSop(saveSopVo);
-        return FmResponseUtil.successMsg("保存成功");
+        return OldResponseResultUtil.successResult(new ArrayList<>());
     }
 
-
-    /**
-     * 集团sop-新增页-验证sop
-     * <p>
-     * 重构完成
-     *
-     * @param saveSopVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-编辑页-编辑sop时验证sop名称
+     * @param queryVerifySopNameBaseVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/2 11:51
+     * Update By lijie 2021/4/2 11:51
      */
-    @PostMapping("/verifySopBeforePublish")
-    public FmResponseMsg verifySopBeforePublish(@RequestBody SaveSopVo saveSopVo) throws Exception {
-        saveSopVo.setProject_id(CommonConst.group_sop_id);
-        groupSopService.verifySopForPublish(saveSopVo);
-        return FmResponseUtil.successMsg("验证成功");
+    @ApiOperation("集团sop-编辑页-编辑sop时验证sop名称")
+    @PostMapping("verifySopNameForUpdate")
+    public OldResponseResult<VerifySopNameVo> verifySopNameForUpdate(
+            @RequestBody @Validated(Update.class) QueryVerifySopNameBaseVo queryVerifySopNameBaseVo) throws Exception{
+        return OldResponseResultUtil.successResult(groupSopService.verifySopNameForUpdate(queryVerifySopNameBaseVo));
     }
 
-    /**
-     * 集团sop-新增页-添加草稿状态sop
-     * <p>
-     * 重构完成
-     *
-     * @param
-     * @return
-     * @throws Exception
-     */
-    @PostMapping("/addDraftSop")
-    public String addDraftSop(@RequestBody SaveSopEditVo saveSopEditVo) throws Exception {
-        saveSopEditVo.setProject_id(CommonConst.group_sop_id);
-        String sopId = groupSopService.addDraftSop(saveSopEditVo);
-        Map<String, Object> ret = new HashMap<>();
-        ret.put("sop_id", sopId);
-        return ToolsUtil.successJsonMsg(ret);
+    /***
+      * Description: 新增页:查询可供选择的sop,复制、引用时用
+      * @param queryVerifySopNameBaseVo : 请求参数
+      * @return : java.lang.String
+      * @author : lijie
+      * @date :2021/4/2 14:13
+      * Update By lijie 2021/4/2 14:13
+      */
+    @ApiOperation("新增页:查询可供选择的sop,复制、引用时用")
+    @PostMapping("verifySopNameForAdd")
+    public OldResponseResult<VerifySopNameVo> verifySopNameForAdd(
+            @RequestBody @Validated(Insert.class) QueryVerifySopNameBaseVo queryVerifySopNameBaseVo) throws Exception{
+        return OldResponseResultUtil.successResult(groupSopService.verifySopNameForAdd(queryVerifySopNameBaseVo));
     }
 
-    /**
-     * 集团sop-编辑页-编辑sop时验证sop名称
-     * 重构完成
-     *
-     * @param verifySopNameVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-新增页-添加草稿状态sop
+     * @param saveSopVo : 保存SOP的参数
+     * @return : com.persagy.fm.sop.utils.OldResponseResult<com.persagy.fm.sop.model.vo.QuerySopVo>  
+     * @author : lijie
+     * @date :2021/4/2 14:30
+     * Update By lijie 2021/4/2 14:30
      */
-    @PostMapping("/verifySopNameForUpdate")
-    public String verifySopNameForUpdate(@RequestBody @Validated VerifySopNameVo verifySopNameVo) throws Exception {
-        boolean isCan = groupSopService.verifySopBeforePublish(verifySopNameVo);
-        return ToolsUtil.successJsonMsg(JSONObject.parseObject("{\"can_use\":" + isCan + "}"));
-
-    }
-
-    /**
-     * 详细页-查询当前sop被引用的sop列表
-     * 重构完成
-     *
-     * @param querySopReferenceVo
-     * @return
-     * @throws Exception
-     */
-
-    @PostMapping("/queryReferencedSopListById")
-    public String queryReferencedSopListById(@RequestBody QuerySopReferenceVo querySopReferenceVo) throws Exception {
-        List<RefSopInfo> refSopInfos = groupSopService.queryReferencedSopListById(querySopReferenceVo);
-        return ToolsUtil.successJsonMsg(refSopInfos);
+    @ApiOperation("集团sop-新增页-添加草稿状态sop")
+    @PostMapping("/addDraftSop")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<QuerySopVo> addDraftSop(@RequestBody @Validated SaveSopVo saveSopVo) throws Exception{
+        return OldResponseResultUtil.successResult(groupSopService.addDraftSop(saveSopVo));
     }
 
-    /**
-     * 新增页:查询可供选择的sop,复制、引用时用
-     *
-     * @param verifySopNameVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-编辑页-发布sop
+     * @param saveSopVo : 更新的SOP的参数
+     * @return : com.persagy.fm.sop.utils.OldResponseResult<com.persagy.fm.sop.model.vo.QuerySopVo>
+     * @author : lijie
+     * @date :2021/4/8 14:05
+     * Update By lijie 2021/4/8 14:05
      */
-    @PostMapping("/verifySopNameForAdd")
-    public String verifySopNameForAdd(@RequestBody VerifySopNameVo verifySopNameVo) throws Exception {
-        boolean isCan = groupSopService.verifySopBeforePublish(verifySopNameVo);
-        return ToolsUtil.successJsonMsg(JSONObject.parseObject("{\"can_use\":" + isCan + "}"));
-
+    @ApiOperation("集团sop-编辑页-发布sop")
+    @Transactional(rollbackFor = BusinessException.class)
+    @PostMapping("/publishSop")
+    public OldResponseResult<QuerySopVo> publishSop(@RequestBody @Validated(Update.class) SaveSopVo saveSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.publishSop(saveSopVo));
     }
 
-
-    /**
-     * 集团sop-编辑页-保存草稿状态sop
-     *
-     * @param saveSopVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-编辑页-保存草稿状态sop
+     * @param saveSopVo : 保存SOP的参数
+     * @return : com.persagy.fm.sop.utils.OldResponseResult<com.persagy.fm.sop.model.vo.QuerySopVo>  
+     * @author : lijie
+     * @date :2021/4/8 17:24
+     * Update By lijie 2021/4/8 17:24
      */
+    @ApiOperation("集团sop-编辑页-保存草稿状态sop")
+    @Transactional
     @PostMapping("/saveDraftSop")
-    public String saveDraftSop(@RequestBody SaveDraftSopVo saveSopVo) throws Exception {
-        saveSopVo.setProject_id(CommonConst.group_sop_id);
-        groupSopService.saveDraftSop(saveSopVo);
-        return ToolsUtil.successJsonMsg("");
+    public OldResponseResult<QuerySopVo> saveDraftSop(@RequestBody @Validated SaveSopVo saveSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.saveDraftSop(saveSopVo));
     }
 
-    /**
-     * 新增页:查询可供选择的sop,复制、引用时用
-     * @param sopListForSelVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-新增页-验证sop
+     * @param saveSopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/2 15:28
+     * Update By lijie 2021/4/2 15:28
      */
-    @PostMapping("/querySopListForSel")
-    public String querySopListForSel(@RequestBody QuerySopListForSelVo sopListForSelVo) throws Exception{
-        sopListForSelVo.setProjectId(CommonConst.group_sop_id);
-        JSONObject item = groupSopService.querySopListForSel(sopListForSelVo);
-        return ToolsUtil.successJsonMsg(item);
+    @ApiOperation("集团sop-新增页-验证sop")
+    @PostMapping("/verifySopBeforePublish")
+    public OldResponseResult<String> verifySopBeforePublish(@RequestBody @Validated SaveSopVo saveSopVo) throws Exception{
+        return OldResponseResultUtil.successResult(groupSopService.verifySopBeforePublish(saveSopVo));
     }
 
-    /**
-     * 集团sop-列表页  查询已发布的sop列表
-     * @param sopListForSelVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-列表页:查询已发布的sop列表
+     * @param queryPublishedListVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/10 15:56
+     * Update By lijie 2021/4/10 15:56
      */
+    @ApiOperation("集团sop-查询已发布的sop列表 ")
     @PostMapping("/queryPublishedSopList")
-    public String queryPublishedSopList(@RequestBody QuerySopListForSelVo sopListForSelVo) throws Exception{
-        sopListForSelVo.setProjectId(CommonConst.group_sop_id);
-        JSONObject item = groupSopService.queryPublishedSopList(sopListForSelVo);
-        return ToolsUtil.successJsonMsg(item);
+    public OldResponseResult<PublishedListVo> queryPublishedSopList(@RequestBody @Validated QueryPublishedListVo queryPublishedListVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.queryPublishedSopList(queryPublishedListVo));
     }
 
-    /**
-     * 集团sop-列表页  查询已作废中的sop列表
-     * @param queryHistoryListVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-列表页 查询编辑中的sop列表
+     * @param queryPublishedListBaseVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/10 18:22
+     * Update By lijie 2021/4/10 18:22
+     */
+    @ApiOperation("集团sop-列表页 查询编辑中的sop列表")
+    @PostMapping("/queryEditingSopList")
+    @JsonIgnoreProperties({"project_id", "extend_field", "operator_id",
+            "operator_name", "sop_type","no_obj",
+            "related_data", "sop_status", "publish_status",
+            "version_count", "version_explain", "create_time",
+            "valid", "domains", "order_type", "tools",
+            "fit_objs", "equip_model_ids", "labels",
+            "steps", "step_count", "stauts_explain"})
+    public OldResponseResult<SopBean> queryEditingSopList(@RequestBody @Validated QueryPublishedListBaseVo queryPublishedListBaseVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.queryEditingSopList(queryPublishedListBaseVo));
+    }
+    /***
+     * Description: 集团sop-列表页  查询已作废中的sop列表
+     * @param queryPublishedListBaseVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/10 18:37
+     * Update By lijie 2021/4/10 18:37
      */
     @PostMapping("/queryDestroyedSopList")
-    public String queryDestroyedSopList(@RequestBody QueryHistoryListVo queryHistoryListVo) throws Exception{
-        queryHistoryListVo.setProjectId(CommonConst.group_sop_id);
-        return groupSopService.queryDestroyedSopList(queryHistoryListVo).toString();
+    @JsonIgnoreProperties({"project_id", "extend_field", "operator_id",
+            "operator_name", "sop_type","no_obj",
+            "related_data", "sop_status", "publish_status",
+            "version_count", "version_explain", "create_time",
+            "valid", "domains", "order_type", "tools",
+            "fit_objs", "equip_model_ids", "labels",
+            "steps", "step_count", "stauts_explain"})
+    public OldResponseResult<SopBean> queryDestroyedSopList(@RequestBody @Validated QueryPublishedListBaseVo queryPublishedListBaseVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.queryDestroyedSopList(queryPublishedListBaseVo));
     }
 
-    @Autowired
-    private SopEditService sopEditService;
-    /**
-     * 集团sop-列表页 查询编辑中的sop列表
-     * @param queryHistoryListVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 新增页:查询可供选择的sop,复制、引用时用
+     * @param queryPublishedSelVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/14 12:23
+     * Update By lijie 2021/4/14 12:23
      */
-    @PostMapping("/queryEditingSopList")
-    public String queryEditingSopList(@RequestBody QueryHistoryListVo queryHistoryListVo) throws Exception{
-        //根据
-        queryHistoryListVo.setProjectId(CommonConst.group_sop_id);
-        return groupSopService.queryEditingSopList(queryHistoryListVo).toJSONString();
+    @ApiOperation("新增页:查询可供选择的sop,复制、引用时用")
+    @PostMapping("/querySopListForSel")
+    public OldResponseResult<PublishedListVo> querySopListForSel(@RequestBody @Validated QueryPublishedSelVo queryPublishedSelVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.querySopListForSel(queryPublishedSelVo));
     }
 
-    /**
-     * 集团sop-编辑页-发布sop
-     * @param jsonStr
-     * @return
-     * @throws Exception
+    /***
+     * Description: 详细页-查询当前sop被引用的sop列表
+     * @param queryReferencedSopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 10:46
+     * Update By lijie 2021/4/19 10:46
      */
-    @PostMapping("/publishSop")
-    public String publishSop(@RequestBody SaveSopVo saveSopVo) throws Exception{
-        groupSopService.publishSop(saveSopVo);
-        return ToolsUtil.successJsonMsg("发布成功");
+    @PostMapping("/queryReferencedSopListById")
+    public OldResponseResult<RefedSopBean> queryReferencedSopListById(@RequestBody @Validated QueryReferencedSopVo queryReferencedSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(groupSopService.queryReferencedSopListById(queryReferencedSopVo));
     }
 
-
-    @PostMapping("/destroySopById")
-    public boolean  destroySopById(@RequestBody DestorySopVo destorySopVo) throws Exception{
-        return groupSopService.destroySopById(destorySopVo);
+    /***
+     * Description: 集团sop-新增页-对象选择:搜索物理世界对象大类
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 11:54
+     * Update By lijie 2021/4/19 11:54
+     */
+    @PostMapping("/searchObjectClass")
+    public String searchObjectClass(@RequestBody JSONObject jsonObject) throws Exception {
+        if(StringUtil.isNull(jsonObject, "user_id") ){
+            return ToolsUtil.return_error_json;
+        }
+        return objectService.searchObjectClass(jsonObject.toJSONString());
     }
 
-
-
-
-
-    /**
-     * 根据Id查询已发布的sop信息
-     * @param querySopVo
-     * @return
-     * @throws Exception
+    /***
+     * Description: 集团sop-新增页-信息点选择:搜索对象大类信息点
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 12:00
+     * Update By lijie 2021/4/19 12:00
      */
-    @PostMapping("/queryPublishedSopById")
-    public Sop queryPublishedSopById(@RequestBody QuerySopVo querySopVo) throws Exception{
-        String sopId = querySopVo.getSopId();
-        Sop sop = groupSopService.queryPublishedSopById(sopId);
-        return sop;
+    @PostMapping("/searchClassInfoPoint")
+    public String searchClassInfoPoint(@RequestBody JSONObject jsonObject) throws Exception {
+        if(StringUtil.isNull(jsonObject, "user_id") ){
+            return ToolsUtil.return_error_json;
+        }
+        return objectService.searchClassInfoPoint(jsonObject.toJSONString());
     }
+    
 }

+ 478 - 0
fm-sop/src/main/java/com/persagy/fm/sop/controller/ObjectController.java

@@ -0,0 +1,478 @@
+package com.persagy.fm.sop.controller;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.old.common.StringUtil;
+import com.persagy.old.common.ToolsUtil;
+import com.persagy.fm.sop.service.IObjectService;
+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;
+
+/**
+ * Created by guosongchao on 2017/8/16.
+ */
+@RestController
+@RequestMapping("/restObjectService")
+public class ObjectController {
+    @Autowired
+    public IObjectService objectService;
+    /**
+     * 搜索物理世界对象
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/searchObject")
+    @Deprecated
+    public String searchObject(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id")){
+            return objectService.searchObject(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询对象分类
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryObjClassForObjSel")
+    @Deprecated
+    public String queryObjClassForObjSel(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id")){
+            return objectService.queryObjClassForObjSel(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询通用系统类
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/querySystemClass")
+    @Deprecated
+    public String querySystemClass(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "need_back_parents")){
+            return objectService.querySystemClass(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询通用设备类
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryEquipClass")
+    @Deprecated
+    public String queryEquipClass(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "need_back_parents")){
+            return objectService.queryEquipClass(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+    /**
+     * 查询空间功能类型
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/querySpaceClass")
+    @Deprecated
+    public String querySpaceClass(@RequestBody JSONObject jsonObject) throws Exception {
+    	if(!StringUtil.isNull(jsonObject, "user_id", "need_back_parents")){
+    		return objectService.querySpaceClass(jsonObject.toJSONString());
+    	}
+    	return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询建筑体
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryBuild")
+    @Deprecated
+    public String queryBuild(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id")){
+            return objectService.queryBuild(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询楼层
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryFloor")
+    @Deprecated
+    public String queryFloor(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "need_back_parents")){
+            return objectService.queryFloor(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询空间
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/querySpace")
+    @Deprecated
+    public String querySpace(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "obj_id", "obj_type", "need_back_parents")){
+            return objectService.querySpace(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询系统示例
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/querySystem")
+    @Deprecated
+    public String querySystem(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "need_back_parents")){
+            return objectService.querySystem(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询设备示例  -系统专业下所有系统
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/querySystemForSystemDomain")
+    public String querySystemForSystemDomain(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "system_domain")){
+            return objectService.querySystemForSystemDomain(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询建筑-楼层-空间列表树
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryBuildFloorSpaceTree")
+    @Deprecated
+    public String queryBuildFloorSpaceTree(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id")){
+            return objectService.queryBuildFloorSpaceTree(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询设备示例
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryEquip")
+    @Deprecated
+    public String queryEquip(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "need_back_parents")){
+            return objectService.queryEquip(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询工具/部件列表
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryTempObjectList")
+    public String queryTempObjectList(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "obj_type")){
+            String objStr = objectService.queryTempObjectList(jsonObject.toJSONString());
+            if(jsonObject.containsKey("obj_name")){
+                String objName = jsonObject.getString("obj_name");
+                JSONObject objJson = JSONObject.parseObject(objStr);
+                if("success".equals(objJson.getString("Result"))){
+                    JSONArray objs = objJson.getJSONArray("Content");
+                    JSONObject obj;
+                    JSONArray newObjs = new JSONArray();
+                    for(int i=0; i<objs.size(); i++){
+                        obj = objs.getJSONObject(i);
+                        if(!StringUtil.isNull(obj, "obj_name") && obj.getString("obj_name").contains(objName)){
+                        	newObjs.add(obj);
+                        }
+                    }
+                    objJson.put("Content", newObjs);
+                    objStr = objJson.toJSONString();
+                }
+            }
+            return objStr;
+        }
+        return ToolsUtil.return_error_json;
+    }
+    
+    /**
+     * 验证自定义对象是否已经存在
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/existTempObjectWithType")
+    public String existTempObjectWithType(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "obj_type", "obj_name")){
+            return objectService.existTempObjectWithType(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 添加自定义对象
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/addTempObjectWithType")
+    public String addTempObjectWithType(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id", "obj_type", "obj_name")){
+            return objectService.addBatchTempObject(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+//    /**
+//     * 添加自定义对象
+//     * @param jsonStr
+//     * @return
+//     * @throws Exception
+//     */
+//    @Path("addTempObject")
+//    @POST
+//    @PostMapping("/queryTabList")
+//    public String addTempObject(@RequestBody JSONObject jsonObject) throws Exception{
+//        JSONObject jsonObject = JSONObject.parseObject(jsonObject.toJSONString());
+//        if(!StringUtil.isNull(jsonObject, "user_id", "project_id") && !StringUtil.isEmptyList(jsonObject, "objs")){
+//            return objectService.addBatchTempObject(jsonObject.toJSONString());
+//        }
+//        return ToolsUtil.return_error_json;
+//    }
+
+    /**
+     * 搜索信息点
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/searchInfoPoint")
+    public String searchInfoPoint(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "project_id")){
+            return objectService.searchInfoPoint(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询对象分类
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryObjClassForInfoPointSel")
+    public String queryObjClassForInfoPointSel(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id")){
+            return objectService.queryObjClassForInfoPointSel(jsonObject.toJSONString());
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /**
+     * 查询对象下信息点
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryInfoPointForObject")
+    @Deprecated
+    public String queryInfoPointForObject(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id", "obj_id", "obj_type")){
+            String objType = jsonObject.getString("obj_type");
+            String resultStr = ToolsUtil.successJsonMsg(new JSONArray());
+			if ("build".equals(objType) || "build_func_type".equals(objType)){
+                resultStr = objectService.queryInfoPointForBuildClass(jsonObject.toJSONString());
+            } else if ("floor".equals(objType) || "floor_type".equals(objType)){
+                resultStr = objectService.queryInfoPointForFloorClass(jsonObject.toJSONString());
+            } else if ("space".equals(objType)){
+                resultStr = objectService.queryInfoPointForSpaceClass(jsonObject.toJSONString());
+            } else if ("system".equals(objType)){
+                resultStr = objectService.queryInfoPointForSystem(jsonObject.toJSONString());
+            } else if ("equip".equals(objType)){
+                resultStr = objectService.queryInfoPointForEquip(jsonObject.toJSONString());
+            } else if ("equip_class".equals(objType)){
+                resultStr = objectService.queryInfoPointForEquipClass(jsonObject.toJSONString());
+            } else if ("system_class".equals(objType)){
+                resultStr = objectService.queryInfoPointForSystemClass(jsonObject.toJSONString());
+            } else if ("space_class".equals(objType)){
+                resultStr = objectService.queryInfoPointForSpaceClass(jsonObject.toJSONString());
+            } else if ("shaft".equals(objType)||"shaft_type".equals(objType)){
+                resultStr = objectService.queryInfoPointForShaft(jsonObject.toJSONString());
+            }
+			return resultStr;
+        }
+        return ToolsUtil.return_error_json;
+    }
+    
+	/**
+	 * @desc 查询楼层编码
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/queryFloorIdentity")
+	@Deprecated
+	public String queryFloorIdentity(@RequestBody JSONObject jsonObject) throws Exception {
+		if(StringUtil.isNull(jsonObject, "user_id")) {
+			return ToolsUtil.return_error_json;
+		}
+		return objectService.queryFloorInfoPointByCode("FloorIdentity");
+	}
+	
+	/**
+	 * @desc 查询楼层类型
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/queryFloorType")
+	@Deprecated
+	public String queryFloorType(@RequestBody JSONObject jsonObject) throws Exception {
+		if(StringUtil.isNull(jsonObject, "user_id")) {
+			return ToolsUtil.return_error_json;
+		}
+		String resultStr = objectService.queryFloorInfoPointByCode("FloorType");
+		resultStr = resultStr.replaceAll("code", "obj_id");
+		resultStr = resultStr.replaceAll("name", "obj_name");
+		return resultStr;
+	}
+	
+	/**
+	 * @desc 查询建筑功能类型
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/queryBuildFuncType")
+	@Deprecated
+	public String queryBuildFuncType(@RequestBody JSONObject jsonObject) throws Exception {
+		if(StringUtil.isNull(jsonObject, "user_id")) {
+			return ToolsUtil.return_error_json;
+		}
+		return objectService.queryBuildFuncType();
+	}
+	
+	/**
+	 * @desc 查询项目类型
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/queryProFuncType")
+	@Deprecated
+	public String queryProFuncType(@RequestBody JSONObject jsonObject) throws Exception {
+		if(StringUtil.isNull(jsonObject, "user_id")) {
+			return ToolsUtil.return_error_json;
+		}
+		return objectService.queryProFuncType();
+	}
+	
+	/**
+	 * @desc 查询竖井功能类型
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/queryShaftFuncType")
+	@Deprecated
+	public String queryShaftFuncType(@RequestBody JSONObject jsonObject) throws Exception {
+		if(StringUtil.isNull(jsonObject, "user_id")) {
+			return ToolsUtil.return_error_json;
+		}
+		return objectService.queryShaftFuncType();
+	}
+	/**
+	 * @desc  根据项目id获取对应的一级项目类型
+     * 项目id
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/queryRootProjFuncTypeById")
+	public String queryRootProjFuncTypeById(@RequestBody JSONObject jsonObject) throws Exception {
+		String rootProjFuncTypeById = objectService.queryRootProjFuncTypeById(jsonObject.getString("project_id"));
+		
+		return ToolsUtil.successJsonMsg(rootProjFuncTypeById);
+	}
+
+
+    /**
+     * @desc  新增自定义信息点控件
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryCustomInfoPointList")
+    public String queryCustomInfoPointList(@RequestBody JSONObject jsonObject) {
+        if(StringUtil.isNull(jsonObject, "user_id")){
+            return ToolsUtil.return_error_json;
+        }
+        JSONArray list = objectService.queryCustomInfoPointList();
+
+        return ToolsUtil.successJsonMsg(list);
+    }
+
+    /**
+     * @desc  新增自定义信息点控件
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/addCustomInfoPoint")
+    public String addCustomInfoPoint(@RequestBody JSONObject jsonObject) {
+        if(StringUtil.isNull(jsonObject, "user_id","custom_info_point_name")) {
+            return ToolsUtil.return_error_json;
+        }
+        boolean flag = objectService.addCustomInfoPoint(jsonObject);
+        if (flag){
+            return ToolsUtil.successJsonMsg(objectService.queryCustomInfoPointList());
+        }else {
+            return ToolsUtil.errorJsonMsg("信息点控件添加失败,请检查名称是否重复");
+        }
+    }
+
+    /**
+     * @desc  更新自定义信息点控件
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/updateCustomInfoPoint")
+    public String updateCustomInfoPoint(@RequestBody JSONObject jsonObject) {
+        if(StringUtil.isNull(jsonObject, "user_id","custom_info_point_id","custom_info_point_name")) {
+            return ToolsUtil.return_error_json;
+        }
+        boolean flag = objectService.updateCustomInfoPoint(jsonObject);
+        if (flag){
+            return ToolsUtil.successJsonMsg(objectService.queryCustomInfoPointList());
+        }else {
+            return ToolsUtil.errorJsonMsg("信息点控件更新失败,请检查名称是否重复");
+        }
+    }
+
+    /**
+     * @desc  删除自定义信息点控件
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/deleteCustomInfoPointById")
+    public String deleteCustomInfoPointById(@RequestBody JSONObject jsonObject) {
+        if(StringUtil.isNull(jsonObject, "user_id","custom_info_point_id")) {
+            return ToolsUtil.return_error_json;
+        }
+        boolean flag = objectService.delelteCustomInfoPointById(jsonObject);
+        if (flag){
+            return ToolsUtil.successJsonMsg(objectService.queryCustomInfoPointList());
+        }else {
+            return ToolsUtil.errorJsonMsg("信息点控件删除失败");
+        }
+    }
+}

+ 571 - 12
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopController.java

@@ -1,21 +1,580 @@
 package com.persagy.fm.sop.controller;
 
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.persagy.common.exception.BusinessException;
+import com.persagy.fm.sop.annotations.JsonFieldFilter;
+import com.persagy.fm.sop.entity.Sop;
+import com.persagy.fm.sop.enums.MsgTypeEnum;
+import com.persagy.fm.sop.model.dto.RefedSopBean;
+import com.persagy.fm.sop.model.dto.SopBean;
+import com.persagy.fm.sop.model.vo.*;
+import com.persagy.fm.sop.service.IInstanceService;
+import com.persagy.fm.sop.service.IProjectSopService;
+import com.persagy.fm.sop.service.IWoFlowPlanService;
+import com.persagy.fm.sop.utils.OldResponseResult;
+import com.persagy.fm.sop.utils.OldResponseResultUtil;
+import com.persagy.fm.sop.validator.ProjectEdit;
+import com.persagy.fm.sop.validator.ProjectInsert;
+import com.persagy.fm.sop.validator.ProjectQuery;
+import com.persagy.fm.sop.validator.ProjectUpdate;
+import com.persagy.old.common.*;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import java.util.ArrayList;
 
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
+/***
+ * Description: 项目SOP的controller类
+ * @author : lijie
+ * @date :2021/4/14 12:11
+ * Update By lijie 2021/4/14 12:11
  */
+@Slf4j
+@RequiredArgsConstructor
 @RestController
-@RequestMapping("/sop")
+@RequestMapping("/restSopService")
+@Api("项目SOP的接口")
 public class SopController {
+    private final IProjectSopService projectSopService;
+    private final IInstanceService instanceService;
+    private final IWoFlowPlanService woFlowPlanService;
+
+    /***
+     * Description: 根据sopId查询已发布的sop列表--后台使用 
+     * @param queryPublishedSopVo : 查询参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/10 13:57
+     * Update By lijie 2021/4/10 13:57
+     */
+    @ApiOperation(value = "根据sopId查询已发布的sop列表",hidden = true)
+    @PostMapping("/queryPublishedSopListByIds")
+    public OldResponseResult<SopBean> queryPublishedSopListByIds(@RequestBody @Validated QueryPublishedSopVo queryPublishedSopVo){
+        return OldResponseResultUtil.successResult(projectSopService.queryPublishedSopListByIds(queryPublishedSopVo.getSopIds()));
+    }
+
+    /***
+     * Description: 当对象名称变化或对象删除时更新sop
+     * @param objectChangeVo : 请求参数
+     * @author : lijie
+     * @date :2021/4/10 14:34
+     * Update By lijie 2021/4/10 14:34
+     */
+    @ApiOperation(value = "当对象名称变化或对象删除时更新sop",hidden = true)
+    @PostMapping("/updateSopWhenObjectChange")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> updateSopWhenObjectChange(@RequestBody ObjectChangeVo objectChangeVo) throws Exception {
+        if (!MsgTypeEnum.TWO.getType().equals(objectChangeVo.getMsType())
+              || !MsgTypeEnum.SEVEN.getType().equals(objectChangeVo.getMsType())){
+            return OldResponseResultUtil.successResult(new ArrayList<>());
+        }
+        // 当对象名称变化或对象删除时更新sop
+        projectSopService.updateSopWhenObjectChange(objectChangeVo,
+                MsgTypeEnum.SEVEN.getType().equals(objectChangeVo.getMsType()));
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+    /***
+     * Description: 查询项目SOP列表
+     * @param queryPublishedListVo : 请求参数
+     * @return : com.persagy.fm.sop.utils.OldResponseResult<com.persagy.fm.sop.model.vo.PublishedListVo>
+     * @author : lijie
+     * @date :2021/4/10 17:57
+     * Update By lijie 2021/4/10 17:57
+     */
+    @ApiOperation(value = "查询项目SOP列表")
+    @PostMapping("/queryPublishedSopList")
+    public OldResponseResult<PublishedListVo> queryPublishedSopList(@RequestBody @Validated(ProjectQuery.class) QueryPublishedListVo queryPublishedListVo) throws Exception{
+        return OldResponseResultUtil.successResult(projectSopService.queryPublishedSopList(queryPublishedListVo));
+    }
+
+    /***
+     * Description: 查询编辑中的sop列表 (只查询有效的,且已发布的sop)
+     * @param queryPublishedListBaseVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/10 18:08
+     * Update By lijie 2021/4/10 18:08
+     */
+    @ApiOperation(value = "查询编辑中的sop列表 ")
+    @PostMapping("/queryEditingSopList")
+    public OldResponseResult<SopBean> queryEditingSopList(@RequestBody @Validated(ProjectQuery.class) QueryPublishedListBaseVo queryPublishedListBaseVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.queryEditingSopList(queryPublishedListBaseVo));
+    }
+
+    /***
+     * Description: 查询已作废的sop列表
+     * @param queryPublishedListBaseVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/10 18:27
+     * Update By lijie 2021/4/10 18:27
+     */
+    @ApiOperation(value = "查询编辑中的sop列表 ")
+    @PostMapping("/queryDestroyedSopList")
+    public OldResponseResult<SopBean> queryDestroyedSopList(@RequestBody @Validated(ProjectQuery.class) QueryPublishedListBaseVo queryPublishedListBaseVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.queryDestroyedSopList(queryPublishedListBaseVo));
+    }
+
+    /***
+     * Description: 根据Id查询已发布的sop信息
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/10 18:47
+     * Update By lijie 2021/4/10 18:47
+     */
+    @ApiOperation(value = "根据Id查询已发布的sop信息 ")
+    @PostMapping("/queryPublishedSopById")
+    public OldResponseResult<SopBean> queryPublishedSopById(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.queryPublishedSopById(querySopVo));
+    }
+
+    /***
+     * Description: 根据Id查询可编辑的sop信息
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/10 19:27
+     * Update By lijie 2021/4/10 19:27
+     */
+    @ApiOperation(value = "根据Id查询可编辑的sop信息 ")
+    @PostMapping("/querySopForEditById")
+    public OldResponseResult<SopBean> querySopForEditById(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.querySopForEditById(querySopVo));
+    }
+
+    /***
+     * Description: 作废sop信息
+     * @param queryDestroySopVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/13 9:07
+     * Update By lijie 2021/4/13 9:07
+     */
+    @ApiOperation("作废sop信息")
+    @PostMapping("/destroySopById")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> destroySopById(@RequestBody QueryDestroySopVo queryDestroySopVo) throws Exception {
+        projectSopService.destroySopById(queryDestroySopVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+    /***
+     * Description: 恢复已作废的sop信息
+     * @param queryDestroySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/13 16:12
+     * Update By lijie 2021/4/13 16:12
+     */
+    @ApiOperation("恢复已作废的sop信息")
+    @PostMapping("/recoverSopById")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<String> recoverSopById(@RequestBody QueryDestroySopVo queryDestroySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.recoverSopById(queryDestroySopVo));
+    }
+
+    /***
+     * Description: 添加发布状态SOP
+     * @param saveSopVo : 新建SOP的请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/13 20:32
+     * Update By lijie 2021/4/13 20:32
+     */
+    @ApiOperation("添加发布状态SOP")
+    @PostMapping("/addPublishedSop")
+    public OldResponseResult<Void> addPublishedSop(@RequestBody SaveSopVo saveSopVo) throws Exception {
+        projectSopService.addPublishedSop(saveSopVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+    
+    /***
+     * Description: 编辑sop时验证sop名称
+     * @param queryVerifySopNameBaseVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/14 10:27
+     * Update By lijie 2021/4/14 10:27
+     */
+    @ApiOperation("编辑sop时验证sop名称")
+    @PostMapping("/verifySopNameForUpdate")
+    public OldResponseResult<VerifySopNameVo> verifySopNameForUpdate(
+            @RequestBody @Validated(ProjectUpdate.class) QueryVerifySopNameBaseVo queryVerifySopNameBaseVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.verifySopNameForUpdate(queryVerifySopNameBaseVo));
+    }
+
+    /***
+     * Description: 添加SOP时验证sop名称
+     * @param queryVerifySopNameBaseVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/14 12:04
+     * Update By lijie 2021/4/14 12:04
+     */
+    @ApiOperation("添加SOP时验证sop名称")
+    @PostMapping("/verifySopNameForAdd")
+    public OldResponseResult<VerifySopNameVo> verifySopNameForAdd(@RequestBody @Validated(ProjectInsert.class) QueryVerifySopNameBaseVo queryVerifySopNameBaseVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.verifySopNameForAdd(queryVerifySopNameBaseVo));
+    }
+    /***
+     * Description: 添加草稿状态SOP
+     * @param saveSopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/14 12:12
+     * Update By lijie 2021/4/14 12:12
+     */
+    @ApiOperation("添加草稿状态SOP")
+    @PostMapping("/addDraftSop")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<QuerySopVo> addDraftSop(@RequestBody @Validated(ProjectEdit.class) SaveSopVo saveSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.addDraftSop(saveSopVo));
+    }
+
+    /***
+     * Description: 发布sop
+     * @param saveSopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/14 12:15
+     * Update By lijie 2021/4/14 12:15
+     */
+    @ApiOperation("发布sop")
+    @PostMapping("/publishSop")
+    public OldResponseResult<QuerySopVo> publishSop(@RequestBody @Validated(ProjectUpdate.class) SaveSopVo saveSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.publishSop(saveSopVo));
+    }
+
+    /***
+     * Description: sop管理-编辑页-保存草稿状态sop
+     * @param saveSopVo : 保存SOP的参数
+     * @return : com.persagy.fm.sop.utils.OldResponseResult<com.persagy.fm.sop.model.vo.QuerySopVo>
+     * @author : lijie
+     * @date :2021/4/8 17:24
+     * Update By lijie 2021/4/8 17:24
+     */
+    @ApiOperation("sop管理-编辑页-保存草稿状态sop")
+    @Transactional(rollbackFor = BusinessException.class)
+    @PostMapping("/saveDraftSop")
+    public OldResponseResult<QuerySopVo> saveDraftSop(@RequestBody @Validated(ProjectUpdate.class) SaveSopVo saveSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.saveDraftSop(saveSopVo));
+    }
+
+    /***
+     * Description: sop管理-新增页-验证sop
+     * @param saveSopVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/2 15:28
+     * Update By lijie 2021/4/2 15:28
+     */
+    @ApiOperation("sop管理-新增页-验证sop")
+    @PostMapping("/verifySopBeforePublish")
+    public OldResponseResult<String> verifySopBeforePublish(@RequestBody @Validated SaveSopVo saveSopVo) throws Exception{
+        return OldResponseResultUtil.successResult(projectSopService.verifySopForPublish(saveSopVo));
+    }
+
+    /***
+     * Description: 查询可供选择的sop,复制、引用时用
+     * @param queryPublishedSelVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 9:16
+     * Update By lijie 2021/4/19 9:16
+     */
+    @ApiOperation("查询可供选择的sop,复制、引用时用")
+    @PostMapping("/querySopListForSel")
+    public OldResponseResult<PublishedListVo> querySopListForSel(@RequestBody @Validated(ProjectQuery.class) QueryPublishedSelVo queryPublishedSelVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.querySopListForSel(queryPublishedSelVo));
+    }
+
+    /***
+     * Description: 查询当前sop被引用的sop列表
+     * @param queryReferencedSopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 11:41
+     * Update By lijie 2021/4/19 11:41
+     */
+    @ApiOperation("查询当前sop被引用的sop列表")
+    @PostMapping("/queryReferencedSopListById")
+    public OldResponseResult<RefedSopBean> queryReferencedSopListById(@RequestBody @Validated QueryReferencedSopVo queryReferencedSopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.queryReferencedSopListById(queryReferencedSopVo));
+    }
+
+    /***
+     * Description: 取消修订的sop信息
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 12:29
+     * Update By lijie 2021/4/19 12:29
+     */
+    @ApiOperation("取消修订的sop信息")
+    @PostMapping("/cancelReviseSopById")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> cancelReviseSopById(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        projectSopService.cancelReviseSopById(querySopVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+
+    /***
+     * Description: 删除草稿的sop信息
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 19:54
+     * Update By lijie 2021/4/19 19:54
+     */
+    @PostMapping("/deleteDraftSopById")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> deleteDraftSopById(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        projectSopService.deleteDraftSopById(querySopVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+
+    /***
+     * Description: 编辑列表发布sop前验证
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 20:06
+     * Update By lijie 2021/4/19 20:06
+     */
+    @PostMapping("/verifySopOnList")
+    public OldResponseResult<String> verifySopOnList(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.verifySopOnList(querySopVo));
+    }
+
+
+    /***
+     * Description: 发布sop信息
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 20:53
+     * Update By lijie 2021/4/19 20:53
+     */
+    @PostMapping("/publishSopOnList")
+    public OldResponseResult<QuerySopVo> publishSopOnList(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.publishSopOnList(querySopVo));
+    }
+
+	/***
+	 * Description: 查询引用的sop作废的消息列表
+	 * @param querySopVo : 请求参数
+	 * @return : java.lang.String  
+	 * @author : lijie
+	 * @date :2021/4/19 21:03
+	 * Update By lijie 2021/4/19 21:03
+	 */
+    @PostMapping("/querySopDestroyMsgList")
+    public OldResponseResult<DestroyMsgVo> querySopDestroyMsgList(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.querySopDestroyMsgList(querySopVo));
+    }
+
+    /***
+     * Description: 标记sop作废消息已读
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/19 21:55
+     * Update By lijie 2021/4/19 21:55
+     */
+    @PostMapping("/markReadSopDestroyMsg")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> markReadSopDestroyMsg(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        projectSopService.markReadSopDestroyMsg(querySopVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+
+    /***
+     * Description: 查询待修订中的消息列表
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/20 11:22
+     * Update By lijie 2021/4/20 11:22
+     */
+    @PostMapping("/querySopReviseMsgList")
+    public OldResponseResult<ReviseMsgVo> querySopReviseMsgList(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.querySopReviseMsgList(querySopVo));
+    }
+
+    /***
+     * Description: 忽略修订消息
+     * @param queryReviseMsgVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/20 12:17
+     * Update By lijie 2021/4/20 12:17
+     */
+    @ApiOperation("忽略修订消息")
+    @PostMapping("/ignoreSopReviseMsg")
+    @Transactional(rollbackFor = BusinessException.class)
+    @ApiOperationSupport(ignoreParameters = {"revise_obj_id","reviseObjId"})
+    public OldResponseResult<Void> ignoreSopReviseMsg(@RequestBody @Validated QueryReviseMsgVo queryReviseMsgVo) throws Exception {
+        projectSopService.ignoreSopReviseMsg(queryReviseMsgVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+    /***
+     * Description: 查询sop的历史版本列表
+     * @param querySopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/20 14:06
+     * Update By lijie 2021/4/20 14:06
+     */
+    @PostMapping("/querySopHisList")
+    public OldResponseResult<SopHisListVo> querySopHisList(@RequestBody @Validated QuerySopVo querySopVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.querySopHisList(querySopVo));
+    }
+
+    /***
+     * Description: 根据ID查询历史sop或者引用的sop详细信息
+     * @param querySopDetailVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/20 14:46
+     * Update By lijie 2021/4/20 14:46
+     */
+    @ApiOperation("根据ID查询历史sop或者引用的sop详细信息")
+    @PostMapping("/querySopDetailById")
+    public OldResponseResult<SopBean> querySopDetailById(@RequestBody @Validated QuerySopDetailVo querySopDetailVo) throws Exception {
+        return OldResponseResultUtil.successResult(projectSopService.querySopDetailById(querySopDetailVo));
+    }
+
+    /***
+     * Description: 查询自动修订方案
+     * @param queryAutoReviseMsgVo :请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/20 18:52
+     * Update By lijie 2021/4/20 18:52
+     */
+    @PostMapping("/queryAutoRevisePlan")
+    public OldResponseResult<AutoReviseMsgVo> queryAutoRevisePlan(@RequestBody @Validated QueryAutoReviseMsgVo queryAutoReviseMsgVo) throws Exception {
+          return OldResponseResultUtil.successResult(projectSopService.queryAutoRevisePlan(queryAutoReviseMsgVo));
+    }
+
+    /***
+     * Description: 自动修订
+     * @param autoReviseSopVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/20 21:10
+     * Update By lijie 2021/4/20 21:10
+     */
+    @PostMapping("/autoReviseSop")
+    @Transactional(rollbackFor = BusinessException.class)
+    public OldResponseResult<Void> autoReviseSop(@RequestBody AutoReviseSopVo autoReviseSopVo) {
+        if (StrUtil.isBlank(autoReviseSopVo.getUserId())
+                || StrUtil.isBlank(autoReviseSopVo.getMsgId())
+                || StrUtil.isBlank(autoReviseSopVo.getReviseObjId())
+                || StrUtil.isBlank(autoReviseSopVo.getSopId())){
+            throw new BusinessException("缺少必填项");
+        }
+        projectSopService.autoReviseSop(autoReviseSopVo);
+        return OldResponseResultUtil.successResult(new ArrayList<>());
+    }
+
+    /***
+     * Description: 实例化中间件
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/21 14:52
+     * Update By lijie 2021/4/21 14:52
+     */
+    @PostMapping("/convertClassToObject")
+    public String convertClassToObject(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "project_id")){
+            return instanceService.convertClassToObject(jsonObject);
+        }
+        return ToolsUtil.return_error_json;
+    }
+
+    /***
+     * Description: 根据工单类型id作废sop与工单类型的关系
+     * @param jsonObject : 
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/21 15:19
+     * Update By lijie 2021/4/21 15:19
+     */
+    @PostMapping("/deleteSopOrderTypeRelByOrderTypeId")
+    @Transactional(rollbackFor = BusinessException.class)
+    public String deleteSopOrderTypeRelByOrderTypeId(@RequestBody JSONObject jsonObject) throws Exception {
+        if(!StringUtil.isNull(jsonObject, "user_id","order_type_id")){
+            return projectSopService.deleteSopOrderTypeRelByOrderType(jsonObject);
+        }
+        return ToolsUtil.return_error_json;
+    }
+    /***
+     * Description: 组装工单令牌
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/21 16:17
+     * Update By lijie 2021/4/21 16:17
+     */
+    @PostMapping("/buildWorkOrder")
+    public String buildWorkOrder(@RequestBody JSONObject jsonObject) throws Exception {
+        return projectSopService.buildWorkOrder(jsonObject);
+    }
 
-}
+	/***
+	 * Description: 工单事项自动实例化
+	 * @param jsonObject : 请求参数
+	 * @return : java.lang.String  
+	 * @author : lijie
+	 * @date :2021/4/21 16:40
+	 * Update By lijie 2021/4/21 16:40
+	 */
+    @PostMapping("/autoInstantiateWoMatters")
+    public String autoInstantiateWoMatters(@RequestBody JSONObject jsonObject) throws Exception {
+    	if (StringUtil.isNull(jsonObject, "user_id", "project_id") || StringUtil.isEmptyList(jsonObject, "published_matters")) {
+    		return ToolsUtil.return_error_json;
+    	}
+    	return woFlowPlanService.autoInstantiateWoMatters(jsonObject);
+    }
+    /***
+     * Description: 获得工单事项预览
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/21 16:47
+     * Update By lijie 2021/4/21 16:47
+     */
+    @PostMapping("/getWoMattersPreview")
+    public String getWoMattersPreview(@RequestBody JSONObject jsonObject) throws Exception {
+        return projectSopService.getWoMattersPreview(jsonObject);
+    }
 
+    /***
+     * Description: 我的工单-新增页:查询推荐的sop
+     * @param jsonObject : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/21 16:59
+     * Update By lijie 2021/4/21 16:59
+     */
+    @PostMapping("/queryRecommendSop")
+    public String queryRecommendSop(@RequestBody JSONObject jsonObject) throws Exception {
+    	return projectSopService.queryRecommendSop(jsonObject);
+    }
+    
+}

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopEditController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-@RestController
-@RequestMapping("/sop-edit")
-public class SopEditController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopEquipModelRelController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-@RestController
-@RequestMapping("/sop-equip-model-rel")
-public class SopEquipModelRelController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopHisController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-18
- */
-@RestController
-@RequestMapping("/sop-his")
-public class SopHisController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopLabelRelController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-@RestController
-@RequestMapping("/sop-label-rel")
-public class SopLabelRelController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopObjRelController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-@RestController
-@RequestMapping("/sop-obj-rel")
-public class SopObjRelController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopOrderTypeRelController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-@RestController
-@RequestMapping("/sop-order-type-rel")
-public class SopOrderTypeRelController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopReviseMsgController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-18
- */
-@RestController
-@RequestMapping("/sop-revise-msg")
-public class SopReviseMsgController {
-
-}
-

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopSopRelController.java

@@ -1,21 +0,0 @@
-package com.persagy.fm.sop.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-@RestController
-@RequestMapping("/sop-sop-rel")
-public class SopSopRelController {
-
-}
-

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/CustomInfoPointMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.CustomInfoPoint;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (custom_info_point)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface CustomInfoPointMapper extends BaseMapper<CustomInfoPoint> {
+
+}

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/OperateLogMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.OperateLog;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (operate_log)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface OperateLogMapper extends BaseMapper<OperateLog> {
+
+}

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopCellMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopCell;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (sop_cell)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface SopCellMapper extends BaseMapper<SopCell> {
+
+}

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopDestroyMsgMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopDestroyMsg;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (sop_destroy_msg)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface SopDestroyMsgMapper extends BaseMapper<SopDestroyMsg> {
+
+}

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopDomainRelMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopDomainRel;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (sop_domain_rel)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface SopDomainRelMapper extends BaseMapper<SopDomainRel> {
+
+}

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEditMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopEdit;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopEdit;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_edit)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-17
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopEditMapper extends BaseMapper<SopEdit> {
 
 }

+ 0 - 39
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEditMapper.xml

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopEditMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopEdit">
-        <id column="sop_edit_id" property="sopEditId" />
-        <result column="sop_id" property="sopId" />
-        <result column="project_id" property="projectId" />
-        <result column="extend_field" property="extendField" />
-        <result column="operator" property="operator" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="sop_name" property="sopName" />
-        <result column="sop_type" property="sopType" />
-        <result column="no_obj" property="noObj" />
-        <result column="domains" property="domains" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="tools" property="tools" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="order_type" property="orderType" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="fit_objs" property="fitObjs" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="equip_model_ids" property="equipModelIds" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="labels" property="labels" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="steps" property="steps" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="related_data" property="relatedData" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="sop_status" property="sopStatus" />
-        <result column="publish_status" property="publishStatus" />
-        <result column="ref_sop_ids" property="refSopIds" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="version" property="version" />
-        <result column="version_count" property="versionCount" />
-        <result column="version_explain" property="versionExplain" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_edit_id, sop_id, project_id, extend_field, operator, sop_name, sop_type, no_obj, domains, tools, order_type, fit_objs, equip_model_ids, labels, steps, related_data, sop_status, publish_status, ref_sop_ids, version, version_count, version_explain, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEquipModelRelMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopEquipModelRel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopEquipModelRel;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_equip_model_rel)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-17
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopEquipModelRelMapper extends BaseMapper<SopEquipModelRel> {
 
 }

+ 0 - 20
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopEquipModelRelMapper.xml

@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopEquipModelRelMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopEquipModelRel">
-        <id column="sop_equip_model_id" property="sopEquipModelId" />
-        <result column="sop_id" property="sopId" />
-        <result column="equip_model_id" property="equipModelId" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_equip_model_id, sop_id, equip_model_id, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopHisMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopHis;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopHis;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_his)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-18
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopHisMapper extends BaseMapper<SopHis> {
 
 }

+ 0 - 39
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopHisMapper.xml

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopHisMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopHis">
-        <id column="sop_his_id" property="sopHisId" />
-        <result column="sop_id" property="sopId" />
-        <result column="project_id" property="projectId" />
-        <result column="extend_field" property="extendField" />
-        <result column="operator" property="operator" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="sop_type" property="sopType" />
-        <result column="no_obj" property="noObj" />
-        <result column="domains" property="domains" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="tools" property="tools" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="order_type" property="orderType" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="fit_objs" property="fitObjs" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="equip_model_ids" property="equipModelIds" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="labels" property="labels" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
-        <result column="steps" property="steps" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="related_data" property="relatedData" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="sop_status" property="sopStatus" />
-        <result column="publish_status" property="publishStatus" />
-        <result column="ref_sop_ids" property="refSopIds" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="refed_sops" property="refedSops" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="version" property="version" />
-        <result column="version_count" property="versionCount" />
-        <result column="version_explain" property="versionExplain" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_his_id, sop_id, project_id, extend_field, operator, sop_type, no_obj, domains, tools, order_type, fit_objs, equip_model_ids, labels, steps, related_data, sop_status, publish_status, ref_sop_ids, refed_sops, version, version_count, version_explain, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopLabelRelMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopLabelRel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopLabelRel;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_label_rel)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-17
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopLabelRelMapper extends BaseMapper<SopLabelRel> {
 
 }

+ 0 - 20
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopLabelRelMapper.xml

@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopLabelRelMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopLabelRel">
-        <id column="sop_label_id" property="sopLabelId" />
-        <result column="sop_id" property="sopId" />
-        <result column="label" property="label" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_label_id, sop_id, label, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.Sop;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.Sop;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-17
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopMapper extends BaseMapper<Sop> {
 
 }

+ 0 - 39
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopMapper.xml

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.Sop">
-        <id column="sop_id" property="sopId" />
-        <result column="project_id" property="projectId" />
-        <result column="extend_field" property="extendField" />
-        <result column="operator" property="operator" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="sop_name" property="sopName" />
-        <result column="sop_type" property="sopType" />
-        <result column="no_obj" property="noObj" />
-        <result column="domains" property="domains"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="order_type" property="orderType" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="tools" property="tools" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="fit_objs" property="fitObjs" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="equip_model_ids" property="equipModelIds" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="labels" property="labels" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="steps_version" property="stepsVersion" />
-        <result column="steps" property="steps" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="related_data" property="relatedData" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="sop_status" property="sopStatus" />
-        <result column="publish_status" property="publishStatus" />
-        <result column="ref_sop_ids" property="refSopIds" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="version" property="version" />
-        <result column="version_count" property="versionCount" />
-        <result column="version_explain" property="versionExplain" />
-        <result column="version_exp" property="versionExp" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-        <result column="valid" property="valid" />
-        <result column="update_time" property="updateTime" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_id, project_id, extend_field, operator, sop_name, sop_type, no_obj, domains, order_type, tools, fit_objs, equip_model_ids, labels, steps_version, steps, related_data, sop_status, publish_status, ref_sop_ids, version, version_count, version_explain, version_exp, valid, update_time
-    </sql>
-
-</mapper>

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopMediaRelMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopMediaRel;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (sop_media_rel)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface SopMediaRelMapper extends BaseMapper<SopMediaRel> {
+
+}

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopObjRelMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopObjRel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopObjRel;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_obj_rel)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-17
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopObjRelMapper extends BaseMapper<SopObjRel> {
 
 }

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopObjRelMapper.xml

@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopObjRelMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopObjRel">
-        <id column="sop_obj_id" property="sopObjId" />
-        <result column="sop_id" property="sopId" />
-        <result column="obj_id" property="objId" />
-        <result column="obj_type" property="objType" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_obj_id, sop_id, obj_id, obj_type, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopOrderTypeRelMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopOrderTypeRel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopOrderTypeRel;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_order_type_rel)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-17
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopOrderTypeRelMapper extends BaseMapper<SopOrderTypeRel> {
 
 }

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopOrderTypeRelMapper.xml

@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopOrderTypeRelMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopOrderTypeRel">
-        <id column="sop_order_type_id" property="sopOrderTypeId" />
-        <result column="sop_id" property="sopId" />
-        <result column="project_id" property="projectId" />
-        <result column="order_type" property="orderType" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_order_type_id, sop_id, project_id, order_type, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 8 - 7
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopReviseMsgMapper.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.sop.dao;
 
-import com.persagy.fm.sop.model.dto.SopReviseMsg;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopReviseMsg;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- *  Mapper 接口
- * </p>
+ * (sop_revise_msg)数据Mapper
  *
- * @author weijinhao
- * @since 2021-03-18
- */
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
 public interface SopReviseMsgMapper extends BaseMapper<SopReviseMsg> {
 
 }

+ 0 - 23
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopReviseMsgMapper.xml

@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopReviseMsgMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopReviseMsg">
-        <id column="msg_id" property="msgId" />
-        <result column="sop_id" property="sopId" />
-        <result column="obj_id" property="objId" />
-        <result column="obj_name" property="objName" />
-        <result column="obj_type" property="objType" />
-        <result column="content" property="content" />
-        <result column="status" property="status" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        msg_id, sop_id, obj_id, obj_name, obj_type, content, status, create_time, update_time
-    </sql>
-
-</mapper>

+ 0 - 16
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopSopRelMapper.java

@@ -1,16 +0,0 @@
-package com.persagy.fm.sop.dao;
-
-import com.persagy.fm.sop.model.dto.SopSopRel;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * <p>
- *  Mapper 接口
- * </p>
- *
- * @author weijinhao
- * @since 2021-03-17
- */
-public interface SopSopRelMapper extends BaseMapper<SopSopRel> {
-
-}

+ 0 - 21
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopSopRelMapper.xml

@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.sop.dao.SopSopRelMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.persagy.fm.sop.model.dto.SopSopRel">
-        <id column="sop_sop_id" property="sopSopId" />
-        <result column="project_id" property="projectId" />
-        <result column="sop_id" property="sopId" />
-        <result column="rel_sop_id" property="relSopId" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="valid" property="valid" />
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        sop_sop_id, project_id, sop_id, rel_sop_id, create_time, update_time, valid
-    </sql>
-
-</mapper>

+ 17 - 0
fm-sop/src/main/java/com/persagy/fm/sop/dao/SopToolRelMapper.java

@@ -0,0 +1,17 @@
+package com.persagy.fm.sop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.sop.entity.SopToolRel;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * (sop_tool_rel)数据Mapper
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+*/
+@Mapper
+public interface SopToolRelMapper extends BaseMapper<SopToolRel> {
+
+}

+ 52 - 0
fm-sop/src/main/java/com/persagy/fm/sop/deserializers/SpecialParamDeserializer.java

@@ -0,0 +1,52 @@
+package com.persagy.fm.sop.deserializers;
+
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer;
+import com.persagy.fm.common.helper.SpringHelper;
+import com.persagy.fm.sop.constant.SopQueryConst;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.jackson.JsonComponent;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@JsonComponent
+public class SpecialParamDeserializer extends JsonDeserializer<Object> {
+
+    @Override
+    public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+        JsonToken currentToken = jsonParser.getCurrentToken();
+        if (jsonParser.getCurrentName().equals(SopQueryConst.VERSION_EXPLAIN)){
+            if (currentToken==JsonToken.START_ARRAY){
+                return deserializationContext.readValue(jsonParser,
+                        deserializationContext.getTypeFactory().constructCollectionType(ArrayList.class, String.class));
+            }
+            String value = jsonParser.getValueAsString();
+            // 解决老的版本中前端的bug,每次传version_explain都会变成多一层双引号
+            if (StrUtil.isNotBlank(value) &&
+                    (SopQueryConst.SPECIAL_ROD.equals(value)
+                            || SopQueryConst.SPECIAL_QUO.equals(value)
+                            || value.matches("^(\\u005C*\\u0022*\\u005C*)+?$"))){
+                return new ArrayList<>();
+            }
+        }
+        String value = jsonParser.getValueAsString();
+        if (SopQueryConst.SPECIAL_ROD.equals(value)){
+            return null;
+        }
+        if (jsonParser.getCurrentName().equals(SopQueryConst.VERSION_COUNT)){
+            if (StrUtil.isNotBlank(value) && NumberUtil.isNumber(value)){
+                return Integer.parseInt(value);
+            }
+        }
+        return value;
+    }
+}

+ 58 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/CustomInfoPoint.java

@@ -0,0 +1,58 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (custom_info_point)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("custom_info_point")
+public class CustomInfoPoint extends Model<CustomInfoPoint> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+	private String customInfoPointId;
+    /**
+     * 信息点控件名
+     */
+    private String customInfoPointName;
+    /**
+     * 控件明细
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private Object details;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 81 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/OperateLog.java

@@ -0,0 +1,81 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (operate_log)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("operate_log")
+public class OperateLog extends Model<OperateLog> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+	private String logId;
+    /**
+     * 操作人id
+     */
+    private String operatePersonId;
+    /**
+     * 操作表名
+     */
+    private String tableName;
+    /**
+     * 操作类型
+     */
+    private String operateType;
+    /**
+     * 请求方法
+     */
+    private String requestMethod;
+    /**
+     * 请求内容
+     */
+    private Object requestContent;
+    /**
+     * 操作时间,格式为yyyyMMddHHmmss
+     */
+    private String operateTime;
+    /**
+     * 操作结果
+     */
+    private String operateResult;
+    /**
+     * 操作结果内容
+     */
+    private Object resultContent;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 159 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/Sop.java

@@ -0,0 +1,159 @@
+package com.persagy.fm.sop.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.sop.handler.JsonTypeHandlerFactory;
+import com.persagy.fm.sop.model.dto.OperatorBean;
+import com.persagy.fm.sop.model.dto.RelatedDataBean;
+import com.persagy.fm.sop.model.dto.SopSignBean;
+import com.persagy.fm.sop.model.vo.SignVo;
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * (sop)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName(value = "sop",autoResultMap = true)
+@Builder
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+public class Sop extends Model<Sop> implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**SOP的名称*/
+    public static final String SOP_NAME="sop_name";
+    /**SOP的id*/
+    public static final String SOP_ID="sop_id";
+    /**SOP的状态*/
+    public static final String SOP_STATUS="sop_status";
+    /**SOP的有效状态*/
+    public static final String VALID="valid";
+    /**SOP的项目id*/
+    public static final String PROJECT_ID="project_id";
+    /**SOP的更新时间*/
+    public static final String UPDATE_TIME="update_time";
+    /**SOP的更新时间*/
+    public static final String UPDATE_TIME_FROM="update_time_from";
+    /**SOP的更新时间*/
+    public static final String UPDATE_TIME_TO="update_time_to";
+
+    /**
+     * SOP的主键id
+     */
+    @TableId
+    @TableField(value = "sop_id")
+    @JSONField(name = "sop_id")
+	private String sopId;
+    /**
+     * 项目id,集团SOP的值为group_sop_id
+     */
+    @TableField(value = "project_id")
+    @JSONField(name = "project_id")
+    private String projectId;
+    /**
+     * 建筑功能类型
+     */
+    @TableField(value = "extend_field")
+    @JSONField(name = "extend_field")
+    private String extendField;
+    /**
+     * 操作人id,为人员id或账号id
+     */
+    @TableField(value = "operator_id")
+    @JSONField(name = "operator_id")
+    private String operatorId;
+    /**
+     * 操作人姓名,为人员名称或账号名称
+     */
+    @TableField(value = "operator_name")
+    @JSONField(name = "operator_name")
+    private String operatorName;
+    /**
+     * SOP的名称,目前长度定为100.交互支持50个字符
+     */
+    @TableField(value = "sop_name")
+    @JSONField(name = "sop_name")
+    private String sopName;
+    /**
+     * SOP类型,1-通用,2-项目专用
+     */
+    @TableField(value = "sop_type")
+    @JSONField(name = "sop_type")
+    private String sopType;
+    /**
+     * 是否有无对象的步骤,0-否 1-是.当为引用的SOP时,就算被引用的没有对象也为1
+     */
+    @TableField(value = "no_obj")
+    @JSONField(name = "no_obj")
+    private String noObj;
+    /**
+     * 相关资料,[{"name":"***","url":"***"}]
+     */
+    @TableField(value = "related_data",typeHandler = JsonTypeHandlerFactory.RelatedDataBeanHandler.class)
+    @JSONField(name = "related_data")
+    private List<RelatedDataBean> relatedData;
+    /**
+     * 1-已发布、2-已作废
+     */
+    @TableField(value = "sop_status")
+    @JSONField(name = "sop_status")
+    private String sopStatus;
+    /**
+     * 1-正常、2-待修订、3-修订中
+     */
+    @TableField(value = "publish_status")
+    @JSONField(name = "publish_status")
+    private String publishStatus;
+    /**
+     * 版本号
+     */
+    @TableField(value = "version")
+    @JSONField(name = "version")
+    private String version;
+    /**
+     * 版本数量
+     */
+    @TableField(value = "version_count")
+    @JSONField(name = "version_count")
+    private Integer versionCount;
+    /**
+     * 版本说明,[“描述”,“描述”]
+     */
+    @TableField(value = "version_explain",typeHandler = JacksonTypeHandler.class)
+    @JSONField(name = "version_explain")
+    private List<String> versionExplain;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    @JSONField(name = "create_time")
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    @JSONField(name = "update_time")
+    private String updateTime;
+    /**
+     * 是否有效
+     */
+    @TableField(value = "valid")
+    @JSONField(name = "valid")
+    private Boolean valid;
+
+}

+ 187 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopCell.java

@@ -0,0 +1,187 @@
+package com.persagy.fm.sop.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.entity.IBaseEntity;
+import com.persagy.fm.common.model.entity.ITreeEntity;
+import com.persagy.fm.sop.handler.JsonTypeHandlerFactory;
+import com.persagy.fm.sop.model.dto.AttBean;
+import com.persagy.fm.sop.model.dto.CustomInfoPointsBean;
+import com.persagy.fm.sop.model.dto.InfoPointsBean;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * (sop_cell)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sop_cell")
+public class SopCell extends Model<SopCell> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * SOP_CELL的主键id
+     */
+    @TableId
+    @TableField(value = "sop_cell_id")
+    @JsonProperty("sop_cell_id")
+	private String sopCellId;
+    /**
+     * 父级id,SOP的id或者sop_cell_id
+     */
+    @TableField(value = "parent_id")
+    @JsonProperty("parent_id")
+    private String parentId;
+    /**
+     * true-引用的SOP.是否引用的SOP
+     */
+    @TableField(value = "from_sop")
+    @JsonProperty("from_sop")
+    private Boolean fromSop;
+    /**
+     * 项目id
+     */
+    @TableField(value = "project_id")
+    @JsonProperty("project_id")
+    private String projectId;
+    /**
+     * 所属SOP的id
+     */
+    @TableField(value = "sop_id")
+    @JsonProperty("sop_id")
+    private String sopId;
+    /**
+     * 引用的SOP
+     */
+    @TableField(value = "rel_sop_id")
+    @JsonProperty("rel_sop_id")
+    private String relSopId;
+    /**
+     * 执行前验证  默认为空,1-设备运行继续执行,2-设备停用继续执行,3-设备停机继续执行
+     */
+    @TableField(value = "pre_execute")
+    @JsonProperty("pre_execute")
+    private String preExecute;
+    /**
+     * 强制确认
+     */
+    @TableField(value = "pre_conform")
+    @JsonProperty("pre_conform")
+    private String preConform;
+    /**
+     * 注意事项
+     */
+    @TableField(value = "notice")
+    private String notice;
+    /**
+     * 对象管控需求
+     */
+    @TableField(value = "obj_required_control",typeHandler = JacksonTypeHandler.class)
+    @JsonProperty("obj_required_control")
+    private List<String> objRequiredControl;
+    /**
+     * 对象展示项 working_time-对象运行时间
+     */
+    @TableField(value = "obj_show_item",typeHandler = JacksonTypeHandler.class)
+    @JsonProperty("obj_show_item")
+    private List<String> objShowItem;
+    /**
+     * 工作时长(分钟数)
+     */
+    @TableField(value = "time_limit")
+    @JsonProperty("time_limit")
+    private Integer timeLimit;
+    /**
+     * 标准信息点数组
+     */
+    @TableField(value = "info_points",typeHandler = JsonTypeHandlerFactory.InfoPointsBeanHandler.class)
+    @JsonProperty("info_points")
+    private List<InfoPointsBean> infoPoints;
+    /**
+     * 内容描述
+     */
+    @TableField(value = "description")
+    private String description;
+    /**
+     * 自定义信息点数组
+     */
+    @TableField(value = "customs",typeHandler = JsonTypeHandlerFactory.CustomInfoPointsBeanHandler.class)
+    @JsonProperty("customs")
+    private List<CustomInfoPointsBean> customs;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 是否有效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+    @JsonProperty("pic")
+    @TableField(value = "pic",typeHandler = JacksonTypeHandler.class)
+    private List<String> pic;
+    @JsonProperty("att")
+    @TableField(value = "att",typeHandler = JsonTypeHandlerFactory.AttBeanHandler.class)
+    private List<AttBean> att;
+    @JsonProperty("content_objs")
+    @TableField(exist = false)
+    private List<SopObjRel> contentObjs;
+    @JsonProperty("space_scope")
+    @TableField(exist = false)
+    private List<SopObjRel> spaceScope;
+    @JsonProperty("domain")
+    @TableField(exist = false)
+    private String domain;
+    @JsonProperty("confirm_result")
+    @TableField(exist = false)
+    private List<SopCell> confirmResult;
+    @JsonProperty("step_content")
+    @TableField(exist = false)
+    private List<SopCell> stepContent;
+    @JsonProperty("version")
+    @TableField(exist = false)
+    private String version;
+    @JsonProperty("step_count")
+    @TableField(exist = false)
+    private Integer stepCount;
+    @JsonProperty("stauts_explain")
+    @TableField(exist = false)
+    private String stautsExplain;
+    /**
+     * SOP的名称
+     */
+    @JsonProperty("sop_name")
+    @TableField(exist = false)
+    @JSONField(name = "sop_name")
+    private String sopName;
+    /**
+     * 专业名称
+     */
+    @JsonProperty("domain_name")
+    @TableField(exist = false)
+    private String domainName;
+}

+ 77 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopDestroyMsg.java

@@ -0,0 +1,77 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (sop_destroy_msg)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sop_destroy_msg")
+@Builder
+@AllArgsConstructor
+public class SopDestroyMsg extends Model<SopDestroyMsg> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+	private String msgId;
+    /**
+     * 项目id
+     */
+    private String projectId;
+    /**
+     * SOP的主键id
+     */
+    private String sopId;
+    /**
+     * 被引用的sop主键id
+     */
+    private String refSopId;
+    /**
+     * 被引用的sop名称
+     */
+    private String refSopName;
+    /**
+     * 被引用的sop状态描述
+     */
+    private String refSopStatus;
+    /**
+     * 状态,1-未处理、2-已处理
+     */
+    private String status;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 64 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopDomainRel.java

@@ -0,0 +1,64 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (sop_domain_rel)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+// @NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sop_domain_rel")
+@Builder
+@EqualsAndHashCode(callSuper = false)
+public class SopDomainRel extends Model<SopDomainRel> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+    @TableField(value = "sop_domain_rel_id")
+	private String sopDomainRelId;
+    /**
+     * 父级id,SOP的id或者sop_cell_id
+     */
+    @TableField(value = "parent_id")
+    private String parentId;
+    /**
+     * 专业code
+     */
+    @TableField(value = "domain")
+    private String domain;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 是否有效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 198 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopEdit.java

@@ -0,0 +1,198 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.persagy.fm.sop.handler.JsonTypeHandlerFactory;
+import com.persagy.fm.sop.handler.ListTypeHandler;
+import com.persagy.fm.sop.model.dto.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName(value = "sop_edit",autoResultMap = true)
+public class SopEdit extends Model<SopEdit> {
+
+    private static final long serialVersionUID = 1L;
+    /**有效状态*/
+    public static final String VALID = "valid";
+    /**SOP的名称*/
+    public static final String SOP_NAME = "sop_name";
+    /**SOP的状态*/
+    public static final String SOP_STATUS = "sop_status";
+    /**SOP的更新时间*/
+    public static final String UPDATE_TIME = "update_time";
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "sop_edit_id", type = IdType.ASSIGN_ID)
+    private String sopEditId;
+
+    /**
+     * SOP的主键id
+     */
+    @TableField("sop_id")
+    private String sopId;
+
+    /**
+     * 项目id,集团SOP的值为group_sop_id
+     */
+    @TableField("project_id")
+    private String projectId;
+
+    /**
+     * 建筑功能类型
+     */
+    @TableField("extend_field")
+    private String extendField;
+
+    /**
+     * 操作人信息
+     */
+    @TableField(value = "operator",typeHandler = JacksonTypeHandler.class)
+    private OperatorBean operator;
+
+    /**
+     * SOP的名称,目前长度定为100.交互支持50个字符
+     */
+    @TableField("sop_name")
+    private String sopName;
+
+    /**
+     * SOP类型,1-通用,2-项目专用
+     */
+    @TableField("sop_type")
+    private String sopType;
+
+    /**
+     * 是否有无对象的步骤,0-否 1-是.当为引用的SOP时,就算被引用的没有对象也为1
+     */
+    @TableField("no_obj")
+    private String noObj;
+
+    /**
+     * 专业编码,[code,code]
+     */
+    @TableField(value = "domains",typeHandler = JacksonTypeHandler.class)
+    private List<String> domains;
+
+    /**
+     * 工具数组,[{"tool":“……”,"from_step":true}]
+     */
+    @TableField(value = "tools",typeHandler = JsonTypeHandlerFactory.ToolsBeanHandler.class)
+    private List<ToolsBean> tools;
+
+    /**
+     * 关联的工单类型,数组[code,code]
+     */
+    @TableField(value = "order_type",typeHandler = JacksonTypeHandler.class)
+    private List<String> orderType;
+
+    /**
+     * 适用对象
+     */
+    @TableField(value = "fit_objs",typeHandler = JsonTypeHandlerFactory.FitObjsBeanHandler.class)
+    private List<FitObjsBean> fitObjs;
+
+    /**
+     * 设备型号
+     */
+    @TableField(value = "equip_model_ids",typeHandler = JacksonTypeHandler.class)
+    private List<String> equipModelIds;
+
+    /**
+     * 自定义标签
+     */
+    @TableField(value = "labels",typeHandler = JacksonTypeHandler.class)
+    private List<String> labels;
+
+    /**
+     * 步骤
+     */
+    @TableField(value = "steps",typeHandler = JsonTypeHandlerFactory.SopStepsBeanHandler.class)
+    private List<SopStepsBean> steps;
+
+    /**
+     * 相关资料,[{"name":"***",“url”:“***”},{}]
+     */
+    @TableField(value = "related_data",typeHandler = JsonTypeHandlerFactory.RelatedDataBeanHandler.class)
+    private List<RelatedDataBean> relatedData;
+
+    /**
+     * 1-已发布、2-已作废
+     */
+    @TableField("sop_status")
+    private String sopStatus;
+
+    /**
+     * 1-正常、2-待修订、3-修订中
+     */
+    @TableField("publish_status")
+    private String publishStatus;
+
+    /**
+     * 引用的sop
+     */
+    @TableField(value = "ref_sop_ids",typeHandler = JacksonTypeHandler.class)
+    private List<String> refSopIds;
+
+    /**
+     * 版本号
+     */
+    @TableField("version")
+    private String version;
+
+    /**
+     * 版本数量
+     */
+    @TableField("version_count")
+    private Integer versionCount;
+
+    /**
+     * 版本说明,[“描述”,“描述”]
+     */
+    @TableField(value = "version_explain",typeHandler = JacksonTypeHandler.class)
+    private List<String> versionExplain;
+
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+
+    /**
+     * 是否有效
+     */
+    @TableField("valid")
+    private Integer valid;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.sopEditId;
+    }
+
+}

+ 78 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopEquipModelRel.java

@@ -0,0 +1,78 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sop_equip_model_rel")
+@Builder
+public class SopEquipModelRel extends Model<SopEquipModelRel> {
+
+    private static final long serialVersionUID = 1L;
+    /**SOP的id*/
+    public static final String SOP_ID="sop_id";
+    /**设备模型的id*/
+    public static final String EQUIP_MODEL_ID="equip_model_id";
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "sop_equip_model_id", type = IdType.ASSIGN_ID)
+    private String sopEquipModelId;
+
+    /**
+     * SOP的主键id
+     */
+    @TableField("sop_id")
+    private String sopId;
+
+    /**
+     * 设备型号id
+     */
+    @TableField("equip_model_id")
+    private String equipModelId;
+
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+
+    /**
+     * 是否有效
+     */
+    @TableField("valid")
+    private Boolean valid;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.sopEquipModelId;
+    }
+
+}

+ 198 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopHis.java

@@ -0,0 +1,198 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.persagy.fm.sop.handler.JsonTypeHandlerFactory;
+import com.persagy.fm.sop.model.dto.*;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sop_his")
+@Builder
+public class SopHis extends Model<SopHis> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "sop_his_id", type = IdType.ASSIGN_ID)
+    private String sopHisId;
+
+    /**
+     * SOP的主键id
+     */
+    @TableField("sop_id")
+    private String sopId;
+
+    /**
+     * 项目id,集团SOP的值为group_sop_id
+     */
+    @TableField("project_id")
+    private String projectId;
+
+    /**
+     * 建筑功能类型
+     */
+    @TableField("extend_field")
+    private String extendField;
+
+    /**
+     * 操作人信息
+     */
+    @TableField(value = "operator",typeHandler = JacksonTypeHandler.class)
+    private OperatorBean operator;
+
+    /**
+     * SOP的名称,目前长度定为100.交互支持50个字符
+     */
+    @TableField("sop_name")
+    private String sopName;
+
+    /**
+     * SOP类型,1-通用,2-项目专用
+     */
+    @TableField("sop_type")
+    private String sopType;
+
+    /**
+     * 是否有无对象的步骤,0-否 1-是.当为引用的SOP时,就算被引用的没有对象也为1
+     */
+    @TableField("no_obj")
+    private String noObj;
+
+    /**
+     * 专业编码,[code,code]
+     */
+    @TableField(value = "domains",typeHandler = JacksonTypeHandler.class)
+    private List<String> domains;
+
+    /**
+     * 工具数组,[{"tool":“……”,"from_step":true}]
+     */
+    @TableField(value = "tools",typeHandler = JsonTypeHandlerFactory.ToolsBeanHandler.class)
+    private List<ToolsBean> tools;
+
+    /**
+     * 关联的工单类型,数组[code,code]
+     */
+    @TableField(value = "order_type",typeHandler = JacksonTypeHandler.class)
+    private List<String> orderType;
+
+    /**
+     * 适用对象
+     */
+    @TableField(value = "fit_objs",typeHandler = JsonTypeHandlerFactory.FitObjsBeanHandler.class)
+    private List<FitObjsBean> fitObjs;
+
+    /**
+     * 设备型号
+     */
+    @TableField(value = "equip_model_ids",typeHandler = JacksonTypeHandler.class)
+    private List<String> equipModelIds;
+
+    /**
+     * 自定义标签
+     */
+    @TableField(value = "labels",typeHandler = JacksonTypeHandler.class)
+    private List<String> labels;
+
+    /**
+     * 步骤
+     */
+    @TableField(value = "steps",typeHandler = JsonTypeHandlerFactory.SopStepsBeanHandler.class)
+    private List<SopStepsBean> steps;
+
+    /**
+     * 相关资料,[{"name":"***",“url”:“***”},{}]
+     */
+    @TableField(value = "related_data",typeHandler = JsonTypeHandlerFactory.RelatedDataBeanHandler.class)
+    private List<RelatedDataBean> relatedData;
+
+    /**
+     * 1-已发布、2-已作废
+     */
+    @TableField("sop_status")
+    private String sopStatus;
+
+    /**
+     * 1-正常、2-待修订、3-修订中
+     */
+    @TableField("publish_status")
+    private String publishStatus;
+
+    /**
+     * 引用的sop
+     */
+    @TableField(value = "ref_sop_ids",typeHandler = JacksonTypeHandler.class)
+    private List<String> refSopIds;
+
+    /**
+     * 引用的sop数组
+     */
+    @TableField(value = "refed_sops",typeHandler = JsonTypeHandlerFactory.RefedSopBeanHandler.class)
+    private List<RefedSopBean> refedSops;
+
+    /**
+     * 版本号
+     */
+    @TableField("version")
+    @Version
+    private String version;
+
+    /**
+     * 版本数量
+     */
+    @TableField("version_count")
+    private Integer versionCount;
+
+    /**
+     * 版本说明,[“描述”,“描述”]
+     */
+    @TableField(value = "version_explain", typeHandler = JacksonTypeHandler.class)
+    private List<String> versionExplain;
+
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+
+    /**
+     * 是否有效
+     */
+    @TableField("valid")
+    private Integer valid;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.sopHisId;
+    }
+
+}

+ 76 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopLabelRel.java

@@ -0,0 +1,76 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sop_label_rel")
+@Builder
+public class SopLabelRel extends Model<SopLabelRel> {
+
+    private static final long serialVersionUID = 1L;
+    /**Sop的唯一标识id*/
+    public static final String SOP_ID = "sop_id";
+    /**标签名称*/
+    public static final String LABEL = "label";
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "sop_label_id", type = IdType.ASSIGN_ID)
+    private String sopLabelId;
+
+    /**
+     * sop的主键id
+     */
+    @TableField("sop_id")
+    private String sopId;
+
+    /**
+     * 标签名称
+     */
+    @TableField("label")
+    private String label;
+
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+
+    /**
+     * 是否有效
+     */
+    @TableField("valid")
+    private Boolean valid;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.sopLabelId;
+    }
+
+}

+ 74 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopMediaRel.java

@@ -0,0 +1,74 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (sop_media_rel)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+// @NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sop_media_rel")
+@Builder
+@EqualsAndHashCode(callSuper = false)
+public class SopMediaRel extends Model<SopMediaRel> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+    @TableField("sop_media_rel_id")
+	private String sopMediaRelId;
+    /**
+     * 父级id,SOP的id或者sop_cell_id
+     */
+    @TableField("parent_id")
+    private String parentId;
+    /**
+     * 存储到图片服务器的key
+     */
+    @TableField("key")
+    private String key;
+    /**
+     * 附件名称,图片名称等
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * pic-图片,att-附件
+     */
+    @TableField("type")
+    private String type;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 130 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopObjRel.java

@@ -0,0 +1,130 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.sop.handler.JsonTypeHandlerFactory;
+import com.persagy.fm.sop.model.dto.ParentsBean;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * (sop_obj_rel)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sop_obj_rel")
+@Builder
+@AllArgsConstructor
+public class SopObjRel extends Model<SopObjRel> implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**父级id*/
+    public static final String PARENT_ID="parent_id";
+    /**对象来源*/
+    public static final String OBJ_OWNER="obj_owner";
+
+    /**
+     * 主键id
+     */
+    @TableId
+    @TableField("sop_obj_id")
+    @JsonProperty("sop_obj_id")
+	private String sopObjId;
+    /**
+     * SOP的id或sop的内容id
+     */
+    @TableField("parent_id")
+    @JsonProperty("parent_id")
+    private String parentId;
+    /**
+     * SOP的id
+     */
+    @TableField("sop_id")
+    @JsonProperty("sop_id")
+    private String sopId;
+    /**
+     * 对象id
+     */
+    @TableField("obj_id")
+    @JsonProperty("obj_id")
+    private String objId;
+    /**
+     * 对象类型
+     */
+    @TableField("obj_type")
+    @JsonProperty("obj_type")
+    private String objType;
+    /**
+     * 对象名称
+     */
+    @TableField("obj_name")
+    @JsonProperty("obj_name")
+    private String objName;
+    /**
+     * 对象code
+     */
+    @TableField("obj_code")
+    @JsonProperty("obj_code")
+    private String objCode;
+    /**
+     * 对象所属类ID(用于空间系统设备对象,前端筛选同一类型对象使用)
+     */
+    @TableField("type_code")
+    @JsonProperty("type_code")
+    private String typeCode;
+    /**
+     * true-需修订,false-不需修订
+     */
+    @TableField("is_revise")
+    @JsonProperty("is_revise")
+    private Boolean isRevise;
+    /**
+     * 父类对象
+     */
+    @TableField(value = "parents",typeHandler = JsonTypeHandlerFactory.ParentsBeanHandler.class)
+    private List<ParentsBean> parents;
+    /**
+     * content_obj-步骤中操作对象
+     */
+    @TableField("obj_source")
+    @JsonProperty("obj_source")
+    private String objSource;
+    /**
+     * content_obj-步骤中的操作对象,space_scope-空间范围,fit_obj-适用范围
+     */
+    @TableField("obj_owner")
+    @JsonProperty("obj_owner")
+    private String objOwner;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    @JsonProperty("create_time")
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonProperty("update_time")
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 82 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopOrderTypeRel.java

@@ -0,0 +1,82 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("sop_order_type_rel")
+@Builder
+public class SopOrderTypeRel extends Model<SopOrderTypeRel> {
+
+    private static final long serialVersionUID = 1L;
+    /**SOP的唯一标识id*/
+    public static final String SOP_ID="sop_id";
+    /**order_type*/
+    public static final String ORDER_TYPE="order_type";
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "sop_order_type_id", type = IdType.ASSIGN_ID)
+    private String sopOrderTypeId;
+
+    /**
+     * SOP的主键id
+     */
+    @TableField("sop_id")
+    private String sopId;
+
+    /**
+     * 项目id
+     */
+    @TableField("project_id")
+    private String projectId;
+
+    /**
+     * 工单类型id
+     */
+    @TableField("order_type")
+    private String orderType;
+
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+
+    /**
+     * 是否有效
+     */
+    @TableField("valid")
+    private Boolean valid;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.sopOrderTypeId;
+    }
+
+}

+ 77 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopReviseMsg.java

@@ -0,0 +1,77 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (sop_revise_msg)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+@Accessors(chain = true)
+@TableName("sop_revise_msg")
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SopReviseMsg extends Model<SopReviseMsg> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+	private String msgId;
+    /**
+     * SOP的主键id
+     */
+    private String sopId;
+    /**
+     * 作废对象id
+     */
+    private String objId;
+    /**
+     * 作废对象名称
+     */
+    private String objName;
+    /**
+     * 作废对象类型,1-对象模型、2-对象实例、3-信息点
+     */
+    private String objType;
+    /**
+     * 消息内容
+     */
+    private String content;
+    /**
+     * 状态,1-未处理、2-已忽略、3-已自动处理
+     */
+    private String status;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField(value = "valid")
+    private Boolean valid;
+
+}

+ 68 - 0
fm-sop/src/main/java/com/persagy/fm/sop/entity/SopToolRel.java

@@ -0,0 +1,68 @@
+package com.persagy.fm.sop.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * (sop_tool_rel)实体类
+ *
+ * @author lijie
+ * @since 2021-03-31 18:08:21
+ * @description 由 Mybatisplus Code Generator 创建
+ */
+@Data
+// @NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sop_tool_rel")
+@Builder
+//@KeySequence("mybatisKeyGenerator")
+@EqualsAndHashCode(callSuper = false)
+public class SopToolRel extends Model<SopToolRel> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId
+    @TableField("sop_tool_rel_id")
+	private String sopToolRelId;
+    /**
+     * 父级id,SOP的id或者sop_cell_id
+     */
+    @TableField("parent_id")
+    private String parentId;
+    /**
+     * 工具名称
+     */
+    @TableField("tool")
+    private String tool;
+    /**
+     * 1-是步骤中的工具,0或空-不是步骤中的工具
+     */
+    @TableField("from_step")
+    private Boolean fromStep;
+    /**
+     * 创建时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private String createTime;
+    /**
+     * 更新时间,格式为yyyyMMddHHmmss
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+    /**
+     * 1-有效 0-无效
+     */
+    @TableField("valid")
+    private Boolean valid;
+
+}

+ 39 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/AttTypeEnum.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.sop.enums;
+
+import lombok.Data;
+
+/***
+ * Description: 附件类型
+ * @author : lijie
+ * @date :2021/4/1 22:13
+ * Update By lijie 2021/4/1 22:13
+ */
+public enum AttTypeEnum {
+
+    ATT("att","附件"),
+    PIC("pic","图片");
+
+    AttTypeEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 57 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/IdPrefixEnum.java

@@ -0,0 +1,57 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: 表ID的前缀枚举类
+ * @author : lijie
+ * @date :2021/4/1 22:17
+ * Update By lijie 2021/4/1 22:17
+ */
+public enum IdPrefixEnum {
+    /**sop表ID的前缀*/
+    SOP("SOP","sop表ID的前缀"),
+    /**sop_cell表ID的前缀*/
+    SOP_CELL("SOPSC","sop_cell表ID的前缀"),
+    /**sop_domain_rel表ID的前缀*/
+    SOP_DOMAIN_REL("SDRI","sop_domain_rel表ID的前缀"),
+    /**sop_tool_rel表ID的前缀*/
+    SOP_TOOL_REL("STRI","sop_tool_rel表ID的前缀"),
+    /**sop_media_rel表ID的前缀*/
+    SOP_MEDIA_REL("SMRI","sop_media_rel表ID的前缀"),
+    /**sop_obj_rel表ID的前缀*/
+    SOP_OBJ_REL("SOR","sop_obj_rel表ID的前缀"),
+    /**sop_equip_model_rel表id的前缀*/
+    SOP_EQUIP_MODEL_REL("SEMR","sop_equip_model_rel表ID的前缀"),
+    /**sop_order_type_rel表id的前缀*/
+    SOP_ORDER_TYPE_REL("SOTR","sop_order_type_rel表ID的前缀"),
+    /**sop_label_rel表id的前缀*/
+    SOP_LABEL_REL("SLR","sop_label_rel表ID的前缀"),
+    /**sop_edit表id的前缀*/
+    SOP_EDIT("SE","sop_edit表ID的前缀"),
+    /**sop_his表id的前缀*/
+    SOP_HIS("SH","sop_his表ID的前缀"),
+    /**sop_destroy_msg表id的前缀*/
+    SOP_DESTROY_MSG("SDM","sop_destroy_msg表ID的前缀");
+
+    IdPrefixEnum(String prefix, String describe) {
+        this.prefix = prefix;
+        this.describe = describe;
+    }
+
+    private String prefix;
+    private String describe;
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 38 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/MsgStatusEnum.java

@@ -0,0 +1,38 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: 对象变化消息类型
+ * @author : lijie
+ * @date :2021/4/2 15:10
+ * Update By lijie 2021/4/2 15:10
+ */
+public enum MsgStatusEnum {
+    /**未处理*/
+    UNTREATED("1","未处理"),
+    /**已处理*/
+    HANDLED("2","已处理/已忽略"),
+    AUTO_HANDLED("3","已自动处理");
+
+    MsgStatusEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 37 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/MsgTypeEnum.java

@@ -0,0 +1,37 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: 对象变化消息类型
+ * @author : lijie
+ * @date :2021/4/2 15:10
+ * Update By lijie 2021/4/2 15:10
+ */
+public enum MsgTypeEnum {
+    /**删除对象*/
+    TWO("2","删除对象"),
+    /**更改信息点值*/
+    SEVEN("7","更改信息点值");
+
+    MsgTypeEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 39 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/ObjOwnerEnum.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: 步骤中操作对象类型
+ * @author : lijie
+ * @date :2021/4/2 9:54
+ * Update By lijie 2021/4/2 9:54
+ */
+public enum ObjOwnerEnum {
+    /**content_obj-步骤中的操作对象*/
+    CONTENT_OBJ("content_obj","步骤中的操作对象"),
+    /**空间范围*/
+    SPACE_SCOPE("space_scope","空间范围"),
+    /**适用范围*/
+    FIT_OBJ("fit_obj","适用范围");
+
+    ObjOwnerEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 49 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/ObjTypeEnum.java

@@ -0,0 +1,49 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: 步骤中操作对象类型
+ * @author : lijie
+ * @date :2021/4/2 9:54
+ * Update By lijie 2021/4/2 9:54
+ */
+public enum ObjTypeEnum {
+    /**建筑*/
+    BUILD("build","建筑"),
+    /**楼层*/
+    FLOOR("floor","楼层"),
+    /**空间*/
+    SPACE("space","空间"),
+    /**系统*/
+    SYSTEM("system","系统"),
+    /**竖井*/
+    SHAFT("shaft","竖井"),
+    /**设备*/
+    EQUIP("equip","设备"),
+    /**设备类*/
+    EQUIP_CLASS("equip_class","设备类"),
+    /**系统类*/
+    SYSTEM_CLASS("system_class","系统类");
+
+    ObjTypeEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 45 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/ResultEnum.java

@@ -0,0 +1,45 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: 结果枚举
+ * @author : lijie
+ * @date :2021/4/2 18:19
+ * Update By lijie 2021/4/2 18:19
+ */
+public enum ResultEnum {
+    /**Result*/
+    RESULT("Result","结果key"),
+    /**success-成功*/
+    SUCCESS("success","成功"),
+    /**failure-失败*/
+    FAILURE("failure","失败"),
+    /**ResultMsg-错误消息*/
+    RESULT_MSG("ResultMsg","错误消息"),
+    /**内容数组*/
+    CONTENT("Content","内容数组"),
+    /**总数*/
+    COUNT("Count","总数");
+
+    ResultEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 39 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/SopPublishStatusEnum.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: SOP状态枚举
+ * @author : lijie
+ * @date :2021/4/2 15:10
+ * Update By lijie 2021/4/2 15:10
+ */
+public enum SopPublishStatusEnum {
+    /**正常*/
+    NORMAL("1","正常"),
+    /**待修订*/
+    REVISE("2","待修订"),
+    /**修订中*/
+    REVISEING("3","编辑中");
+
+    SopPublishStatusEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 39 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/SopSignCodeEnum.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: SOP状态枚举
+ * @author : lijie
+ * @date :2021/4/2 15:10
+ * Update By lijie 2021/4/2 15:10
+ */
+public enum SopSignCodeEnum {
+    /**公用*/
+    PUBLIC("public","公用"),
+    /**修订*/
+    REVISE("revise","修订"),
+    /**修订中*/
+    REVISING("revising","修订中");
+
+    SopSignCodeEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 39 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/SopStatusEnum.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: SOP状态枚举
+ * @author : lijie
+ * @date :2021/4/2 15:10
+ * Update By lijie 2021/4/2 15:10
+ */
+public enum SopStatusEnum {
+    /**草稿*/
+    DRAFT("0","草稿"),
+    /**已发布*/
+    PUBLISHED("1","已发布"),
+    /**已作废*/
+    INVALID("2","已作废");
+
+    SopStatusEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 37 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/SopTypeEnum.java

@@ -0,0 +1,37 @@
+package com.persagy.fm.sop.enums;
+/***
+ * Description: SOP状态枚举
+ * @author : lijie
+ * @date :2021/4/2 15:10
+ * Update By lijie 2021/4/2 15:10
+ */
+public enum SopTypeEnum {
+    /**SOP类型-1-集团(通用)*/
+    GROUP("1","SOP类型-1-集团(通用)"),
+    /**SOP状态-2-项目专用*/
+    PROJECT("2","SOP状态-2-项目专用");
+
+    SopTypeEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 88 - 0
fm-sop/src/main/java/com/persagy/fm/sop/filters/LoginFilter.java

@@ -0,0 +1,88 @@
+package com.persagy.fm.sop.filters;
+
+import com.persagy.fm.sop.service.BaseService;
+import org.apache.log4j.Logger;
+import org.springframework.core.annotation.Order;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+
+
+@WebFilter
+@Order(-1)
+public class LoginFilter implements Filter {
+	private static final Logger log = Logger.getLogger(LoginFilter.class);
+	
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		log.info("init loginFilter....");
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+			throws IOException, ServletException {
+		if (request instanceof HttpServletRequest
+                && response instanceof HttpServletResponse) {
+            doFilter((HttpServletRequest) request, (HttpServletResponse) response, chain);
+        } else {
+            chain.doFilter(request, response);
+        }
+	}
+	
+
+	@Override
+	public void destroy() {
+		log.info("destroy loginFilter....");
+	}
+
+	private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
+			throws IOException, ServletException {
+		
+		try {
+			String url = request.getRequestURL().toString();
+			// 获取请求路径与参数,并输出到日志中
+			RequestWrapper requestWrapper = new RequestWrapper(request);
+			ServletInputStream inputStream = requestWrapper.getInputStream();
+			byte[] bytes = input2byte(inputStream);
+			String params = this.inputStreamToString(new ByteArrayInputStream(bytes != null ? bytes : new byte[0]));
+			log.info("前端请求:" + url + "--" + params);
+			//处理验证接口
+			chain.doFilter(requestWrapper, response);
+		} catch (Exception e) {
+			String exMsg = e.toString() + "--" + Arrays.toString(e.getStackTrace());
+			log.error(exMsg);
+			response.setStatus(401);
+			response.getWriter().write(exMsg);
+		}
+	}
+
+	public String inputStreamToString(InputStream in) throws IOException {
+		StringBuffer out = new StringBuffer();
+		byte[] b = new byte[4096];
+		for (int n; (n = in.read(b)) != -1;) {
+			out.append(new String(b, 0, n, "UTF-8"));
+		}
+		return out.toString();
+	}
+
+	public static final byte[] input2byte(InputStream inStream) throws IOException {
+		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
+		byte[] buff = new byte[100];
+		int rc = 0;
+		while ((rc = inStream.read(buff, 0, 100)) > 0) {
+			swapStream.write(buff, 0, rc);
+		}
+		byte[] in2b = swapStream.toByteArray();
+		return in2b;
+	}
+	
+
+
+}

+ 93 - 0
fm-sop/src/main/java/com/persagy/fm/sop/filters/RequestWrapper.java

@@ -0,0 +1,93 @@
+package com.persagy.fm.sop.filters;
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+
+/**
+ * 引自网络
+ * <p> RequestWrapper.java.</p>
+ * <p>Description:  .</p>
+ * <p>Company: .</p>
+ * <p>@author gezhanbin</p>
+ * <p>@version .</p>
+ * 2019年6月3日: 上午11:18:42
+ */
+public class RequestWrapper extends HttpServletRequestWrapper {
+    private final String body;
+
+    public RequestWrapper(HttpServletRequest request) {
+        super(request);
+        StringBuilder stringBuilder = new StringBuilder();
+        BufferedReader bufferedReader = null;
+        InputStream inputStream = null;
+        try {
+            inputStream = request.getInputStream();
+            if (inputStream != null) {
+                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+                char[] charBuffer = new char[128];
+                int bytesRead = -1;
+                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
+                    stringBuilder.append(charBuffer, 0, bytesRead);
+                }
+            } else {
+                stringBuilder.append("");
+            }
+        } catch (IOException ex) {
+
+        } finally {
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                }
+                catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (bufferedReader != null) {
+                try {
+                    bufferedReader.close();
+                }
+                catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        body = stringBuilder.toString();
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
+        ServletInputStream servletInputStream = new ServletInputStream() {
+            @Override
+            public boolean isFinished() {
+                return false;
+            }
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+            @Override
+            public void setReadListener(ReadListener readListener) {
+            }
+            @Override
+            public int read() throws IOException {
+                return byteArrayInputStream.read();
+            }
+        };
+        return servletInputStream;
+
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException {
+        return new BufferedReader(new InputStreamReader(this.getInputStream()));
+    }
+
+    public String getBody() {
+        return this.body;
+    }
+
+}

+ 13 - 0
fm-sop/src/main/java/com/persagy/fm/sop/filters/SpecialValueFilter.java

@@ -0,0 +1,13 @@
+package com.persagy.fm.sop.filters;
+
+import com.persagy.fm.sop.constant.SopQueryConst;
+
+public class SpecialValueFilter {
+    @Override
+    public boolean equals(Object obj) {
+        if (null!=obj && SopQueryConst.SPECIAL_ROD.equals(obj.toString())){
+            return false;
+        }
+        return super.equals(obj);
+    }
+}

+ 109 - 0
fm-sop/src/main/java/com/persagy/fm/sop/filters/SuberJacksonFilterProvider.java

@@ -0,0 +1,109 @@
+package com.persagy.fm.sop.filters;
+
+import com.fasterxml.jackson.annotation.JsonFilter;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.BeanPropertyFilter;
+import com.fasterxml.jackson.databind.ser.FilterProvider;
+import com.fasterxml.jackson.databind.ser.PropertyFilter;
+import com.fasterxml.jackson.databind.ser.PropertyWriter;
+import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
+
+import java.util.*;
+
+/**
+ * 自定义JSON序列化过滤器
+ *
+ * @author zhufeihong
+ * @since 2021/1/4 16:30
+ */
+@JsonFilter("JacksonJsonFilter")
+public class SuberJacksonFilterProvider extends FilterProvider {
+
+    /**
+     * 包含字段 Map
+     */
+    Map<Class<?>, Set<String>> includeMap = new HashMap<>();
+
+    /**
+     * 排除字段 Map
+     */
+    Map<Class<?>, Set<String>> excludeMap = new HashMap<>();
+
+    /**
+     * 添加包含字段
+     *
+     * @param type   字段所属类
+     * @param fields 字段名数组
+     * @since 2021/1/4 17:03
+     */
+    public void include(Class<?> type, String... fields) {
+        addToMap(includeMap, type, fields);
+    }
+
+    /**
+     * 添加排除字段
+     *
+     * @param type   字段所属类
+     * @param fields 字段名数组
+     * @since 2021/1/4 17:03
+     */
+    public void exclude(Class<?> type, String... fields) {
+        addToMap(excludeMap, type, fields);
+    }
+
+    /**
+     * 实际执行添加包含/排除字段进对应Map的方法
+     *
+     * @param map    包含字段Map OR 排除字段Map
+     * @param type   字段所属类
+     * @param fields 字段名称数组
+     * @since 2021/1/4 17:04
+     */
+    private void addToMap(Map<Class<?>, Set<String>> map, Class<?> type, String... fields) {
+        Set<String> fieldSet = map.getOrDefault(type, new HashSet<>());
+        fieldSet.addAll(Arrays.asList(fields));
+        map.put(type, fieldSet);
+    }
+
+    @Deprecated
+    @Override
+    public BeanPropertyFilter findFilter(Object filterId) {
+        throw new UnsupportedOperationException("Access to deprecated filters not supported");
+    }
+
+    @Override
+    public PropertyFilter findPropertyFilter(Object filterId, Object valueToFilter) {
+        return new SimpleBeanPropertyFilter() {
+            @Override
+            public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider prov, PropertyWriter writer)
+                    throws Exception {
+                if (apply(pojo.getClass(), writer.getName())) {
+                    writer.serializeAsField(pojo, jgen, prov);
+                } else if (!jgen.canOmitFields()) {
+                    writer.serializeAsOmittedField(pojo, jgen, prov);
+                }
+            }
+        };
+    }
+
+    /**
+     * 判断是否序列化当前字段,在includeMap或不在excludeMap中的字段进行序列化
+     *
+     * @param type 字段所属类
+     * @param name 字段名称
+     * @return boolean 是否序列化
+     * @since 2021/1/4 17:09
+     */
+    public boolean apply(Class<?> type, String name) {
+        Set<String> includeFields = includeMap.get(type);
+        Set<String> excludeFields = excludeMap.get(type);
+        if (includeFields != null && includeFields.contains(name)) {
+            return true;
+        } else if (excludeFields != null && !excludeFields.contains(name)) {
+            return true;
+        } else {
+            return includeFields == null && excludeFields == null;
+        }
+    }
+}

+ 41 - 0
fm-sop/src/main/java/com/persagy/fm/sop/handler/DbJsonTypeHandler.java

@@ -0,0 +1,41 @@
+package com.persagy.fm.sop.handler;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+import org.springframework.util.Assert;
+
+@Slf4j
+@MappedTypes({ Object.class })
+@MappedJdbcTypes(JdbcType.VARCHAR)
+public class DbJsonTypeHandler extends AbstractJsonTypeHandler<Object> {
+
+    private final Class<?> clazz;
+
+    public DbJsonTypeHandler(Class<?> type, Class<?> innerType) {
+        if (log.isTraceEnabled()) {
+            log.trace("JacksonTypeHandler(" + type + ")");
+        }
+        Assert.notNull(type, "Type argument cannot be null");
+
+        this.clazz = innerType;
+    }
+
+    @Override
+    protected Object parse(String json) {
+        if (JSONUtil.isJsonArray(json)) {
+            return JSONUtil.toList(JSONUtil.parseArray(json), this.clazz);
+        } else {
+            return JSONUtil.toBean(json, this.clazz);
+        }
+    }
+
+    @Override
+    protected String toJson(Object obj) {
+        return JSONUtil.toJsonStr(obj);
+    }
+
+}

+ 53 - 0
fm-sop/src/main/java/com/persagy/fm/sop/handler/JsonReturnFilterHandler.java

@@ -0,0 +1,53 @@
+package com.persagy.fm.sop.handler;
+import com.google.common.collect.ObjectArrays;
+import com.persagy.fm.sop.annotations.JsonFieldFilter;
+import com.persagy.fm.sop.annotations.JsonFieldFilters;
+import com.persagy.fm.sop.serializers.ResponseJsonFilterSerializer;
+import org.springframework.core.MethodParameter;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.http.MediaType;
+import org.springframework.lang.Nullable;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
+import org.springframework.web.method.support.ModelAndViewContainer;
+
+import javax.servlet.http.HttpServletResponse;
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.Objects;
+
+public class JsonReturnFilterHandler implements HandlerMethodReturnValueHandler {
+    @Override
+    public boolean supportsReturnType(MethodParameter returnType) {
+        // 如果有自定义的 @JsonFieldFilter 注解 就用我们这个Handler 来处理
+        return AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), JsonFieldFilters.class)
+                || returnType.hasMethodAnnotation(JsonFieldFilters.class)
+                || AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), JsonFieldFilter.class)
+                || returnType.hasMethodAnnotation(JsonFieldFilter.class);
+    }
+
+    @Override
+    public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType,
+                                  ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
+        // 设置这个就是最终的处理类了,处理完不再去找下一个类进行处理
+        mavContainer.setRequestHandled(true);
+
+        // 获得注解并执行filter方法 最后返回
+        HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
+        Annotation[] annotations = returnType.getMethodAnnotations();
+        ResponseJsonFilterSerializer jsonFilterSerializer = new ResponseJsonFilterSerializer();
+        Arrays.asList(annotations).forEach(a -> {
+            if (a instanceof JsonFieldFilter) {
+                JsonFieldFilter json = (JsonFieldFilter) a;
+                jsonFilterSerializer.filter(json.type(), json.include(),
+                        ObjectArrays.concat(json.exclude(), json.addExclude(), String.class));
+            } else if (a instanceof JsonFieldFilters) {
+                jsonFilterSerializer.filter((JsonFieldFilters) a);
+            }
+        });
+
+        Objects.requireNonNull(response).setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
+        String json = jsonFilterSerializer.toJson(returnValue);
+        response.getWriter().write(json);
+    }
+}

+ 52 - 0
fm-sop/src/main/java/com/persagy/fm/sop/handler/JsonTypeHandlerFactory.java

@@ -0,0 +1,52 @@
+package com.persagy.fm.sop.handler;
+
+import com.persagy.fm.sop.entity.CustomInfoPoint;
+import com.persagy.fm.sop.model.dto.*;
+
+public class JsonTypeHandlerFactory {
+    public static class ToolsBeanHandler extends DbJsonTypeHandler {
+        public ToolsBeanHandler(Class<?> type) {
+            super(type, ToolsBean.class);
+        }
+    }
+    public static class FitObjsBeanHandler extends DbJsonTypeHandler {
+        public FitObjsBeanHandler(Class<?> type) {
+            super(type, FitObjsBean.class);
+        }
+    }
+    public static class InfoPointsBeanHandler extends DbJsonTypeHandler {
+        public InfoPointsBeanHandler(Class<?> type) {
+            super(type, InfoPointsBean.class);
+        }
+    }
+    public static class CustomInfoPointsBeanHandler extends DbJsonTypeHandler {
+        public CustomInfoPointsBeanHandler(Class<?> type) {
+            super(type, CustomInfoPointsBean.class);
+        }
+    }
+    public static class SopStepsBeanHandler extends DbJsonTypeHandler {
+        public SopStepsBeanHandler(Class<?> type) {
+            super(type, SopStepsBean.class);
+        }
+    }
+    public static class RelatedDataBeanHandler extends DbJsonTypeHandler {
+        public RelatedDataBeanHandler(Class<?> type) {
+            super(type, RelatedDataBean.class);
+        }
+    }
+    public static class ParentsBeanHandler extends DbJsonTypeHandler {
+        public ParentsBeanHandler(Class<?> type) {
+            super(type, ParentsBean.class);
+        }
+    }
+    public static class AttBeanHandler extends DbJsonTypeHandler {
+        public AttBeanHandler(Class<?> type) {
+            super(type, AttBean.class);
+        }
+    }
+    public static class RefedSopBeanHandler extends DbJsonTypeHandler {
+        public RefedSopBeanHandler(Class<?> type) {
+            super(type, RefedSopBean.class);
+        }
+    }
+}

+ 24 - 0
fm-sop/src/main/java/com/persagy/fm/sop/handler/ListTypeHandler.java

@@ -0,0 +1,24 @@
+package com.persagy.fm.sop.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+
+public class ListTypeHandler extends FastjsonTypeHandler {
+
+    private final Class<? extends Object> type;
+
+    public ListTypeHandler(Class<Object> type) {
+        super(type);
+        this.type = type;
+    }
+
+    @Override
+    protected Object parse(String json) {
+        return JSON.parseArray(json, this.type);
+    }
+
+    @Override
+    protected String toJson(Object obj) {
+        return super.toJson(obj);
+    }
+}

+ 0 - 114
fm-sop/src/main/java/com/persagy/fm/sop/mapper/SopMapper.java

@@ -1,114 +0,0 @@
-package com.persagy.fm.sop.mapper;
-
-import com.persagy.fm.sop.model.dto.Profile;
-import com.persagy.fm.sop.model.dto.RefedSopBean;
-import com.persagy.fm.sop.model.dto.Sop;
-import com.persagy.fm.sop.model.dto.SopEdit;
-import com.persagy.fm.sop.model.vo.SaveSopEditVo;
-import com.persagy.fm.sop.model.vo.SaveSopVo;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.factory.Mappers;
-
-@Mapper
-public interface SopMapper {
-
-    SopMapper INSTANCE = Mappers.getMapper(SopMapper.class );
-
-    @Mapping(source = "sop_id" ,target ="sopId" )
-    @Mapping(source = "project_id" ,target ="projectId" )
-    @Mapping(source = "extend_field" ,target ="extendField" )
-    @Mapping(source = "operator" ,target ="operator" )
-    @Mapping(source = "sop_name" ,target ="sopName" )
-    //@Mapping(source = "sop_type" ,target ="sopType" )
-    @Mapping(source = "no_obj" ,target ="noObj" )
-    @Mapping(source = "domains" ,target ="domains" )
-    @Mapping(source = "order_type" ,target ="orderType" )
-    @Mapping(source = "tools" ,target ="tools" )
-    @Mapping(source = "fit_objs" ,target ="fitObjs" )
-    @Mapping(source = "equip_model_ids" ,target ="equipModelIds" )
-    @Mapping(source = "labels" ,target ="labels" )
-    //@Mapping(source = "steps_version" ,target ="stepsVersion" )
-    @Mapping(source = "steps" ,target ="steps" )
-    @Mapping(source = "related_data" ,target ="relatedData" )
-    //@Mapping(source = "sop_status" ,target ="sopStatus" )
-    //@Mapping(source = "publish_status" ,target ="publishStatus" )
-    //@Mapping(source = "ref_sop_ids" ,target ="refSopIds" )
-    //@Mapping(source = "version" ,target ="version" )
-    //@Mapping(source = "version_count" ,target ="versionCount" )
-    //@Mapping(source = "version_explain" ,target ="versionExplain" )
-    //@Mapping(source = "version_exp" ,target ="versionExp" )
-    //@Mapping(source = "valid" ,target ="valid" )
-    //@Mapping(source = "update_time" ,target ="updateTime" )
-    Sop SaveSopVoToSop(SaveSopVo saveSopVo);
-
-    @Mapping(source = "sop_edit_id" ,target ="sopEditId" )
-    @Mapping(source = "sop_id" ,target ="sopId" )
-    @Mapping(source = "project_id" ,target ="projectId" )
-    @Mapping(source = "extend_field" ,target ="extendField" )
-    @Mapping(source = "operator" ,target ="operator" )
-    @Mapping(source = "sop_name" ,target ="sopName" )
-    //@Mapping(source = "sop_type" ,target ="sopType" )
-    @Mapping(source = "no_obj" ,target ="noObj" )
-    @Mapping(source = "domains" ,target ="domains" )
-    @Mapping(source = "order_type" ,target ="orderType" )
-    @Mapping(source = "tools" ,target ="tools" )
-    @Mapping(source = "fit_objs" ,target ="fitObjs" )
-    @Mapping(source = "equip_model_ids" ,target ="equipModelIds" )
-    @Mapping(source = "labels" ,target ="labels" )
-    //@Mapping(source = "steps_version" ,target ="stepsVersion" )
-    @Mapping(source = "steps" ,target ="steps" )
-    @Mapping(source = "related_data" ,target ="relatedData" )
-        //@Mapping(source = "sop_status" ,target ="sopStatus" )
-        //@Mapping(source = "publish_status" ,target ="publishStatus" )
-        //@Mapping(source = "ref_sop_ids" ,target ="refSopIds" )
-        //@Mapping(source = "version" ,target ="version" )
-        //@Mapping(source = "version_count" ,target ="versionCount" )
-        //@Mapping(source = "version_explain" ,target ="versionExplain" )
-        //@Mapping(source = "version_exp" ,target ="versionExp" )
-        //@Mapping(source = "valid" ,target ="valid" )
-        //@Mapping(source = "update_time" ,target ="updateTime" )
-    SopEdit SaveSopEditVoToSopEdit(SaveSopEditVo saveSopEditVo);
-
-
-    @Mapping(target = "sop_edit_id" ,source ="sopEditId" )
-    @Mapping(target = "sop_id" ,source ="sopId" )
-    @Mapping(target = "project_id" ,source ="projectId" )
-    @Mapping(target = "extend_field" ,source ="extendField" )
-    @Mapping(target = "operator" ,source ="operator" )
-    @Mapping(target = "sop_name" ,source ="sopName" )
-    //@Mapping(source = "sop_type" ,source ="sopType" )
-    @Mapping(target = "no_obj" ,source ="noObj" )
-    @Mapping(target = "domains" ,source ="domains" )
-    @Mapping(target = "order_type" ,source ="orderType" )
-    @Mapping(target = "tools" ,source ="tools" )
-    @Mapping(target = "fit_objs" ,source ="fitObjs" )
-    @Mapping(target = "equip_model_ids" ,source ="equipModelIds" )
-    @Mapping(target = "labels" ,source ="labels" )
-    //@Mapping(target = "steps_version" ,source ="stepsVersion" )
-    @Mapping(target = "steps" ,source ="steps" )
-    @Mapping(target = "related_data" ,source ="relatedData" )
-        //@Mapping(source = "sop_status" ,source ="sopStatus" )
-        //@Mapping(source = "publish_status" ,source ="publishStatus" )
-        //@Mapping(source = "ref_sop_ids" ,source ="refSopIds" )
-        //@Mapping(source = "version" ,source ="version" )
-        //@Mapping(source = "version_count" ,source ="versionCount" )
-        //@Mapping(source = "version_explain" ,source ="versionExplain" )
-        //@Mapping(source = "version_exp" ,source ="versionExp" )
-        //@Mapping(source = "valid" ,source ="valid" )
-        //@Mapping(source = "update_time" ,source ="updateTime" )
-    SaveSopEditVo  SopEditToSaveSopEditVo(SopEdit sopEdit);
-
-
-    @Mapping(target = "ref_sop_id" ,source ="sop_id" )
-    @Mapping(target = "ref_sop_name" ,source ="sop_name" )
-    @Mapping(target = "version" ,source ="version" )
-    @Mapping(target = "stauts_explain" ,source ="stauts_explain" )
-    @Mapping(target = "update_time" ,source ="update_time" )
-    @Mapping(target = "step_count" ,source ="step_count" )
-    RefedSopBean profileToRefedSopBean(Profile profile);
-
-
-
-
-}

+ 0 - 7
fm-sop/src/main/java/com/persagy/fm/sop/model/SopDTO.java

@@ -1,7 +0,0 @@
-package com.persagy.fm.sop.model;
-
-import com.persagy.fm.sop.model.dto.Sop;
-
-public class SopDTO extends Sop {
-
-}

+ 39 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/AbnormalSetBean.java

@@ -0,0 +1,39 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class AbnormalSetBean {
+    /**
+     * execute_type :
+     * execute_dept_id :
+     * execute_dept_name :
+     * problem_type :
+     * problem_type_name :
+     */
+    @ApiModelProperty("执行类型,手动转事件,自动转事件")
+    @JsonProperty("execute_type")
+    @JsonAlias({"execute_type","executeType"})
+    private String executeType;
+    @ApiModelProperty("事件负责部门id")
+    @JsonProperty("execute_dept_id")
+    @JsonAlias({"execute_dept_id","executeDeptId"})
+    private String executeDeptId;
+    @ApiModelProperty("事件负责部门名称")
+    @JsonProperty("execute_dept_name")
+    @JsonAlias({"execute_dept_name","executeDeptName"})
+    private String executeDeptName;
+    @ApiModelProperty("转的事件关联的问题类型id")
+    @JsonProperty("problem_type")
+    @JsonAlias({"problem_type","problemType"})
+    private String problemType;
+    @ApiModelProperty("转的事件关联的问题类型名称")
+    @JsonProperty("problem_type_name")
+    @JsonAlias({"problem_type_name","problemTypeName"})
+    private String problemTypeName;
+}

+ 22 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/AttBean.java

@@ -0,0 +1,22 @@
+package com.persagy.fm.sop.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AttBean {
+    /**
+     * key :
+     * name :
+     */
+    @ApiModelProperty("附件的key")
+    private String key;
+    @ApiModelProperty("附件名称")
+    private String name;
+}

+ 53 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/BaseInfoPointsBean.java

@@ -0,0 +1,53 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BaseInfoPointsBean {
+    /**
+     * id : ***
+     * code : ****
+     * name : ****
+     * unit : ***
+     * cmpt : Numberentry02
+     * wrong_ranges : [{"type":"gt","values":"12"},{"type":"lt","values":"6"}]
+     * abnormal_set : {"execute_type":"","execute_dept_id":"","execute_dept_name":"","problem_type":"","problem_type_name":""}
+     * cmpt_data : [{"code":"***","name":"***"}]
+     * wrongs : ["选项1","选项2"]
+     */
+    @ApiModelProperty("计量单位")
+    private String unit;
+    @ApiModelProperty("cmpt,cmpt为在App中的组件,单选-Radio01,多选-Multiselect01,无单位数字- Numberentry01,有单位数字-Numberentry02,文本-Textentry01")
+    private String cmpt;
+    @ApiModelProperty("异常信息设置")
+    @JsonAlias({"abnormal_set", "abnormalSet"})
+    @JsonProperty("abnormal_set")
+    private AbnormalSetBean abnormalSet;
+    @ApiModelProperty("异常范围")
+    @JsonAlias({"wrong_ranges", "wrongRanges"})
+    @JsonProperty("wrong_ranges")
+    private List<WrongRangesBean> wrongRanges;
+    @ApiModelProperty("App中的组件")
+    @JsonAlias({"cmpt_data", "cmptData"})
+    @JsonProperty("cmpt_data")
+    private List<CmptDataBean> cmptData;
+    @ApiModelProperty("异常值数组")
+    private List<String> wrongs;
+    @ApiModelProperty("异常值数组")
+    private List<String> items;
+    @ApiModelProperty("是否选中")
+    @JsonProperty("is_select")
+    @JsonAlias({"is_select", "isSelect"})
+    private String isSelect;
+    @ApiModelProperty("前端传参,兼容老数据产生")
+    private Boolean dragable;
+    @ApiModelProperty("前端传参,兼容老数据产生")
+    private Boolean drag;
+    @ApiModelProperty("是否异常")
+    private Boolean isAbnormal;
+}

+ 58 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/BaseObjBean.java

@@ -0,0 +1,58 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BaseObjBean {
+    /**
+     * obj_id : ***
+     * obj_name : 对象名称1
+     * obj_type : equip_class
+     * type_code :
+     * parents : [{"parent_ids":["***","***","***"],"parent_names":["建筑1","楼层1","空间"]},{"parent_ids":["***","***"],"parent_names":["专业1","系统1"]},{"parent_ids":["***","***","***"],"parent_names":["专业1","系统大类","设备大类"]}]
+     */
+    @NotBlank(message = "缺少非空项:obj_id")
+    @ApiModelProperty("对象id")
+    @JsonAlias({"obj_id", "objId"})
+    @JsonProperty("obj_id")
+    private String objId;
+    @NotBlank(message = "缺少非空项:obj_name")
+    @ApiModelProperty("对象名称")
+    @JsonAlias({"obj_name", "objName"})
+    @JsonProperty("obj_name")
+    private String objName;
+    @NotBlank(message = "缺少非空项:obj_type")
+    @ApiModelProperty("对象类型")
+    @JsonAlias({"obj_type", "objType"})
+    @JsonProperty("obj_type")
+    private String objType;
+    @ApiModelProperty("对象来源  content_obj:步骤中操作对象")
+    @JsonAlias({"obj_source", "objSource"})
+    @JsonProperty("obj_source")
+    private String objSource;
+    @ApiModelProperty("对象本地编码名称")
+    @JsonAlias({"obj_code", "objCode"})
+    @JsonProperty("obj_code")
+    private String objCode;
+    @ApiModelProperty("对象所属类ID(用于空间系统设备对象,前端筛选同一类型对象使用)")
+    @JsonAlias({"type_code", "typeCode"})
+    @JsonProperty("type_code")
+    private String typeCode;
+    @ApiModelProperty("待修订、修订中的sop可能会有待修订标记\"is_revise\"的出现,当\"is_revise\":true时,代表该对象需要修订,页面中标红")
+    @JsonAlias({"is_revise", "isRevise"})
+    @JsonProperty("is_revise")
+    private Boolean isRevise;
+    @ApiModelProperty("前端传递的参数,后端无实际作用,兼容老数据产生")
+    private Boolean checked;
+    @ApiModelProperty("父类信息")
+    private List<ParentsBean> parents;
+}

+ 18 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/CmptDataBean.java

@@ -0,0 +1,18 @@
+package com.persagy.fm.sop.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+@Builder
+@Data
+public class CmptDataBean {
+    /**
+     * code : ***
+     * name : ***
+     */
+    @ApiModelProperty(value = "组件code")
+    private String code;
+    @ApiModelProperty(value = "组件名称")
+    private String name;
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 64 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ConfirmResultBean.java


+ 61 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ContentObjsBean.java

@@ -0,0 +1,61 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ContentObjsBean {
+    /**
+     * obj_id : ***
+     * obj_name : 对象名称1
+     * obj_type : equip_class
+     * type_code :
+     * parents : [{"parent_ids":["***","***","***"],"parent_names":["建筑1","楼层1","空间"]},{"parent_ids":["***","***"],"parent_names":["专业1","系统1"]},{"parent_ids":["***","***","***"],"parent_names":["专业1","系统大类","设备大类"]}]
+     */
+    @NotBlank(message = "缺少非空项:content_objs.obj_id")
+    @ApiModelProperty("对象id")
+    @JsonAlias({"obj_id", "objId"})
+    @JsonProperty("obj_id")
+    private String objId;
+    @NotBlank(message = "缺少非空项:content_objs.obj_name")
+    @ApiModelProperty("对象名称")
+    @JsonAlias({"obj_name", "objName"})
+    @JsonProperty("obj_name")
+    private String objName;
+    @NotBlank(message = "缺少非空项:content_objs.obj_type")
+    @ApiModelProperty("对象类型")
+    @JsonAlias({"obj_type", "objType"})
+    @JsonProperty("obj_type")
+    private String objType;
+    @ApiModelProperty("对象来源  content_obj:步骤中操作对象")
+    @JsonAlias({"obj_source", "objSource"})
+    @JsonProperty("obj_source")
+    private String objSource;
+    @ApiModelProperty("对象本地编码名称")
+    @JsonAlias({"obj_code", "objCode"})
+    @JsonProperty("obj_code")
+    private String objCode;
+    @ApiModelProperty("对象所属类ID(用于空间系统设备对象,前端筛选同一类型对象使用)")
+    @JsonAlias({"type_code", "typeCode"})
+    @JsonProperty("type_code")
+    private String typeCode;
+    @ApiModelProperty("待修订、修订中的sop可能会有待修订标记\"is_revise\"的出现,当\"is_revise\":true时,代表该对象需要修订,页面中标红")
+    @JsonAlias({"is_revise", "isRevise"})
+    @JsonProperty("is_revise")
+    private Boolean isRevise;
+    @ApiModelProperty("前端传递的参数,后端无实际作用,兼容老数据产生")
+    private Boolean checked;
+    @ApiModelProperty("父类信息")
+    private List<ParentsBean> parents;
+}

+ 33 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ConvertClassBean.java

@@ -0,0 +1,33 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.sop.validator.Insert;
+import com.persagy.fm.sop.validator.ProjectInsert;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ConvertClassBean{
+    @ApiModelProperty("对象id")
+    @JsonAlias({"obj_id","objId"})
+    @JsonProperty("obj_id")
+    private String objId;
+    @ApiModelProperty("对象类型")
+    @JsonAlias({"obj_type","objType"})
+    @JsonProperty("obj_type")
+    private String objType;
+    @ApiModelProperty("实例化对象的空间范围")
+    @JsonAlias({"space_scope","spaceScope"})
+    @JsonProperty("space_scope")
+    private List<SpaceScopeBean> spaceScopes;
+}

+ 45 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/CustomInfoPointsBean.java

@@ -0,0 +1,45 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.persagy.fm.sop.validator.Insert;
+import com.persagy.fm.sop.validator.ProjectInsert;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CustomInfoPointsBean extends BaseInfoPointsBean{
+    /**
+     * id : ***
+     * code : ****
+     * name : ****
+     * unit : ***
+     * cmpt : Numberentry02
+     * wrong_ranges : [{"type":"gt","values":"12"},{"type":"lt","values":"6"}]
+     * abnormal_set : {"execute_type":"","execute_dept_id":"","execute_dept_name":"","problem_type":"","problem_type_name":""}
+     * cmpt_data : [{"code":"***","name":"***"}]
+     * wrongs : ["选项1","选项2"]
+     */
+    @ApiModelProperty("信息点id")
+    private String id;
+    @ApiModelProperty("信息点code")
+    private String code;
+    @ApiModelProperty("信息点名称")
+    @NotBlank(message = "缺少非空项:customs.name",groups = {Insert.class, ProjectInsert.class})
+    private String name;
+    @ApiModelProperty("类型")
+    @NotBlank(message = "缺少非空项:customs.type",groups = {Insert.class, ProjectInsert.class})
+    private String type;
+    @ApiModelProperty("状态")
+    private String status;
+    @ApiModelProperty("初始化名称")
+    @JsonAlias({"init_name","initName"})
+    private String initName;
+}

+ 0 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/EquipModelBean.java


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov