xuzhancheng 1 vecka sedan
förälder
incheckning
7f9c224b70
50 ändrade filer med 2413 tillägg och 10 borttagningar
  1. 190 0
      tz-gateway/src/main/resources/application-hst.yaml
  2. 1 1
      tz-gateway/src/main/resources/logback-spring.xml
  3. 1 1
      tz-module-bpm/tz-module-bpm-biz/src/main/resources/logback-spring.xml
  4. 2 2
      tz-module-infra/tz-module-infra-biz/src/main/resources/application-hst.yaml
  5. 1 1
      tz-module-infra/tz-module-infra-biz/src/main/resources/logback-spring.xml
  6. 1 1
      tz-module-member/tz-module-member-biz/src/main/resources/logback-spring.xml
  7. 1 1
      tz-module-mp/tz-module-mp-biz/src/main/resources/logback-spring.xml
  8. 1 1
      tz-module-pressure/tz-module-pressure-biz/src/main/resources/logback-spring.xml
  9. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equipboilerscheduling/vo/BoilerPlanSchedulingAssignTaskVO.java
  10. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equipboilerscheduling/vo/EquipBoilerSchedulingPageReqVO.java
  11. 40 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/EquipPipeSchedulingController.java
  12. 87 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/EquipPipePlanSchedulingPageVO.java
  13. 9 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/EquipPipeSchedulingPageReqVO.java
  14. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/PipePlanSchedulingAssignTaskVO.java
  15. 31 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/PipeShiftScheduleReqVO.java
  16. 105 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/PipeShiftScheduleRespVO.java
  17. 58 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/StandardTemplateV2Controller.java
  18. 72 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/vo/StandardClassRespVO.java
  19. 100 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/vo/StandardTemplateRespVO.java
  20. 73 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/vo/StandardTemplateSaveReqVO.java
  21. 4 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equipboilerscheduling/EquipBoilerSchedulingRecordDO.java
  22. 4 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equippipescheduling/EquipPipeSchedulingDO.java
  23. 66 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardClassDO.java
  24. 39 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardTemplateClassDO.java
  25. 121 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardTemplateDO.java
  26. 52 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardTemplateVersionDO.java
  27. 61 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/TemplateInitDataDO.java
  28. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/equippipescheduling/EquipPipeSchedulingMapper.java
  29. 21 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardClassMapper.java
  30. 18 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardTemplateClassMapper.java
  31. 21 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardTemplateMapper.java
  32. 19 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardTemplateVersionMapper.java
  33. 18 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/TemplateInitDataMapper.java
  34. 23 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  35. 81 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equipboilerscheduling/EquipBoilerSchedulingServiceImpl.java
  36. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equippipescheduling/EquipPipeSchedulingService.java
  37. 248 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equippipescheduling/EquipPipeSchedulingServiceImpl.java
  38. 18 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardClassService.java
  39. 36 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardClassServiceImpl.java
  40. 37 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateService.java
  41. 270 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateServiceImpl.java
  42. 19 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateVersionService.java
  43. 35 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateVersionServiceImpl.java
  44. 27 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardtemplateclass/StandardTemplateClassService.java
  45. 52 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardtemplateclass/StandardTemplateClassServiceImpl.java
  46. 33 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/templateinitdata/TemplateInitDataService.java
  47. 68 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/templateinitdata/TemplateInitDataServiceImpl.java
  48. 23 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equipboilerscheduling/EquipBoilerSchedulingMapper.xml
  49. 201 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipescheduling/EquipPipeSchedulingMapper.xml
  50. 1 1
      tz-module-system/tz-module-system-biz/src/main/resources/logback-spring.xml

+ 190 - 0
tz-gateway/src/main/resources/application-hst.yaml

@@ -13,7 +13,197 @@ spring:
       config: # 【注册中心】配置项
         namespace: test # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+    gateway:
+      # 路由配置项,对应 RouteDefinition 数组
+      routes:
+        ## system-server 服务
+        - id: system-admin-api # 路由的编号
+          uri: grayLb://system-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/system/**
+          filters:
+            - RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        - id: system-app-api # 路由的编号
+          uri: grayLb://system-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/app-api/system/**
+          filters:
+            - RewritePath=/app-api/system/v3/api-docs, /v3/api-docs
+        - id: system-appapi # 路由的编号
+          uri: grayLb://system-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/appapi/system/**
+          filters:
+            - RewritePath=/appapi/system/v3/api-docs, /v3/api-docs
+        - id: system-external-api # 路由的编号
+          uri: grayLb://system-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/external-api/system/**
+          filters:
+            - RewritePath=/external-api/system/v3/api-docs, /v3/api-docs
+        - id: system-platform-api # 路由的编号
+          uri: grayLb://system-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/platform-api/system/**
+          filters:
+            - RewritePath=/platform-api/system/v3/api-docs, /v3/api-docs
+        ## infra-server 服务
+        - id: infra-admin-api # 路由的编号
+          uri: grayLb://infra-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/infra/**
+          filters:
+            - RewritePath=/admin-api/infra/v3/api-docs, /v3/api-docs
+        - id: infra-app-api # 路由的编号
+          uri: grayLb://infra-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/app-api/infra/**
+          filters:
+            - RewritePath=/app-api/infra/v3/api-docs, /v3/api-docs
 
+        - id: infra-appapi # 路由的编号
+          uri: grayLb://infra-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/appapi/infra/**
+          filters:
+            - RewritePath=/appapi/infra/v3/api-docs, /v3/api-docs
+        - id: infra-platform # 路由的编号
+          uri: grayLb://infra-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/platform-api/infra/**
+          filters:
+            - RewritePath=/appapi/infra/v3/api-docs, /v3/api-docs
+        - id: infra-spring-boot-admin # 路由的编号(Spring Boot Admin)
+          uri: grayLb://infra-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin/**
+        - id: infra-websocket # 路由的编号(WebSocket)
+          uri: grayLb://infra-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/infra/ws/**
+        ## bpm-server 服务
+        - id: bpm-admin-api # 路由的编号
+          uri: grayLb://bpm-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/bpm/**
+          filters:
+            - RewritePath=/admin-api/bpm/v3/api-docs, /v3/api-docs
+        - id: bpm-appapi # 路由的编号
+          uri: grayLb://bpm-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/appapi/bpm/**
+          filters:
+            - RewritePath=/appapi/bpm/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        ## report-server 服务
+        - id: report-admin-api # 路由的编号
+          uri: grayLb://report-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/report/**
+          filters:
+            - RewritePath=/admin-api/report/v3/api-docs, /v3/api-docs
+        - id: report-jimu # 路由的编号(积木报表)
+          uri: grayLb://report-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/jmreport/**
+        ## mp-server 服务
+        - id: mp-admin-api # 路由的编号
+          uri: grayLb://mp-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/mp/**
+          filters:
+            - RewritePath=/admin-api/mp/v3/api-docs, /v3/api-docs
+        - id: member-admin-api # 路由的编号
+          uri: grayLb://member-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/member/**
+          filters:
+            - RewritePath=/admin-api/member/v3/api-docs, /v3/api-docs
+        ## laboratory-server 服务
+        - id: laboratory-admin-api # 路由的编号
+          uri: grayLb://laboratory-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/laboratory/**
+          filters:
+            - RewritePath=/admin-api/laboratory/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        - id: laboratory-app-api # 路由的编号
+          uri: grayLb://laboratory-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/app-api/laboratory/**
+          filters:
+            - RewritePath=/app-api/laboratory/v3/api-docs, /v3/api-docs
+        - id: laboratory-appapi # 路由的编号
+          uri: grayLb://laboratory-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/appapi/laboratory/**
+          filters:
+            - RewritePath=/appapi/laboratory/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        ## pressure-server 服务
+        - id: pressure-admin-api # 路由的编号
+          uri: grayLb://pressure-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/pressure/**
+          filters:
+            - RewritePath=/admin-api/pressure/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        - id: pressure-app-api # 路由的编号
+          uri: grayLb://pressure-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/app-api/pressure/**
+          filters:
+            - RewritePath=/app-api/pressure/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        - id: pressure-appapi # 路由的编号
+          uri: grayLb://pressure-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/appapi/pressure/**
+          filters:
+            - RewritePath=/appapi/pressure/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
+        - id: system-app-api # 路由的编号
+          uri: grayLb://pressure-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/app-api/pressure/**
+          filters:
+            - RewritePath=/app-api/pressure/v3/api-docs, /v3/api-docs
+        - id: pressure-platform-api # 路由的编号
+          uri: grayLb://pressure-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/platform-api/pressure/**
+          filters:
+            - RewritePath=/platform-api/pressure/v3/api-docs, /v3/api-docs
+        - id: pressure_long_timeout_route
+          uri: grayLb://pressure-server
+          predicates:
+            - Path=/*api/pressure/report-template/reportPreview # 匹配耗时的导出接口
+          order: -1 # **重要:高优先级,确保先匹配此规则**[citation:8]
+          metadata:
+            response-timeout: 300000 # 为导出接口单独设置300秒响应超时[citation:5]
+            connect-timeout: 5000
+        - id: member-app-api # 路由的编号
+          uri: grayLb://member-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/app-api/member/**
+          filters:
+            - RewritePath=/app-api/member/v3/api-docs, /v3/api-docs
+        - id: member-platform-api # 路由的编号
+          uri: grayLb://member-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/platform-api/member/**
+          filters:
+            - RewritePath=/platform-api/member/v3/api-docs, /v3/api-docs
+        - id: laboratory-platform-api # 路由的编号
+          uri: grayLb://laboratory-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/platform-api/laboratory/**
+          filters:
+            - RewritePath=/platform-api/laboratory/v3/api-docs, /v3/api-docs
+        ## quartz-server 服务
+        - id: quartz-admin-api # 路由的编号
+          uri: grayLb://quartz-server
+          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
+            - Path=/admin-api/quartz/**
+          filters:
+            - RewritePath=/admin-api/quartz/v3/api-docs, /v3/api-docs
+
+      x-forwarded:
+        prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀
 # 日志文件配置
 logging:
   level:

+ 1 - 1
tz-gateway/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,stage,prod,default">
+    <springProfile name="dev,test,uat,stage,prod,default,hst,hsd">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 1 - 1
tz-module-bpm/tz-module-bpm-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,stage,prod,default,hsd">
+    <springProfile name="dev,test,uat,stage,prod,default,hsd,hst">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 2 - 2
tz-module-infra/tz-module-infra-biz/src/main/resources/application-hst.yaml

@@ -8,12 +8,12 @@ spring:
       username: nacos # Nacos 账号
       password: nacos # Nacos 密码
       discovery: # 【配置中心】配置项
-        namespace: dev_xzc # 命名空间。这里使用 dev 开发环境
+        namespace: test # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
         metadata:
           version: 1.0.0 # 服务实例的版本号,可用于灰度发布
       config: # 【注册中心】配置项
-        namespace: dev_xzc # 命名空间。这里使用 dev 开发环境
+        namespace: test # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
 
 --- #################### 数据库相关配置 ####################

+ 1 - 1
tz-module-infra/tz-module-infra-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,stage,prod,default,hsd">
+    <springProfile name="dev,test,uat,stage,prod,default,hsd,hst">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 1 - 1
tz-module-member/tz-module-member-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,stage,prod,default,hsd">
+    <springProfile name="dev,test,uat,stage,prod,default,hsd,hst">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 1 - 1
tz-module-mp/tz-module-mp-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,stage,prod,default,uat">
+    <springProfile name="dev,test,uat,stage,prod,default,uat,hsd,hst">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 1 - 1
tz-module-pressure/tz-module-pressure-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,uat,stage,prod,default,hsd">
+    <springProfile name="dev,test,uat,uat,stage,prod,default,hsd,hst">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equipboilerscheduling/vo/BoilerPlanSchedulingAssignTaskVO.java

@@ -20,6 +20,8 @@ public class BoilerPlanSchedulingAssignTaskVO {
     @Schema(description = "100 内检, 200 外检 300 耐压检验")
     private Integer type;
 
+    @Schema(description = "是否需要前台约检确认")
+    private Boolean hasOrderConfirm;
 
     @Schema(description = "排期日期")
     @NotNull

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equipboilerscheduling/vo/EquipBoilerSchedulingPageReqVO.java

@@ -65,4 +65,10 @@ public class EquipBoilerSchedulingPageReqVO extends PageParam {
 
     @Schema(description = "出厂编号")
     private String factoryCode;
+
+    @Schema(description = "排序字段")
+    private String sort;
+
+    @Schema(description = "排序类型")
+    private String order;
 }

+ 40 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/EquipPipeSchedulingController.java

@@ -73,6 +73,18 @@ public class EquipPipeSchedulingController {
         return success(BeanUtils.toBean(equipPipeScheduling, EquipPipeSchedulingRespVO.class));
     }
 
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出管道计划排期表单 Excel")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportSchedulingTbExcel(@Valid EquipPipeSchedulingPageReqVO pageReqVO,
+                                        HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EquipPipePlanSchedulingPageVO> list = equipPipeSchedulingService.getEquipPipeSchedulingPagePipe(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "管道计划排期表单.xls", "数据", EquipPipePlanSchedulingPageVO.class,
+                BeanUtils.toBean(list, EquipPipePlanSchedulingPageVO.class));
+    }
+
     @GetMapping("/page")
     @Operation(summary = "获得管道排期分页")
 //    @PreAuthorize("@ss.hasPermission('pressure2:equip-pipe-scheduling:query')")
@@ -80,6 +92,13 @@ public class EquipPipeSchedulingController {
         PageResult<EquipPipeSchedulingRespVO> pageResult = equipPipeSchedulingService.getEquipPipeSchedulingPage(pageReqVO);
         return success(pageResult);
     }
+    @GetMapping("/page/pipe")
+    @Operation(summary = "获得管道排期分页")
+//    @PreAuthorize("@ss.hasPermission('pressure2:equip-pipe-scheduling:query')")
+    public CommonResult<PageResult<EquipPipePlanSchedulingPageVO>> getEquipPipeSchedulingPagePipe(@Valid EquipPipeSchedulingPageReqVO pageReqVO) {
+        PageResult<EquipPipePlanSchedulingPageVO> pageResult = equipPipeSchedulingService.getEquipPipeSchedulingPagePipe(pageReqVO);
+        return success(pageResult);
+    }
 
     @PostMapping("/getDetailByProject")
     @Operation(summary = "查询工程单")
@@ -118,6 +137,27 @@ public class EquipPipeSchedulingController {
         return success(list);
     }
 
+    /**
+     *   排班表
+     **/
+    @GetMapping("/shiftSchedule")
+    @Operation(summary = "排班表")
+    public CommonResult<List<PipeShiftScheduleRespVO>> shiftSchedule(@Valid PipeShiftScheduleReqVO pageReqVO) {
+        List<PipeShiftScheduleRespVO> list = equipPipeSchedulingService.shiftSchedule(pageReqVO);
+        return success(list);
+    }
+
+    /**
+     *   排班表
+     **/
+    @PutMapping("/setShiftSchedule")
+    @Operation(summary = "排班表")
+    public CommonResult<Boolean> setShiftSchedule(@Valid @RequestBody List<PipeShiftScheduleRespVO> pipeShiftScheduleRespVOS) {
+        equipPipeSchedulingService.setShiftSchedule(pipeShiftScheduleRespVOS);
+        return success(true);
+    }
+
+
     @PutMapping("/calendar/update")
     @Operation(summary = "更新计划排期日历")
     public CommonResult<Boolean> planSchedulingUpdateCalendar(@Valid @RequestBody BoilerPlanSchedulingUpdateCalendarVO updateCalendarVO) {

+ 87 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/EquipPipePlanSchedulingPageVO.java

@@ -0,0 +1,87 @@
+package cn.start.tz.module.pressure2.controller.admin.equippipescheduling.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Schema(description = "管道排期列表")
+@Data
+public class EquipPipePlanSchedulingPageVO {
+
+
+    @Schema(description = "ID")
+    @ExcelIgnore
+    private String id;
+
+    @Schema(description = "使用单位", example = "王五")
+    @ExcelProperty(value = "使用单位名称", index = 2)
+    private String unitName;
+
+    @Schema(description = "管道所在地址")
+    @ExcelProperty(value = "管道使用地址", index = 3)
+    private String pipeAddress;
+
+    @Schema(description = "工程号")
+    @ExcelProperty(value = "工程号", index = 4)
+    private String projectNo;
+
+    @Schema(description = "工程名称")
+    @ExcelProperty(value = "工程名称", index = 5)
+    private String projectName;
+
+    @Schema(description = "是否有法定排期")
+    @ExcelIgnore
+    private Boolean hasLegalScheduling;
+
+    @Schema(description = "是非年度排期")
+    @ExcelIgnore
+    private Boolean hasYearScheduling;
+
+    @Schema(description = "下次法定检查日期")
+    @ExcelProperty(value = "定期检验", index = 6)
+    private LocalDateTime nextLegalCheckDate;
+
+    @Schema(description = "下次年度检查日期")
+    @ExcelProperty(value = "年度检查", index = 7)
+    private LocalDateTime nextYearCheckDate;
+
+    @Schema(description = "计划法定检查日期")
+    @ExcelIgnore
+    private LocalDateTime planLegalCheckDate;
+
+    @Schema(description = "计划年度检查日期")
+    @ExcelIgnore
+    private LocalDateTime planYearCheckDate;
+
+    @ExcelIgnore
+    private String unitId;
+
+    @Schema(description = "街道")
+    @ExcelIgnore
+    private Integer equipStreet;
+
+    @Schema(description = "街道名称")
+    @ExcelProperty(value = "街道", index = 1)
+    private String equipStreetName;
+
+    @Schema(description = "区域")
+    @ExcelIgnore
+    private Integer equipDistrict;
+
+    @Schema(description = "区域名称")
+    @ExcelProperty(value = "区域", index = 0)
+    private String equipDistrictName;
+
+    @Schema(description = "管道数量")
+    @ExcelProperty(value = "管道数量", index = 8)
+    private Integer pipeCount;
+
+    @ExcelIgnore
+    private List<EquipPipePlanSchedulingVO> pipes = new ArrayList<>();
+}

+ 9 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/EquipPipeSchedulingPageReqVO.java

@@ -85,4 +85,13 @@ public class EquipPipeSchedulingPageReqVO extends PageParam {
 
     @Schema(description = "工程号")
     private String projectNo;
+
+    @Schema(description = "工程名")
+    private String projectName;
+
+    @Schema(description = "排序字段")
+    private String sort;
+
+    @Schema(description = "排序类型")
+    private String order;
 }

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/PipePlanSchedulingAssignTaskVO.java

@@ -22,6 +22,8 @@ public class PipePlanSchedulingAssignTaskVO {
     @Schema(description = "100 内检, 200 外检 300 耐压检验")
     private Integer type;
 
+    @Schema(description = "是否需要前台约检确认")
+    private Boolean hasOrderConfirm;
 
     @Schema(description = "排期日期")
     @NotNull

+ 31 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/PipeShiftScheduleReqVO.java

@@ -0,0 +1,31 @@
+package cn.start.tz.module.pressure2.controller.admin.equippipescheduling.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Schema(description = "管理后台 - 计划排期日历查询条件 Request VO")
+@Data
+public class PipeShiftScheduleReqVO {
+
+    @Schema(description = "排期日期查询")
+    private LocalDate startDate;
+
+    @Schema(description = "排期日期查询")
+    private LocalDate endDate;
+
+    @Schema(description = "检验性质")
+    private Integer checkType;
+
+    @Schema(description = "单位名称")
+    private String unitName;
+
+    @Schema(description = "状态")
+    private Integer status;
+
+    @Schema(description = "关联部门")
+    private String relateDepartment;
+}

+ 105 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/equippipescheduling/vo/PipeShiftScheduleRespVO.java

@@ -0,0 +1,105 @@
+package cn.start.tz.module.pressure2.controller.admin.equippipescheduling.vo;
+
+import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerCalendarItemRespVO;
+import cn.start.tz.module.pressure2.dal.dataobject.equippipeschedulinguser.EquipPipeSchedulingUserDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Schema(description = "管理后台 - 计划排期日历 Response VO")
+@Data
+public class PipeShiftScheduleRespVO {
+
+    @Schema(description = "任务")
+    private List<PipeShiftScheduleItemRespVO> taskItems;
+
+    @Schema(description = "检验员")
+    private List<String> checkers;
+
+    @Schema(description = "状态, 100 已排期 200 待约检 300 已受理 400 检测中")
+    private Integer status;
+
+    private String id;
+
+    @Schema(description = "日期")
+    private LocalDate date;
+
+    // 管道介质
+    @Schema(description = "管道介质")
+    private List<String> pipeMedium;
+
+    @Data
+    public static class PipeShiftScheduleItemRespVO {
+
+        @Schema(description = "单位名称")
+        private String unitName;
+
+        @Schema(description = "单位地址")
+        private String unitAddress;
+
+        private String pipeAddress;
+
+        private Integer equipDistrict;
+
+        @Schema(description = "设备所在区域名称")
+        private String equipDistrictName;
+
+        private Integer equipStreet;
+
+        @Schema(description = "设备所在街道名称")
+        private String equipStreetName;
+
+        @Schema(description = "任务id")
+        private String taskId;
+
+        @Schema(description = "检验类型")
+        private String checkType;
+
+        @Schema(description = "设备数量")
+        private String equipCount;
+
+        @Schema(description = "日期")
+        private LocalDate planDate;
+
+        @Schema(description = "来源")
+        private Integer source;
+
+        @Schema(description = "纬度")
+        private Double lat;
+
+        @Schema(description = "经度")
+        private Double lng;
+
+        private Integer status;
+
+        private Integer taskStatus;
+
+        private Integer acceptStatus;
+
+        private String appointmentId;
+
+        // 联系人
+        @Schema(description = "联系人")
+        private String contact;
+
+        // 电话
+        @Schema(description = "联系人电话")
+        private String contactPhone;
+
+        // 管线长度 (m)
+        @Schema(description = "管道长度")
+        private String pipeLengthTotal;
+
+        // 上次报告编号
+        @Schema(description = "上次定检报告编号")
+        private String lastLegalPeriodicalInspectionReportNo;
+
+        @Schema(description = "上次年检报告编号")
+        private String lastYearReportNo;
+        // 监督报告编号
+        @Schema(description = "监督检验报告编号")
+        private String lastMaintenanceReportNo;
+    }
+}

+ 58 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/StandardTemplateV2Controller.java

@@ -0,0 +1,58 @@
+package cn.start.tz.module.pressure2.controller.admin.standardfile;
+
+import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.module.grape.city.api.GrapeCityApi;
+import cn.start.tz.module.infra.api.file.FileApi;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardTemplateRespVO;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardTemplateSaveReqVO;
+import cn.start.tz.module.pressure2.service.standardfile.StandardTemplateService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 标准模版v2")
+@RestController
+@RequestMapping("/pressure2/standard-template/v2")
+@Validated
+public class StandardTemplateV2Controller {
+
+    @Resource
+    private StandardTemplateService standardTemplateService;
+
+    @Resource
+    private FileApi fileApi;
+
+    @Resource
+    private GrapeCityApi grapeCityApi;
+
+    @GetMapping("/get")
+    @Operation(summary = "获得标准模版")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<StandardTemplateRespVO> getStandardTemplate(@RequestParam("id") String id) {
+        StandardTemplateRespVO vo = standardTemplateService.getStandardTemplateVOV2(id);
+        return success(vo);
+    }
+
+    @PostMapping("/create")
+    @Operation(summary = "创建标准模版")
+//    //  @PreAuthorize("@ss.hasPermission('system:standard-template:create')")
+    public CommonResult<String> createStandardTemplate(@Valid StandardTemplateSaveReqVO createReqVO) throws IOException {
+        return success(standardTemplateService.createStandardTemplate(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新标准模版")
+//    //  @PreAuthorize("@ss.hasPermission('system:standard-template:update')")
+    public CommonResult<Boolean> updateStandardTemplate(@Valid StandardTemplateSaveReqVO updateReqVO) throws Exception {
+        standardTemplateService.updateStandardTemplate(updateReqVO);
+        return success(true);
+    }
+}

+ 72 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/vo/StandardClassRespVO.java

@@ -0,0 +1,72 @@
+package cn.start.tz.module.pressure2.controller.admin.standardfile.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Set;
+
+@Schema(description = "管理后台 - 标准分类 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class StandardClassRespVO {
+
+    @Schema(description = "标准分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28761")
+    @ExcelProperty("标准分类ID")
+    private String id;
+
+    @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+    @ExcelProperty("分类名称")
+    private String name;
+
+    @Schema(description = "父分类id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17913")
+    @ExcelProperty("父分类id")
+    private String parentId;
+
+    @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("显示顺序")
+    private Integer sort;
+
+    @Schema(description = "主部门ID", example = "19266")
+    @ExcelProperty("主部门ID")
+    private String deptId;
+
+    @Schema(description = "主部门名称", example = "测试部门")
+    @ExcelProperty("主部门名称")
+    private String deptName;
+
+    @Schema(description = "关联部门ID列表", example = "[\"19266\", \"19267\"]")
+    private Set<String> deptIds;
+
+    @Schema(description = "关联部门名称列表", example = "[\"测试部门\", \"研发部门\"]")
+    private Set<String> deptNames;
+
+    @Schema(description = "父级分类名称", example = "父级分类名称")
+    private String parentClassName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "项目分类代号", example = "19266")
+    private String code;
+
+    /**
+     * 项目类别
+     */
+    @Schema(description = "项目类别", example = "1")
+    private String type;
+
+    @Schema(description = "子分类")
+    private List<StandardClassRespVO> childrenList;
+
+    /**
+     * 状态 0:正常  1:停用
+     */
+    @Schema(description = "状态 0:正常  1:停用")
+    private String status;
+
+}

+ 100 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/vo/StandardTemplateRespVO.java

@@ -0,0 +1,100 @@
+package cn.start.tz.module.pressure2.controller.admin.standardfile.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 标准模版 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class StandardTemplateRespVO {
+
+    @Schema(description = "模版ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14203")
+    @ExcelProperty("模版ID")
+    private String id;
+
+    @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @ExcelProperty("模版名称")
+    private String name;
+
+    @Schema(description = "模版文件url", example = "https://www.iocoder.cn")
+    @ExcelProperty("模版文件url")
+    private String fileUrl;
+
+    @Schema(description = "模版类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("模版类型")
+    private String type;
+
+    @Schema(description = "检验标准类型id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28641")
+    @ExcelProperty("检验标准类型id")
+    private String classId;
+
+    @Schema(description = "签章类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("签章类型")
+    private String signType;
+
+    @Schema(description = "版本号")
+    @ExcelProperty("版本号")
+    private String versionNumber;
+
+    @Schema(description = "绑定数据json字符串")
+    @ExcelProperty("绑定数据json字符串")
+    private String bindingPathSchema;
+
+    @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("显示顺序")
+    private Integer sort;
+
+    @Schema(description = "状态 0启用 1停用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("状态 0启用 1停用")
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ExcelProperty("状态更新时间")
+    @Schema(description = "状态更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    private LocalDateTime statusUpdateTime;
+
+    /**
+     * 创建者,目前使用 SysUser 的 id 编号
+     * <p>
+     * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
+     */
+    @Schema(description = "创建者id", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String creator;
+
+    /**
+     * 创建者,目前使用 SysUser 的 nickname 编号
+     */
+    @Schema(description = "创建者名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String creatorName;
+
+    @Schema(description = "模版标识code", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private String code;
+
+    /**
+     * 绑定数据json字符串带注释
+     */
+    @Schema(description = "绑定数据json字符串带注释")
+    private String bindingPathNameJson;
+
+    /**
+     * 实施日期
+     */
+    @Schema(description = "实施日期")
+    private LocalDate implementDate;
+
+    /**
+     * 关联的业务类别列表
+     */
+    private List<StandardClassRespVO> classRespVOList;
+
+
+}

+ 73 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/standardfile/vo/StandardTemplateSaveReqVO.java

@@ -0,0 +1,73 @@
+package cn.start.tz.module.pressure2.controller.admin.standardfile.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Schema(description = "管理后台 - 标准模版新增/修改 Request VO")
+@Data
+public class StandardTemplateSaveReqVO {
+
+    @Schema(description = "模版ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14203")
+    private String id;
+
+    @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @NotEmpty(message = "模版名称不能为空")
+    private String name;
+
+    @Schema(description = "模版文件", requiredMode = Schema.RequiredMode.REQUIRED)
+    private MultipartFile file;
+
+    /**
+     * 模版文件url
+     */
+    @Schema(description = "模版文件url", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String fileUrl;
+
+    @Schema(description = "模版类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotEmpty(message = "模版类型不能为空")
+    private String type;
+
+    @Schema(description = "检验标准类型id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28641")
+    private String classId;
+
+    @Schema(description = "签章类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private String signType;
+
+    @Schema(description = "版本号")
+    private String versionNumber;
+
+    @Schema(description = "绑定数据json字符串")
+    private String bindingPathSchema;
+
+    @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Integer sort;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer status;
+
+    /**
+     * 绑定数据json字符串带注释
+     */
+    @Schema(description = "绑定数据json字符串带注释")
+    private String bindingPathNameJson;
+
+    private String code;
+
+    /**
+     * 实施日期
+     */
+    @Schema(description = "实施日期")
+    private LocalDate implementDate;
+
+    /**
+     * 分类id列表
+     */
+    private List<String> classIds;
+
+
+}

+ 4 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equipboilerscheduling/EquipBoilerSchedulingRecordDO.java

@@ -50,4 +50,8 @@ public class EquipBoilerSchedulingRecordDO extends BaseDO {
      */
     private Integer source;
 
+    /**
+     * 是否需要前台约检确认
+     */
+    private Boolean hasOrderConfirm;
 }

+ 4 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equippipescheduling/EquipPipeSchedulingDO.java

@@ -50,4 +50,8 @@ public class EquipPipeSchedulingDO extends BaseDO {
      */
     private String unitName;
 
+    /**
+     * 是否需要前台约检确认
+     */
+    private Boolean hasOrderConfirm;
 }

+ 66 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardClassDO.java

@@ -0,0 +1,66 @@
+package cn.start.tz.module.pressure2.dal.dataobject.standardfile;
+
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 标准分类 DO
+ *
+ * @author yck
+ */
+@TableName("system_standard_class")
+@KeySequence("system_standard_class_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardClassDO extends BaseDO {
+
+    public static final String PARENT_ID_ROOT = "0";
+
+    /**
+     * 标准分类ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 分类名称
+     */
+    private String name;
+    /**
+     * 父分类id
+     */
+    private String parentId;
+    /**
+     * 显示顺序
+     */
+    private Integer sort;
+    /**
+     * 部门ID (已废弃,改用关联表支持多部门)
+     * @deprecated 请使用 StandardClassDeptService 获取关联的部门信息
+     */
+    @Deprecated
+    private String deptId;
+
+    /**
+     * 项目分类代号code
+     */
+    private String code;
+
+    /**
+     * 项目类别
+     */
+    private String type;
+
+    /**
+     * 状态 0:正常  1:停用
+     */
+    private String status;
+
+}

+ 39 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardTemplateClassDO.java

@@ -0,0 +1,39 @@
+package cn.start.tz.module.pressure2.dal.dataobject.standardfile;
+
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 标准模版分类关联表(一个模版关联多个分类) DO
+ *
+ * @author 特种管理员
+ */
+@TableName("system_standard_template_class")
+@KeySequence("system_standard_template_class_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardTemplateClassDO extends BaseDO {
+
+    /**
+     * 标准分类关联模版ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 检验标准类型id
+     */
+    private String classId;
+    /**
+     * 模版id
+     */
+    private String templateId;
+
+}

+ 121 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardTemplateDO.java

@@ -0,0 +1,121 @@
+package cn.start.tz.module.pressure2.dal.dataobject.standardfile;
+
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+import cn.start.tz.module.system.enums.DictTypeConstants;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 标准模版 DO
+ *
+ * @author yck
+ */
+@TableName("system_standard_template")
+@KeySequence("system_standard_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardTemplateDO extends BaseDO {
+
+    /**
+     * 模版ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 模版名称
+     */
+    private String name;
+    /**
+     * 模版文件url
+     */
+    private String fileUrl;
+    /**
+     * 模版类型
+     * system_standard_template_type
+     * 枚举 {@link DictTypeConstants}
+     */
+    private String type;
+    /**
+     * 检验标准类型id
+     */
+    private String classId;
+    /**
+     * 签章类型
+     * system_standard_template_sign_type
+     * 枚举 {@link DictTypeConstants}
+     */
+    private String signType;
+    /**
+     * 版本号
+     */
+    private String versionNumber;
+    /**
+     * 绑定数据json字符串
+     */
+    private String bindingPathSchema;
+    /**
+     * 显示顺序
+     */
+    private Integer sort;
+
+    /**
+     * 状态 0启用 1停用 2待审批 3暂存 4审批不通过
+     */
+    private Integer status;
+
+    /**
+     * 状态更新时间
+     */
+    private LocalDateTime statusUpdateTime;
+
+    /**
+     * 模版标识code(用于实现不同策略代码)
+     */
+    private String code;
+
+    /**
+     * 绑定数据json字符串带注释
+     */
+    private String bindingPathNameJson;
+
+    /**
+     * 审批时间
+     */
+    private LocalDateTime approvalDate;
+
+    /**
+     * 审批人
+     */
+    private String approvalBy;
+
+    /**
+     * 审批人
+     */
+    private String approvalByName;
+
+    /**
+     * 模版审批状态 0待审批 1启用 2停用 3回退
+     */
+    private String approvalStatus;
+
+    /**
+     * 原因
+     */
+    private String reason;
+
+    /**
+     * 实施日期
+     */
+    private LocalDate implementDate;
+
+}

+ 52 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/StandardTemplateVersionDO.java

@@ -0,0 +1,52 @@
+package cn.start.tz.module.pressure2.dal.dataobject.standardfile;
+
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 标准模版版本 DO
+ *
+ * @author yck
+ */
+@TableName("system_standard_template_version")
+@KeySequence("system_standard_template_version_seq")
+// 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardTemplateVersionDO extends BaseDO {
+
+    /**
+     * 版本ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 模版ID
+     */
+    private String templateId;
+    /**
+     * 模版名称
+     */
+    private String templateName;
+    /**
+     * 版本号
+     */
+    private String versionNumber;
+    /**
+     * 模版文件url
+     */
+    private String fileUrl;
+    /**
+     * 创建者名称
+     */
+    private String creatorName;
+
+}

+ 61 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/standardfile/TemplateInitDataDO.java

@@ -0,0 +1,61 @@
+package cn.start.tz.module.pressure2.dal.dataobject.standardfile;
+
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 标准模版字段初始化 DO
+ *
+ * @author yck
+ */
+@TableName("system_template_init_data")
+@KeySequence("system_template_init_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TemplateInitDataDO extends BaseDO {
+
+    /**
+     * 字段初始化ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 字段名称
+     */
+    private String name;
+    /**
+     * 字段CODE
+     */
+    private String code;
+    /**
+     * 字段分类
+     */
+    private String classification;
+    /**
+     * 字段类型
+     */
+    private String type;
+    /**
+     * 字段默认值
+     */
+    private String defaultValue;
+    /**
+     * 字段注释描述
+     */
+    private String annotation;
+
+    private String eventType;
+
+    private String eventClass;
+
+    private String valueType;
+
+}

+ 8 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/equippipescheduling/EquipPipeSchedulingMapper.java

@@ -55,10 +55,18 @@ public interface EquipPipeSchedulingMapper extends BaseMapperX<EquipPipeScheduli
     @InterceptorIgnore(dataPermission = "true")
     Long selectPlanPageCount(EquipPipeSchedulingPageReqVO reqVO);
 
+    @InterceptorIgnore(dataPermission = "true")
+    List<EquipPipePlanSchedulingPageVO> selectPlanPagePipe(EquipPipeSchedulingPageReqVO reqVO);
+
+    @InterceptorIgnore(dataPermission = "true")
+    Long selectPlanPagePipeCount(EquipPipeSchedulingPageReqVO reqVO);
+
     List<EquipPipePlanSchedulingVO> selectPlanPageGroupProject(EquipPipePlanProjectReqVO reqVO) ;
 
     List<BoilerCalendarItemRespVO> selectPlanCalendar(BoilerCalendarReqVO reqVO);
 
+    List<PipeShiftScheduleRespVO.PipeShiftScheduleItemRespVO> selectShiftSchedule(PipeShiftScheduleReqVO reqVO);
+
     List<EquipPipeSchedulingPipesRespVO> selectPlanPipesPage(EquipPipeSchedulingPageReqVO reqVO);
 
     Long selectPlanPipesPageCount(EquipPipeSchedulingPageReqVO reqVO);

+ 21 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardClassMapper.java

@@ -0,0 +1,21 @@
+package cn.start.tz.module.pressure2.dal.mysql.standardfile;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardClassDO;
+import cn.start.tz.module.system.enums.common.IsYesOrNoEnum;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 标准分类 Mapper
+ *
+ * @author yck
+ */
+@Mapper
+public interface StandardClassMapper extends BaseMapperX<StandardClassDO> {
+}

+ 18 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardTemplateClassMapper.java

@@ -0,0 +1,18 @@
+package cn.start.tz.module.pressure2.dal.mysql.standardfile;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateClassDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 标准模版分类关联表(一个模版关联多个分类) Mapper
+ *
+ * @author 特种管理员
+ */
+@Mapper
+public interface StandardTemplateClassMapper extends BaseMapperX<StandardTemplateClassDO> {
+
+
+}

+ 21 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardTemplateMapper.java

@@ -0,0 +1,21 @@
+package cn.start.tz.module.pressure2.dal.mysql.standardfile;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.framework.mybatis.core.query.MPJLambdaWrapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 标准模版 Mapper
+ *
+ * @author yck
+ */
+@Mapper
+public interface StandardTemplateMapper extends BaseMapperX<StandardTemplateDO> {
+
+}

+ 19 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/StandardTemplateVersionMapper.java

@@ -0,0 +1,19 @@
+package cn.start.tz.module.pressure2.dal.mysql.standardfile;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateVersionDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 标准模版版本 Mapper
+ *
+ * @author yck
+ */
+@Mapper
+public interface StandardTemplateVersionMapper extends BaseMapperX<StandardTemplateVersionDO> {
+
+
+}

+ 18 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/standardfile/TemplateInitDataMapper.java

@@ -0,0 +1,18 @@
+package cn.start.tz.module.pressure2.dal.mysql.standardfile;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.TemplateInitDataDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 标准模版字段初始化 Mapper
+ *
+ * @author yck
+ */
+@Mapper
+public interface TemplateInitDataMapper extends BaseMapperX<TemplateInitDataDO> {
+
+
+}

+ 23 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java

@@ -28,6 +28,7 @@ import cn.start.tz.module.member.api.templatesendlog.dto.TemplateSendLogRespDto;
 import cn.start.tz.module.member.api.user.MemberUserApi;
 import cn.start.tz.module.member.api.user.dto.MemberUserRespDTO;
 import cn.start.tz.module.pressure2.constant.TemplateIdConstants;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitempart.vo.BoilerTaskOrderItemPartSaveReqVO;
 import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerDeleteTask;
 import cn.start.tz.module.pressure2.dal.dataobject.businessmemberrelation.BusinessMemberRelationDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
@@ -141,6 +142,8 @@ import cn.start.tz.module.pressure2.util.*;
 import cn.start.tz.module.system.api.clientunit.ClientUnitApi;
 import cn.start.tz.module.system.api.clientunit.dto.ClientUnitDTO;
 import cn.start.tz.module.system.api.dept.DeptApi;
+import cn.start.tz.module.system.api.dict.DictDataApi;
+import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
 import cn.start.tz.module.system.api.orgcontact.OrgContactApi;
 import cn.start.tz.module.system.api.orgcontact.dto.OrgContactDTO;
 import cn.start.tz.module.system.api.standard.StandardTemplateApi;
@@ -417,6 +420,10 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
     @Resource
     private MemberUserApi memberUserApi;
 
+    @Resource
+    private DictDataApi dictDataApi;
+
+
     @Resource
     private TemplateSendLogApi templateSendLogApi;
 
@@ -691,8 +698,24 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         }
 
         List<BoilerTaskOrderItemDO> orderItemDOS = boilerTaskOrderItemMapper.selectList(new LambdaUpdateWrapper<BoilerTaskOrderItemDO>().eq(BoilerTaskOrderItemDO::getOrderId, taskOrderConfirmVO.getId()));
+        List<DictDataRespDTO> boilerPartType = dictDataApi.getDictDataList("pressure2_boiler_part_type").getCheckedData();
         orderItemDOS.forEach(item -> {
             checkAddReport(item.getId(), taskOrderDO);
+            // 电站锅炉内检需带出所有部件信息
+            if (taskOrderDO.getCheckType() == 100 && "1".equals(item.getBoilerType())) {
+                long count = boilerTaskOrderItemPartMapper.selectCount(BoilerTaskOrderItemPartDO::getOrderItemId, item.getId());
+                if (count == 0) {
+                    return;
+                }
+                boilerPartType.forEach(partType -> {
+                    BoilerTaskOrderItemPartSaveReqVO boilerTaskOrderItemPartSaveReqVO = new BoilerTaskOrderItemPartSaveReqVO();
+                    boilerTaskOrderItemPartSaveReqVO.setOrderId(item.getOrderId());
+                    boilerTaskOrderItemPartSaveReqVO.setOrderItemId(item.getId());
+                    boilerTaskOrderItemPartSaveReqVO.setPartName(partType.getLabel());
+                    boilerTaskOrderItemPartSaveReqVO.setPartType(partType.getValue());
+                    boilerTaskOrderItemPartService.createBoilerTaskOrderItemPart(boilerTaskOrderItemPartSaveReqVO);
+                });
+            }
         });
     }
 

+ 81 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equipboilerscheduling/EquipBoilerSchedulingServiceImpl.java

@@ -6,6 +6,8 @@ import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.ip.core.Area;
 import cn.start.tz.framework.ip.core.utils.AreaUtils;
 import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.AppointmentSubmitVO;
+import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.SubmitTeamItemVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilerappointmentconfirmorderitem.BoilerAppointmentConfirmOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilerappointmentconfirmorderuser.BoilerAppointmentConfirmOrderUserDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilerconnectrecordreport.BoilerConnectRecordReportDO;
@@ -25,6 +27,7 @@ import cn.start.tz.module.pressure2.dal.mysql.equipboilerschedulingitem.EquipBoi
 import cn.start.tz.module.pressure2.dal.mysql.equipboilerschedulingitem.EquipBoilerSchedulingFeeMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboilerschedulingitem.EquipBoilerSchedulingItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboilerschedulinguser.EquipBoilerSchedulingUserMapper;
+import cn.start.tz.module.pressure2.service.acceptorder.AcceptOrderService;
 import cn.start.tz.module.pressure2.service.appointmentconfirmorder.AppointmentConfirmOrderService;
 import cn.start.tz.module.pressure2.service.equipboilerschedulingcheck.EquipBoilerSchedulingCheckService;
 import cn.start.tz.module.pressure2.service.equipboilerschedulingitem.EquipBoilerSchedulingItemService;
@@ -250,6 +253,7 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
             task.setPlanDate(taskVO.getDate());
             task.setType(taskVO.getType());
             task.setSource(source);
+            task.setHasOrderConfirm(taskVO.getHasOrderConfirm() == null || taskVO.getHasOrderConfirm());
             if(!equipIdList.isEmpty()){
                 equipBoilerSchedulingRecordMapper.insert(task);
                 allList.add(task);
@@ -683,6 +687,11 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
             appointmentConfirmOrderDO.setActualAmount(equipBoilerSchedulingFeeDO.getActualAmount());
             appointmentConfirmOrderDO.setFeeNature(equipBoilerSchedulingFeeDO.getFeeNature());
 
+            // 不需要前台约检确认
+            if (!schedulingDO.getHasOrderConfirm()){
+                appointmentConfirmOrderDO.setStatus(200);
+            }
+
             // 创建约检确认单
             String confirmOrderId = appointmentConfirmOrderService.create(appointmentConfirmOrderDO);
 
@@ -742,6 +751,78 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
                 equipBoilerSchedulingCheckMapper.updateById(item);
             });
 
+
+            // 不需要前台约检确认,自动生成受理单
+            if (!schedulingDO.getHasOrderConfirm()){
+                AppointmentSubmitVO submitVO = new AppointmentSubmitVO();
+                submitVO.setId(appointmentConfirmOrderDO.getId());
+                submitVO.setCheckType(appointmentConfirmOrderDO.getCheckType());
+                submitVO.setAppointmentDate(appointmentConfirmOrderDO.getAppointmentDate());
+
+                // 构建受理单人员列表
+                Map<String, SubmitTeamItemVO> teamMap = new HashMap<>();
+
+                equipBoilerSchedulingUserDOS.forEach(user -> {
+                    String groupTeamId = user.getGroupTeamId();
+                    SubmitTeamItemVO teamItem = teamMap.computeIfAbsent(groupTeamId, k -> {
+                        SubmitTeamItemVO item = new SubmitTeamItemVO();
+                        item.setGroupTeamId(groupTeamId);
+                        item.setUserIds(new ArrayList<>());
+                        return item;
+                    });
+
+                    if (user.getType() == 100) {
+                        teamItem.setLeaderId(user.getUserId());
+                    } else if (user.getType() == 200) {
+                        teamItem.getUserIds().add(user.getUserId());
+                    }
+                });
+
+                submitVO.setTeamList(new ArrayList<SubmitTeamItemVO>(teamMap.values()));
+
+                submitVO.setUnitName(appointmentConfirmOrderDO.getUnitName());
+                submitVO.setEquipDistrict(appointmentConfirmOrderDO.getEquipDistrict());
+                submitVO.setEquipStreet(appointmentConfirmOrderDO.getEquipStreet());
+                submitVO.setUnitContact(appointmentConfirmOrderDO.getUnitContact());
+                submitVO.setUnitCode(appointmentConfirmOrderDO.getUnitCode());
+                submitVO.setUnitAddress(appointmentConfirmOrderDO.getUnitAddress());
+                submitVO.setUnitPhone(appointmentConfirmOrderDO.getUnitPhone());
+                submitVO.setZipCode(appointmentConfirmOrderDO.getZipCode());
+                submitVO.setMobile(appointmentConfirmOrderDO.getMobile());
+                submitVO.setRemark(appointmentConfirmOrderDO.getRemark());
+                submitVO.setEmail(appointmentConfirmOrderDO.getEmail());
+                submitVO.setIsAttach(appointmentConfirmOrderDO.getIsAttach());
+                submitVO.setSendType(appointmentConfirmOrderDO.getSendType());
+                submitVO.setVehicle(appointmentConfirmOrderDO.getVehicle());
+                submitVO.setFeeType(appointmentConfirmOrderDO.getFeeType());
+                submitVO.setAcceptType(appointmentConfirmOrderDO.getAcceptType());
+                submitVO.setActualAmount(appointmentConfirmOrderDO.getActualAmount());
+                submitVO.setServiceAmount(appointmentConfirmOrderDO.getServiceAmount());
+                submitVO.setShouldAmount(appointmentConfirmOrderDO.getShouldAmount());
+                submitVO.setReduceFee(appointmentConfirmOrderDO.getReduceFee());
+                submitVO.setDeptId(appointmentConfirmOrderDO.getDeptId());
+                submitVO.setOperator(appointmentConfirmOrderDO.getOperator());
+                submitVO.setSocialCreditCode(appointmentConfirmOrderDO.getSocialCreditCode());
+                submitVO.setRecipient(appointmentConfirmOrderDO.getRecipient());
+                submitVO.setRecipientPhone(appointmentConfirmOrderDO.getRecipientPhone());
+                submitVO.setRecipientEmail(appointmentConfirmOrderDO.getRecipientEmail());
+                submitVO.setUseUnitName(appointmentConfirmOrderDO.getUseUnitName());
+                submitVO.setUseUnitSocialCreditCode(appointmentConfirmOrderDO.getUseUnitSocialCreditCode());
+                submitVO.setUseUnitAddress(appointmentConfirmOrderDO.getUseUnitAddress());
+                submitVO.setUseUnitZipcode(appointmentConfirmOrderDO.getUseUnitZipcode());
+                submitVO.setUseUnitContact(appointmentConfirmOrderDO.getUseUnitContact());
+                submitVO.setUseUnitPhone(appointmentConfirmOrderDO.getUseUnitPhone());
+                submitVO.setDeptPhone(appointmentConfirmOrderDO.getDeptPhone());
+                submitVO.setFeeNature(appointmentConfirmOrderDO.getFeeNature());
+                submitVO.setFeeDate(appointmentConfirmOrderDO.getFeeDate());
+                submitVO.setPayerContact(appointmentConfirmOrderDO.getPayerContact());
+                submitVO.setPayerContactName(appointmentConfirmOrderDO.getPayerContactName());
+                submitVO.setPayerMail(appointmentConfirmOrderDO.getPayerMail());
+                submitVO.setEquipType(appointmentConfirmOrderDO.getEquipType());
+                submitVO.setEquipMainType(200);
+                submitVO.setEquipIds(equipIds);
+                appointmentConfirmOrderService.submit(submitVO);
+            }
         }
 
     }

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equippipescheduling/EquipPipeSchedulingService.java

@@ -77,4 +77,10 @@ public interface EquipPipeSchedulingService extends IService<EquipPipeScheduling
     PageResult<EquipPipeSchedulingPipesDetailRespVO> getEquipBoilerSchedulingPipesDetail(String id, EquipPipeSchedulingPageReqVO notTaskId);
 
     PageResult<EquipPipeSchedulingPipesDetailRespVO> getEquipBoilerSchedulingDetail(String id, String orderId);
+
+    PageResult<EquipPipePlanSchedulingPageVO> getEquipPipeSchedulingPagePipe(EquipPipeSchedulingPageReqVO pageReqVO);
+
+    List<PipeShiftScheduleRespVO> shiftSchedule(@Valid PipeShiftScheduleReqVO pageReqVO);
+
+    void setShiftSchedule(@Valid List<PipeShiftScheduleRespVO> pipeShiftScheduleRespVOS);
 }

+ 248 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/equippipescheduling/EquipPipeSchedulingServiceImpl.java

@@ -1,10 +1,14 @@
 package cn.start.tz.module.pressure2.service.equippipescheduling;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.ip.core.Area;
 import cn.start.tz.framework.ip.core.utils.AreaUtils;
 import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.AppointmentSubmitVO;
+import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.PipeAppointmentSubmitVO;
+import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.SubmitTeamItemVO;
 import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.*;
 import cn.start.tz.module.pressure2.dal.dataobject.appointmentconfirmorder.AppointmentConfirmOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
@@ -29,6 +33,7 @@ import cn.start.tz.module.pressure2.dal.mysql.pipeappointmentconfirmorderitem.Pi
 import cn.start.tz.module.pressure2.dal.mysql.pipeappointmentconfirmorderitemdetail.PipeAppointmentConfirmOrderItemDetailMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipeappointmentconfirmorderuser.PipeAppointmentConfirmOrderUserMapper;
 import cn.start.tz.module.pressure2.service.appointmentconfirmorder.AppointmentConfirmOrderService;
+import cn.start.tz.module.pressure2.service.appointmentconfirmorder.PipeAppointmentConfirmOrderService;
 import cn.start.tz.module.pressure2.service.equippipeschedulingcheck.EquipPipeSchedulingCheckService;
 import cn.start.tz.module.pressure2.service.equippipeschedulingitem.EquipPipeSchedulingItemService;
 import cn.start.tz.module.pressure2.util.MapUtils;
@@ -109,6 +114,10 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
     @Lazy
     private AppointmentConfirmOrderService appointmentConfirmOrderService;
 
+    @Resource
+    @Lazy
+    private PipeAppointmentConfirmOrderService pipeAppointmentConfirmOrderServiceImpl;
+
     @Resource
     private EquipPipeSchedulingCheckService equipPipeSchedulingCheckService;
 
@@ -283,6 +292,7 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
             task.setPlanDate(taskVO.getDate());
             task.setType(taskVO.getType());
             task.setSource(source);
+            task.setHasOrderConfirm(taskVO.getHasOrderConfirm() == null || taskVO.getHasOrderConfirm());
             if(!equipIdList.isEmpty()){
                 equipPipeSchedulingMapper.insert(task);
                 allList.add(task);
@@ -655,6 +665,9 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
 
             appointmentConfirmOrderDO.setUnitName(equipPipeDO.getUnitName());
             appointmentConfirmOrderDO.setStatus(100);
+            if (!schedulingDO.getHasOrderConfirm()){
+                appointmentConfirmOrderDO.setStatus(200);
+            }
             appointmentConfirmOrderDO.setSendType(100);
             LocalDate warningDate = LocalDate.now().plusDays(30);
             appointmentConfirmOrderDO.setWarningDate(warningDate);
@@ -746,6 +759,59 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
                 equipPipeSchedulingCheckMapper.updateById(item);
             });
 
+
+            // 不需要前台约检确认,自动生成受理单
+            if (!schedulingDO.getHasOrderConfirm()){
+                PipeAppointmentSubmitVO submitVO = new PipeAppointmentSubmitVO();
+                submitVO.setId(appointmentConfirmOrderDO.getId());
+                submitVO.setCheckType(appointmentConfirmOrderDO.getCheckType());
+                submitVO.setAppointmentDate(appointmentConfirmOrderDO.getAppointmentDate());
+
+                // 构建受理单人员列表
+                submitVO.setUserList(equipBoilerSchedulingUserDOS.stream().map(EquipPipeSchedulingUserDO::getUserId).toList());
+                submitVO.setUnitName(appointmentConfirmOrderDO.getUnitName());
+                submitVO.setEquipDistrict(appointmentConfirmOrderDO.getEquipDistrict());
+                submitVO.setEquipStreet(appointmentConfirmOrderDO.getEquipStreet());
+                submitVO.setUnitContact(appointmentConfirmOrderDO.getUnitContact());
+                submitVO.setUnitCode(appointmentConfirmOrderDO.getUnitCode());
+                submitVO.setUnitAddress(appointmentConfirmOrderDO.getUnitAddress());
+                submitVO.setUnitPhone(appointmentConfirmOrderDO.getUnitPhone());
+                submitVO.setZipCode(appointmentConfirmOrderDO.getZipCode());
+                submitVO.setMobile(appointmentConfirmOrderDO.getMobile());
+                submitVO.setRemark(appointmentConfirmOrderDO.getRemark());
+                submitVO.setEmail(appointmentConfirmOrderDO.getEmail());
+                submitVO.setIsAttach(appointmentConfirmOrderDO.getIsAttach());
+                submitVO.setSendType(appointmentConfirmOrderDO.getSendType());
+                submitVO.setVehicle(appointmentConfirmOrderDO.getVehicle());
+                submitVO.setFeeType(appointmentConfirmOrderDO.getFeeType());
+                submitVO.setAcceptType(appointmentConfirmOrderDO.getAcceptType());
+                submitVO.setActualAmount(appointmentConfirmOrderDO.getActualAmount());
+                submitVO.setServiceAmount(appointmentConfirmOrderDO.getServiceAmount());
+                submitVO.setShouldAmount(appointmentConfirmOrderDO.getShouldAmount());
+                submitVO.setReduceFee(appointmentConfirmOrderDO.getReduceFee());
+                submitVO.setDeptId(appointmentConfirmOrderDO.getDeptId());
+                submitVO.setOperator(appointmentConfirmOrderDO.getOperator());
+                submitVO.setSocialCreditCode(appointmentConfirmOrderDO.getSocialCreditCode());
+                submitVO.setRecipient(appointmentConfirmOrderDO.getRecipient());
+                submitVO.setRecipientPhone(appointmentConfirmOrderDO.getRecipientPhone());
+                submitVO.setRecipientEmail(appointmentConfirmOrderDO.getRecipientEmail());
+                submitVO.setUseUnitName(appointmentConfirmOrderDO.getUseUnitName());
+                submitVO.setUseUnitSocialCreditCode(appointmentConfirmOrderDO.getUseUnitSocialCreditCode());
+                submitVO.setUseUnitAddress(appointmentConfirmOrderDO.getUseUnitAddress());
+                submitVO.setUseUnitZipcode(appointmentConfirmOrderDO.getUseUnitZipcode());
+                submitVO.setUseUnitContact(appointmentConfirmOrderDO.getUseUnitContact());
+                submitVO.setUseUnitPhone(appointmentConfirmOrderDO.getUseUnitPhone());
+                submitVO.setDeptPhone(appointmentConfirmOrderDO.getDeptPhone());
+                submitVO.setFeeNature(appointmentConfirmOrderDO.getFeeNature());
+                submitVO.setFeeDate(appointmentConfirmOrderDO.getFeeDate());
+                submitVO.setPayerContact(appointmentConfirmOrderDO.getPayerContact());
+                submitVO.setPayerContactName(appointmentConfirmOrderDO.getPayerContactName());
+                submitVO.setPayerMail(appointmentConfirmOrderDO.getPayerMail());
+                submitVO.setEquipType(appointmentConfirmOrderDO.getEquipType());
+                submitVO.setEquipMainType(300);
+                submitVO.setEquipIds(equipIds);
+                pipeAppointmentConfirmOrderServiceImpl.submit(submitVO);
+            }
         }
     }
 
@@ -934,6 +1000,188 @@ public class EquipPipeSchedulingServiceImpl extends ServiceImpl<EquipPipeSchedul
         return pageResult;
     }
 
+    @Override
+    public PageResult<EquipPipePlanSchedulingPageVO> getEquipPipeSchedulingPagePipe(EquipPipeSchedulingPageReqVO pageReqVO) {
+        PageResult<EquipPipePlanSchedulingPageVO> pageResult = new PageResult<>();
+        List<EquipPipePlanSchedulingPageVO> list = equipPipeSchedulingMapper.selectPlanPagePipe(pageReqVO);
+        Long count = equipPipeSchedulingMapper.selectPlanPagePipeCount(pageReqVO);
+
+        if(!list.isEmpty()){
+            list.forEach((item)-> {
+                Area area = AreaUtils.getArea(item.getEquipStreet());
+                if (area != null) {
+                    item.setEquipStreetName(area.getName());
+                }
+
+                area = AreaUtils.getArea(item.getEquipDistrict());
+                if (area != null) {
+                    item.setEquipDistrictName(area.getName());
+                }
+            });
+
+            List<String> ids = list.stream().map(EquipPipePlanSchedulingPageVO::getId).toList();
+            EquipPipePlanProjectReqVO equipPipePlanProjectReqVO = new EquipPipePlanProjectReqVO();
+            equipPipePlanProjectReqVO.setIds(ids);
+            List<EquipPipePlanSchedulingVO> equipPipePlanSchedulingVOS = equipPipeSchedulingMapper.selectPlanPageGroupProject(equipPipePlanProjectReqVO);
+            if (equipPipePlanSchedulingVOS != null && !equipPipePlanSchedulingVOS.isEmpty()) {
+                Map<String, EquipPipePlanSchedulingPageVO> idToPageVOMap = list.stream()
+                        .filter(item -> item != null && item.getId() != null)
+                        .collect(Collectors.toMap(
+                                EquipPipePlanSchedulingPageVO::getId,
+                                item -> item,
+                                (existing, replacement) -> existing
+                        ));
+
+                for (EquipPipePlanSchedulingVO equipPipePlanSchedulingVO : equipPipePlanSchedulingVOS) {
+                    if (equipPipePlanSchedulingVO == null || equipPipePlanSchedulingVO.getEquipPipeId() == null) {
+                        continue;
+                    }
+
+                    EquipPipePlanSchedulingPageVO equipPipePlanSchedulingPageVO = idToPageVOMap.get(equipPipePlanSchedulingVO.getEquipPipeId());
+                    if (equipPipePlanSchedulingPageVO != null) {
+                        equipPipePlanSchedulingPageVO.getPipes().add(equipPipePlanSchedulingVO);
+                        equipPipePlanSchedulingPageVO.setPipeCount(equipPipePlanSchedulingPageVO.getPipes().size());
+                    }
+                }
+            }
+        }
+        pageResult.setList(list);
+        pageResult.setTotal(count);
+
+        return pageResult;
+
+    }
+
+    @Override
+    public List<PipeShiftScheduleRespVO> shiftSchedule(PipeShiftScheduleReqVO pageReqVO) {
+        List<PipeShiftScheduleRespVO.PipeShiftScheduleItemRespVO>  pipeShiftScheduleItemRespVOS = equipPipeSchedulingMapper.selectShiftSchedule(pageReqVO);
+
+        List<PipeShiftScheduleRespVO>  list = new ArrayList<>();
+        if(pipeShiftScheduleItemRespVOS == null || pipeShiftScheduleItemRespVOS.isEmpty()){
+            return list;
+        }
+
+        // 根据taskId 分组
+        Map<String, List<PipeShiftScheduleRespVO.PipeShiftScheduleItemRespVO>> taskIdToPipeShiftScheduleItemRespVOS = pipeShiftScheduleItemRespVOS.stream().collect(Collectors.groupingBy(PipeShiftScheduleRespVO.PipeShiftScheduleItemRespVO::getTaskId));
+        taskIdToPipeShiftScheduleItemRespVOS.forEach((taskId, scheduleItemRespVOS)->{
+            PipeShiftScheduleRespVO pipeShiftScheduleRespVO = new PipeShiftScheduleRespVO();
+            pipeShiftScheduleRespVO.setId(taskId);
+            pipeShiftScheduleRespVO.setStatus(100);
+            PipeShiftScheduleRespVO.PipeShiftScheduleItemRespVO pipeShiftScheduleItemRespVO = scheduleItemRespVOS.get(0);
+            pipeShiftScheduleRespVO.setDate(pipeShiftScheduleItemRespVO.getPlanDate());
+            if (pipeShiftScheduleItemRespVO.getAppointmentId() != null){
+                pipeShiftScheduleRespVO.setStatus(200);
+                if (pipeShiftScheduleItemRespVO.getAcceptStatus() != null){
+                    pipeShiftScheduleRespVO.setStatus(300);
+                    if (pipeShiftScheduleItemRespVO.getTaskStatus() != null){
+                        pipeShiftScheduleRespVO.setStatus(400);
+                    }
+                }
+            }
+
+            List<EquipPipeSchedulingUserDO> equipPipeSchedulingUserDOS = equipPipeSchedulingUserMapper.selectList(EquipPipeSchedulingUserDO::getSchedulingId, taskId);
+            pipeShiftScheduleRespVO.setCheckers(equipPipeSchedulingUserDOS.stream().map(EquipPipeSchedulingUserDO::getUserId).toList());
+
+            scheduleItemRespVOS.forEach((item)-> {
+                Area area = AreaUtils.getArea(item.getEquipStreet());
+                if (area != null) {
+                    item.setEquipStreetName(area.getName());
+                }
+
+                area = AreaUtils.getArea(item.getEquipDistrict());
+                if (area != null) {
+                    item.setEquipDistrictName(area.getName());
+                }
+            });
+            pipeShiftScheduleRespVO.setTaskItems(scheduleItemRespVOS);
+
+            List<EquipPipeSchedulingItemDetailDO> equipPipeSchedulingItemDetailDOS = equipPipeSchedulingItemDetailMapper.selectList(EquipPipeSchedulingItemDetailDO::getSchedulingId, taskId);
+            List<String> equipDetailIds = equipPipeSchedulingItemDetailDOS.stream().map(EquipPipeSchedulingItemDetailDO::getEquipDetailId).toList();
+            List<EquipPipeDetailDO> equipPipeDetailDOS = equipPipeDetailMapper.selectByIds(equipDetailIds);
+            List<String> pipeMediums = equipPipeDetailDOS.stream().map(EquipPipeDetailDO::getPipeMedium).toList();
+            pipeShiftScheduleRespVO.setPipeMedium(pipeMediums);
+            list.add(pipeShiftScheduleRespVO);
+        });
+
+        if (pageReqVO.getStatus() != null){
+            return list.stream().filter(item -> Objects.equals(item.getStatus(), pageReqVO.getStatus())).toList();
+        }
+        return list;
+    }
+
+    @Override
+    public void setShiftSchedule(List<PipeShiftScheduleRespVO> pipeShiftScheduleRespVOS) {
+        for (PipeShiftScheduleRespVO pipeShiftScheduleRespVO : pipeShiftScheduleRespVOS) {
+            String id = pipeShiftScheduleRespVO.getId();
+            EquipPipeSchedulingDO equipPipeSchedulingDO = equipPipeSchedulingMapper.selectById(id);
+            equipPipeSchedulingDO.setPlanDate(pipeShiftScheduleRespVO.getDate());
+            equipPipeSchedulingMapper.updateById(equipPipeSchedulingDO);
+            List<EquipPipeSchedulingUserDO> equipPipeSchedulingUserDOS = equipPipeSchedulingUserMapper.selectList(EquipPipeSchedulingUserDO::getSchedulingId, id);
+            List<String> checkers = new ArrayList<>(pipeShiftScheduleRespVO.getCheckers());
+
+            // 需要删除
+            List<String> deleteIds = equipPipeSchedulingUserDOS.stream().filter(item -> {
+                // 已经存在
+                if (checkers.contains(item.getUserId())) {
+                    checkers.remove(item.getUserId());
+                    return false;
+                } else {
+                    return true;
+                }
+            }).map(EquipPipeSchedulingUserDO::getId).toList();
+            if (!deleteIds.isEmpty()) {
+                equipPipeSchedulingUserMapper.deleteByIds(deleteIds);
+            }
+
+            // 需要新增的
+            List<EquipPipeSchedulingUserDO> list = checkers.stream().map(userId -> EquipPipeSchedulingUserDO.builder()
+                    .schedulingId(id)
+                    .userId(userId)
+                    .build()).toList();
+            if (!list.isEmpty()) {
+                equipPipeSchedulingUserMapper.insertBatch(list);
+            }
+
+
+            // 修改约检确认单
+            if (pipeShiftScheduleRespVO.getStatus() == 200) {
+                AppointmentConfirmOrderDO appointmentConfirmOrderDO = appointmentConfirmOrderMapper.selectOne(AppointmentConfirmOrderDO::getSchedulingId, id);
+                if (appointmentConfirmOrderDO != null) {
+                    appointmentConfirmOrderDO.setAppointmentDate(pipeShiftScheduleRespVO.getDate());
+                    appointmentConfirmOrderMapper.updateById(appointmentConfirmOrderDO);
+
+                    List<PipeAppointmentConfirmOrderUserDO> pipeAppointmentConfirmOrderUserDOS = appointmentConfirmOrderUserMapper.selectList(PipeAppointmentConfirmOrderUserDO::getOrderId, appointmentConfirmOrderDO.getId());
+                    List<String> confirmCheckers = new ArrayList<>(pipeShiftScheduleRespVO.getCheckers());
+
+                    // 删除不在检验员列表中的用户
+                    List<String> confirmDeleteIds = pipeAppointmentConfirmOrderUserDOS.stream()
+                            .filter(item -> !confirmCheckers.contains(item.getUserId()))
+                            .map(PipeAppointmentConfirmOrderUserDO::getId)
+                            .toList();
+                    if (!confirmDeleteIds.isEmpty()) {
+                        appointmentConfirmOrderUserMapper.deleteByIds(confirmDeleteIds);
+                    }
+
+                    // 新增检验员列表中不存在的用户
+                    List<String> existingUserIds = pipeAppointmentConfirmOrderUserDOS.stream()
+                            .map(PipeAppointmentConfirmOrderUserDO::getUserId)
+                            .toList();
+                    List<PipeAppointmentConfirmOrderUserDO> insertList = confirmCheckers.stream()
+                            .filter(userId -> !existingUserIds.contains(userId))
+                            .map(userId -> PipeAppointmentConfirmOrderUserDO.builder()
+                                    .orderId(appointmentConfirmOrderDO.getId())
+                                    .userId(userId)
+                                    .build())
+                            .toList();
+                    if (!insertList.isEmpty()) {
+                        appointmentConfirmOrderUserMapper.insertBatch(insertList);
+                    }
+                }
+            }
+
+        }
+    }
+
     @Override
     public PipeTaskDetailsVO detail(String id) {
         List<EquipPipeSchedulingItemDO> equipContainerSchedulingItemDOS = equipPipeSchedulingItemMapper.selectList(EquipPipeSchedulingItemDO::getSchedulingId, id);

+ 18 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardClassService.java

@@ -0,0 +1,18 @@
+package cn.start.tz.module.pressure2.service.standardfile;
+
+
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardClassDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 标准分类 Service 接口
+ *
+ * @author yck
+ */
+public interface StandardClassService extends IService<StandardClassDO> {
+
+}

+ 36 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardClassServiceImpl.java

@@ -0,0 +1,36 @@
+package cn.start.tz.module.pressure2.service.standardfile;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.framework.security.core.util.SecurityFrameworkUtils;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardClassDO;
+import cn.start.tz.module.pressure2.dal.mysql.standardfile.StandardClassMapper;
+import cn.start.tz.module.system.enums.common.CommonConstants;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import jakarta.annotation.Resource;
+import jodd.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception0;
+import static cn.start.tz.module.system.enums.ErrorCodeConstants.*;
+
+/**
+ * 标准分类 Service 实现类
+ *
+ * @author yck
+ */
+@Slf4j
+@Service
+@Validated
+public class StandardClassServiceImpl extends ServiceImpl<StandardClassMapper, StandardClassDO> implements StandardClassService {
+
+}

+ 37 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateService.java

@@ -0,0 +1,37 @@
+package cn.start.tz.module.pressure2.service.standardfile;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardTemplateRespVO;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardTemplateSaveReqVO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateDO;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 标准模版 Service 接口
+ *
+ * @author yck
+ */
+public interface StandardTemplateService extends IService<StandardTemplateDO> {
+
+    /**
+     * 创建标准模版
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    String createStandardTemplate(@Valid StandardTemplateSaveReqVO createReqVO) throws IOException;
+
+    /**
+     * 更新标准模版
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateStandardTemplate(@Valid StandardTemplateSaveReqVO updateReqVO) throws Exception;
+
+    StandardTemplateRespVO getStandardTemplateVOV2(String id);
+  }

+ 270 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateServiceImpl.java

@@ -0,0 +1,270 @@
+package cn.start.tz.module.pressure2.service.standardfile;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.start.tz.framework.common.exception.ErrorCode;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.util.json.JsonUtils;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.framework.security.core.util.SecurityFrameworkUtils;
+import cn.start.tz.module.infra.api.config.ConfigApi;
+import cn.start.tz.module.infra.api.file.FileApi;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardClassRespVO;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardTemplateRespVO;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardTemplateSaveReqVO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateClassDO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateDO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateVersionDO;
+import cn.start.tz.module.pressure2.dal.mysql.standardfile.StandardTemplateMapper;
+import cn.start.tz.module.pressure2.service.standardtemplateclass.StandardTemplateClassService;
+import cn.start.tz.module.pressure2.service.templateinitdata.TemplateInitDataService;
+import cn.start.tz.module.system.api.user.AdminUserApi;
+import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
+import cn.start.tz.module.system.enums.TemplateInitDataEnums;
+import cn.start.tz.module.system.enums.standard.StandardTemplateApprovalStatusEnum;
+import cn.start.tz.module.system.enums.standard.StandardTemplateStatusEnum;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import jakarta.annotation.Resource;
+import jodd.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static cn.start.tz.framework.common.exception.enums.GlobalErrorCodeConstants.CANNOT_BE_OPERATED;
+import static cn.start.tz.framework.common.exception.enums.GlobalErrorCodeConstants.TEMPLATE_NOT_EXISTS;
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception0;
+import static cn.start.tz.module.system.enums.ErrorCodeConstants.STANDARD_TEMPLATE_NOT_EXISTS;
+
+/**
+ * 标准模版 Service 实现类
+ *
+ * @author yck
+ */
+@Slf4j
+@Service
+@Validated
+public class StandardTemplateServiceImpl extends ServiceImpl<StandardTemplateMapper, StandardTemplateDO> implements StandardTemplateService {
+
+    @Resource
+    private StandardTemplateMapper standardTemplateMapper;
+
+
+    @Resource
+    private FileApi fileApi;
+    @Resource
+    private ConfigApi configApi;
+
+
+    @Resource
+    private TemplateInitDataService templateInitDataService;
+    @Resource
+    private AdminUserApi adminUserApi;
+
+    @Resource
+    private StandardTemplateVersionService standardTemplateVersionService;
+
+    @Resource
+    private StandardTemplateClassService standardTemplateClassService;
+
+    @Override
+    public String createStandardTemplate(StandardTemplateSaveReqVO createReqVO) throws IOException {
+        // 插入
+        StandardTemplateDO standardTemplate = BeanUtils.toBean(createReqVO, StandardTemplateDO.class);
+        if (createReqVO.getFile() != null) {
+            // 存储文件
+            String fileUrl = fileApi.createFile(null, null, IoUtil.readBytes(createReqVO.getFile().getInputStream()));
+            standardTemplate.setFileUrl(fileUrl);
+        }
+        if (standardTemplate.getId() != null) {
+            if (standardTemplateMapper.selectById(standardTemplate.getId()) != null) {
+                throw exception( new ErrorCode(904, "重复新增,退出重新进入"));
+            }
+        }
+        standardTemplateMapper.insert(standardTemplate);
+        if (CollUtil.isNotEmpty(createReqVO.getClassIds())) {
+            List<StandardTemplateClassDO> templateClassDOList = new ArrayList<>();
+            List<String> classIds = createReqVO.getClassIds();
+            for (String classId : classIds) {
+                StandardTemplateClassDO templateClassDO = new StandardTemplateClassDO();
+                templateClassDO.setClassId(classId);
+                templateClassDO.setTemplateId(standardTemplate.getId());
+                templateClassDOList.add(templateClassDO);
+            }
+            standardTemplateClassService.saveBatch(templateClassDOList);
+        }
+
+        // 返回
+        return standardTemplate.getId();
+    }
+
+    @Override
+    @Transactional
+    public void updateStandardTemplate(StandardTemplateSaveReqVO updateReqVO) throws Exception {
+        // 更新
+        StandardTemplateDO updateObj = BeanUtils.toBean(updateReqVO, StandardTemplateDO.class);
+
+        if (updateReqVO.getFile() != null) {
+            // 存储文件
+            String fileUrl = fileApi.createFile(null, null,
+                    IoUtil.readBytes(updateReqVO.getFile().getInputStream()));
+            updateObj.setFileUrl(fileUrl);
+
+        }
+        standardTemplateMapper.updateById(updateObj);
+
+        if (CollUtil.isNotEmpty(updateReqVO.getClassIds())) {
+            // 1. 获取当前模板已关联的类别ID集合
+            List<String> existingClassIds = standardTemplateClassService
+                    .list(new LambdaQueryWrapperX<StandardTemplateClassDO>()
+                            .eq(StandardTemplateClassDO::getTemplateId, updateObj.getId()))
+                    .stream()
+                    .map(StandardTemplateClassDO::getClassId)
+                    .toList();
+
+            // 2. 提取需要更新的类别ID集合
+            List<String> newClassIds = updateReqVO.getClassIds();
+
+            // 3. 计算需要删除的类别ID(存在于数据库但不在新列表中)
+            List<String> toDeleteIds = existingClassIds.stream()
+                    .filter(id -> !newClassIds.contains(id))
+                    .collect(Collectors.toList());
+
+            // 4. 计算需要新增的类别ID(存在于新列表但不在数据库中)
+            List<StandardTemplateClassDO> toAddList = newClassIds.stream()
+                    .filter(id -> !existingClassIds.contains(id))
+                    .map(id -> {
+                        StandardTemplateClassDO item = new StandardTemplateClassDO();
+                        item.setClassId(id);
+                        item.setTemplateId(updateObj.getId());
+                        return item;
+                    })
+                    .collect(Collectors.toList());
+
+            // 5. 执行批量操作
+            if (CollUtil.isNotEmpty(toDeleteIds)) {
+                standardTemplateClassService.remove(new LambdaQueryWrapperX<StandardTemplateClassDO>()
+                        .eq(StandardTemplateClassDO::getTemplateId, updateObj.getId())
+                        .in(StandardTemplateClassDO::getClassId, toDeleteIds));
+            }
+
+            if (CollUtil.isNotEmpty(toAddList)) {
+                standardTemplateClassService.saveBatch(toAddList);
+            }
+        } else {
+            // 如果传入空列表,删除所有关联类别
+            standardTemplateClassService.remove(new LambdaQueryWrapperX<StandardTemplateClassDO>()
+                    .eq(StandardTemplateClassDO::getTemplateId, updateObj.getId()));
+        }
+
+
+
+        if (!standardTemplateVersionService.isVersionExist(updateObj.getId(), updateObj.getFileUrl())) {
+            // 新增模版版本
+            long count = standardTemplateVersionService.count(new LambdaQueryWrapperX<StandardTemplateVersionDO>()
+                    .eqIfPresent(StandardTemplateVersionDO::getTemplateId, updateObj.getId()));
+            StandardTemplateVersionDO versionDO = new StandardTemplateVersionDO();
+            versionDO.setTemplateId(updateObj.getId());
+            versionDO.setTemplateName(updateObj.getName());
+            versionDO.setFileUrl(updateObj.getFileUrl());
+            versionDO.setCreatorName(SecurityFrameworkUtils.getLoginUserNickname());
+            versionDO.setVersionNumber("v" + (count + 1));
+            standardTemplateVersionService.saveOrUpdate(versionDO);
+        }
+    }
+
+
+    public StandardTemplateDO getStandardTemplate(String id) {
+        return standardTemplateMapper.selectById(id);
+    }
+    public StandardTemplateRespVO getStandardTemplateVO(String id) {
+        StandardTemplateDO standardTemplate = this.getStandardTemplate(id);
+        StandardTemplateRespVO vo = BeanUtils.toBean(standardTemplate, StandardTemplateRespVO.class);
+        AdminUserRespDTO userRespDTO = adminUserApi.selectById(standardTemplate.getCreator());
+        vo.setCreatorName(userRespDTO.getNickname());
+        String bindingPathSchema = vo.getBindingPathSchema();
+        String standardInitData = templateInitDataService.getStandardInitData(Lists.newArrayList(TemplateInitDataEnums.ClassificationEnum.GLOBAL.getKey(),
+                TemplateInitDataEnums.ClassificationEnum.LABORATORY.getKey()));
+        if (StrUtil.isNotEmpty(bindingPathSchema) && JsonUtils.isJson(bindingPathSchema)) {
+            ObjectNode objectNode = JsonUtils.parseObject(bindingPathSchema, ObjectNode.class);
+            ObjectNode standardInitDataNode = JsonUtils.parseObject(standardInitData, ObjectNode.class);
+            if (objectNode != null && !objectNode.isEmpty()) {
+                JsonNode jsonNode = objectNode.get("properties");
+                ObjectNode mergedObject = (ObjectNode) jsonNode;
+                if (standardInitDataNode != null) {
+                    mergedObject.setAll((ObjectNode) standardInitDataNode.get("properties"));
+                }
+                vo.setBindingPathSchema(objectNode.toPrettyString());
+            } else {
+                vo.setBindingPathSchema(standardInitData);
+            }
+        } else {
+            vo.setBindingPathSchema(standardInitData);
+        }
+        String bindingPathNameJson = vo.getBindingPathNameJson();
+        String translateInitData = templateInitDataService.getTranslateInitData(Lists.newArrayList(
+                TemplateInitDataEnums.ClassificationEnum.GLOBAL.getKey(),
+                TemplateInitDataEnums.ClassificationEnum.LABORATORY.getKey()));
+        if (StrUtil.isNotEmpty(bindingPathNameJson) && JsonUtils.isJson(bindingPathNameJson)) {
+            // 去重逻辑实现
+            List<ObjectNode> arrayNodes = JsonUtils.parseArray(bindingPathNameJson, ObjectNode.class);
+
+            List<ObjectNode> translateInitNodes = JsonUtils.parseArray(translateInitData, ObjectNode.class);
+            if (arrayNodes != null && translateInitNodes != null) {
+                // 使用LinkedHashMap保持插入顺序
+                Map<String, ObjectNode> uniqueNodes = new LinkedHashMap<>();
+                // 添加第一批节点(保留原始顺序)
+                arrayNodes.forEach(node ->
+                        uniqueNodes.putIfAbsent(generateNodeKey(node), node));
+                // 添加第二批节点(避免重复)
+                translateInitNodes.forEach(node ->
+                        uniqueNodes.putIfAbsent(generateNodeKey(node), node));
+                // 转换为去重后的列表
+                List<ObjectNode> distinctList = uniqueNodes.values().stream().toList();
+                // 设置结果
+                vo.setBindingPathNameJson(distinctList.toString());
+            }
+        } else {
+            // 设置结果
+            vo.setBindingPathNameJson(translateInitData);
+        }
+        List<StandardClassRespVO> respVOList = standardTemplateClassService.listClassRespVO(id);
+        vo.setClassRespVOList(respVOList);
+        return vo;
+    }
+
+    @Override
+    public StandardTemplateRespVO getStandardTemplateVOV2(String id) {
+        StandardTemplateDO standardTemplate = this.getStandardTemplate(id);
+        if (standardTemplate == null) {
+            return null;
+        }
+        return this.getStandardTemplateVO(id);
+    }
+
+    private String generateNodeKey(ObjectNode node) {
+        try {
+            // field的值作为唯一键
+            return node.get("field").asText();
+        } catch (Exception e) {
+            // 备选方案:使用哈希值
+            return String.valueOf(Objects.hash(node));
+        }
+    }
+}

+ 19 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateVersionService.java

@@ -0,0 +1,19 @@
+package cn.start.tz.module.pressure2.service.standardfile;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateVersionDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+/**
+ * 标准模版版本 Service 接口
+ *
+ * @author yck
+ */
+public interface StandardTemplateVersionService extends IService<StandardTemplateVersionDO>  {
+
+    /**
+     * 判断版本是否存在
+     */
+    Boolean isVersionExist(String templateId, String fileUrl);
+}

+ 35 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardfile/StandardTemplateVersionServiceImpl.java

@@ -0,0 +1,35 @@
+package cn.start.tz.module.pressure2.service.standardfile;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateVersionDO;
+import cn.start.tz.module.pressure2.dal.mysql.standardfile.StandardTemplateVersionMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.start.tz.module.system.enums.ErrorCodeConstants.STANDARD_TEMPLATE_VERSION_NOT_EXISTS;
+
+/**
+ * 标准模版版本 Service 实现类
+ *
+ * @author yck
+ */
+@Service
+@Validated
+public class StandardTemplateVersionServiceImpl extends ServiceImpl<StandardTemplateVersionMapper, StandardTemplateVersionDO> implements StandardTemplateVersionService {
+
+    @Resource
+    private StandardTemplateVersionMapper standardTemplateVersionMapper;
+    @Override
+    public Boolean isVersionExist(String templateId, String fileUrl) {
+        LambdaQueryWrapperX<StandardTemplateVersionDO> queryWrapperX = new LambdaQueryWrapperX<StandardTemplateVersionDO>()
+                .eq(StandardTemplateVersionDO::getTemplateId, templateId)
+                .eq(StandardTemplateVersionDO::getFileUrl, fileUrl);
+        return this.exists(queryWrapperX);
+    }
+
+}

+ 27 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardtemplateclass/StandardTemplateClassService.java

@@ -0,0 +1,27 @@
+package cn.start.tz.module.pressure2.service.standardtemplateclass;
+
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardClassRespVO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateClassDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 标准模版分类关联表(一个模版关联多个分类) Service 接口
+ *
+ * @author 特种管理员
+ */
+public interface StandardTemplateClassService extends IService<StandardTemplateClassDO>  {
+
+
+    /**
+     * 查询模版关联的标准模版分类
+     *
+     * @param templateId 模版id
+     * @return
+     */
+    List<StandardClassRespVO> listClassRespVO(String templateId);
+
+}

+ 52 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/standardtemplateclass/StandardTemplateClassServiceImpl.java

@@ -0,0 +1,52 @@
+package cn.start.tz.module.pressure2.service.standardtemplateclass;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.controller.admin.standardfile.vo.StandardClassRespVO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardClassDO;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.StandardTemplateClassDO;
+import cn.start.tz.module.pressure2.dal.mysql.standardfile.StandardTemplateClassMapper;
+import cn.start.tz.module.pressure2.service.standardfile.StandardClassService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import jakarta.annotation.Resource;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 标准模版分类关联表(一个模版关联多个分类) Service 实现类
+ *
+ * @author 特种管理员
+ */
+@Service
+@Validated
+public class StandardTemplateClassServiceImpl extends ServiceImpl<StandardTemplateClassMapper, StandardTemplateClassDO> implements StandardTemplateClassService {
+
+    @Resource
+    private StandardTemplateClassMapper standardTemplateClassMapper;
+
+    @Resource
+    @Lazy
+    private StandardClassService standardClassService;
+
+    @Override
+    public List<StandardClassRespVO> listClassRespVO(String templateId) {
+        List<StandardTemplateClassDO> list = standardTemplateClassMapper.selectList(
+                new LambdaQueryWrapperX<StandardTemplateClassDO>()
+                        .eq(StandardTemplateClassDO::getTemplateId, templateId)
+        );
+        if (CollUtil.isNotEmpty(list)) {
+            Set<String> classIds = list.stream()
+                    .map(StandardTemplateClassDO::getClassId).collect(Collectors.toSet());
+            List<StandardClassDO> doList = standardClassService.listByIds(classIds);
+            return BeanUtils.toBean(doList, StandardClassRespVO.class);
+        }
+        return Lists.newArrayList();
+    }
+}

+ 33 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/templateinitdata/TemplateInitDataService.java

@@ -0,0 +1,33 @@
+package cn.start.tz.module.pressure2.service.templateinitdata;
+
+
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.TemplateInitDataDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 标准模版字段初始化 Service 接口
+ *
+ * @author yck
+ */
+public interface TemplateInitDataService extends IService<TemplateInitDataDO> {
+
+
+    /**
+     * 获取模版初始化数据
+     * @param classifications 字段分类列表
+     * @return 模版初始化数据
+     */
+    String getStandardInitData(List<String> classifications);
+
+    /**
+     * 获取模版初始化翻译数据
+     * @param classifications 字段分类列表
+     * @return 初始化翻译数据
+     */
+    String getTranslateInitData(List<String> classifications);
+
+
+
+}

+ 68 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/templateinitdata/TemplateInitDataServiceImpl.java

@@ -0,0 +1,68 @@
+package cn.start.tz.module.pressure2.service.templateinitdata;
+
+import cn.start.tz.framework.common.exception.enums.GlobalErrorCodeConstants;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.standardfile.TemplateInitDataDO;
+import cn.start.tz.module.pressure2.dal.mysql.standardfile.TemplateInitDataMapper;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception0;
+
+/**
+ * 标准模版字段初始化 Service 实现类
+ *
+ * @author yck
+ */
+@Service
+@Validated
+public class TemplateInitDataServiceImpl extends ServiceImpl<TemplateInitDataMapper, TemplateInitDataDO> implements TemplateInitDataService {
+
+    @Resource
+    private TemplateInitDataMapper templateInitDataMapper;
+
+
+    @Override
+    public String getStandardInitData(List<String> classifications) {
+        List<TemplateInitDataDO> initDataDOS = this.list(new LambdaQueryWrapperX<TemplateInitDataDO>()
+                .inIfPresent(TemplateInitDataDO::getClassification, classifications));
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("$schema", "http://json-schema.org/draft-04/schema#");
+        jsonObject.put("type", "object");
+        JSONObject properties = new JSONObject();
+        for (TemplateInitDataDO initDataDO : initDataDOS) {
+            JSONObject object = new JSONObject();
+            object.put("dataFieldType", "text");
+            object.put("type", "string");
+            properties.put(initDataDO.getCode(), object);
+        }
+        jsonObject.put("properties", properties);
+        return jsonObject.toJSONString();
+    }
+
+    @Override
+    public String getTranslateInitData(List<String> classifications) {
+        List<TemplateInitDataDO> initDataDOS = this.list(new LambdaQueryWrapperX<TemplateInitDataDO>()
+                .inIfPresent(TemplateInitDataDO::getClassification, classifications));
+        JSONArray properties = new JSONArray();
+        for (TemplateInitDataDO initDataDO : initDataDOS) {
+            JSONObject object = new JSONObject();
+            object.put("dataFieldType", "text");
+            object.put("type", "string");
+            object.put("field", initDataDO.getCode());
+            object.put("displayName", initDataDO.getName());
+            object.put("isVerify", "0");
+            properties.add(object);
+        }
+        return properties.toJSONString();
+    }
+
+}

+ 23 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equipboilerscheduling/EquipBoilerSchedulingMapper.xml

@@ -131,6 +131,29 @@
         group by eb.id
         ) a
         --WHERE a.count_in > 0 OR a.count_out > 0 OR a.count_pre > 0
+        <if test="sort != null and sort != ''">
+            <choose>
+                <when test="sort == 'nextInCheckDate'">
+                    order by NVL(a.NEXT_IN_CHECK_DATE,'1000-12-31')
+                </when>
+                <when test="sort == 'nextOutCheckDate'">
+                    order by NVL(a.NEXT_OUT_CHECK_DATE,'1000-12-31')
+                </when>
+                <when test="sort == 'nextPressureCheckDate'">
+                    order by NVL(a.NEXT_PRESSURE_CHECK_DATE,'1000-12-31')
+                </when>
+            </choose>
+            <if test="order != null and order != ''">
+                <choose>
+                    <when test="order == 'descending'">
+                        desc
+                    </when>
+                    <otherwise>
+                        asc
+                    </otherwise>
+                </choose>
+            </if>
+        </if>
         <if test="pageSize != -1">
             OFFSET ${(pageNo - 1) * pageSize} ROWS FETCH NEXT #{pageSize} ROWS ONLY
         </if>

+ 201 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipescheduling/EquipPipeSchedulingMapper.xml

@@ -27,7 +27,7 @@
         </if>
         THEN eb.id ELSE NULL END, ',' ON OVERFLOW TRUNCATE) AS legal_equip_ids
         ,LISTAGG(CASE WHEN eb.NEXT_YEAR_CHECK_DATE IS NOT NULL
-        AND eb.HAS_LEGAL_SCHEDULING = 0
+        AND eb.HAS_YEAR_SCHEDULING = 0
         <if test="nextDate != null and nextDate.size()>= 2">
             AND eb.NEXT_YEAR_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]}
         </if>
@@ -322,6 +322,169 @@
         WHERE a.count_legal > 0 OR a.count_year > 0
     </select>
 
+    <select id="selectPlanPagePipe">
+        select rownum,a.* from (
+        select eb.EQUIP_DISTRICT,eb.EQUIP_STREET,eb.UNIT_CODE,eb.UNIT_NAME
+        ,eb.PIPE_ADDRESS,eb.CONTACT,eb.CONTACT_PHONE,eb.UNIT_ID,eb.id
+        ,eb.PROJECT_NO,eb.PROJECT_NAME,eb.HAS_LEGAL_SCHEDULING,eb.HAS_YEAR_SCHEDULING
+        ,MIN(CASE WHEN eb.NEXT_LEGAL_CHECK_DATE IS NOT NULL
+        <if test="nextDate != null and nextDate.size()>= 2">
+            AND eb.NEXT_LEGAL_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]}
+        </if>
+        THEN eb.NEXT_LEGAL_CHECK_DATE ELSE NULL END
+        ) AS NEXT_LEGAL_CHECK_DATE
+        ,MIN(CASE WHEN eb.NEXT_YEAR_CHECK_DATE IS NOT NULL
+        <if test="nextDate != null and nextDate.size()>= 2">
+            AND eb.NEXT_YEAR_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]}
+        </if>
+        THEN eb.NEXT_YEAR_CHECK_DATE ELSE NULL END
+        ) AS NEXT_YEAR_CHECK_DATE
+        ,scheduling_info.plan_legal_checkdate
+        ,scheduling_info.plan_year_checkdate
+        from PRESSURE2_EQUIP_PIPE eb
+        LEFT JOIN (
+        SELECT
+        b.equip_id,
+        MAX(CASE WHEN s.type = 100 THEN s.PLAN_DATE END) AS plan_legal_checkdate,
+        MAX(CASE WHEN s.type = 200 THEN s.PLAN_DATE END) AS plan_year_checkdate
+        FROM PRESSURE2_EQUIP_PIPE_SCHEDULING s
+        INNER JOIN PRESSURE2_EQUIP_PIPE_SCHEDULING_ITEM b ON s.ID = b.SCHEDULING_ID
+        WHERE s.DELETED = 0 AND b.DELETED = 0 AND s.type IN (100, 200)
+        GROUP BY b.equip_id
+        ) scheduling_info ON eb.ID = scheduling_info.equip_id
+        <where>
+            eb.deleted = 0
+            <if test="unitName != null and unitName != ''">
+                AND eb.UNIT_NAME LIKE CONCAT('%',#{unitName},'%')
+            </if>
+            <if test="pipeAddress != null and pipeAddress != ''">
+                AND eb.PIPE_ADDRESS LIKE CONCAT('%',#{pipeAddress},'%')
+            </if>
+            <if test="relateDepartment != null and relateDepartment != ''">
+                AND eb.RELATION_DEPT = #{relateDepartment}
+            </if>
+            <if test="projectNo != null and projectNo != ''">
+                AND eb.PROJECT_NO LIKE CONCAT('%',#{projectNo},'%')
+            </if>
+            <if test="projectName != null and projectName != ''">
+                AND eb.PROJECT_NAME LIKE CONCAT('%',#{projectName},'%')
+            </if>
+            <if test="useStatus != null and useStatus.size() > 0">
+                AND eb.USE_STATUS IN
+                <foreach close=")" collection="useStatus" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+            <if test="equipStreet != null and equipStreet.size() > 0">
+                AND eb.EQUIP_STREET IN
+                <foreach close=")" collection="equipStreet" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+            <if test="equipDistrict != null and equipDistrict.size() > 0">
+                AND eb.EQUIP_DISTRICT IN
+                <foreach close=")" collection="equipDistrict" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+            <if test="nextDate != null and nextDate.size() >= 2">
+                AND (
+                (eb.NEXT_LEGAL_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]})
+                OR (eb.NEXT_YEAR_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]})
+                )
+            </if>
+            <if test="typeList != null and typeList.size() > 0">
+                AND eb.PIPE_CATEGORY IN
+                <foreach close=")" collection="typeList" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+        </where>
+        group by eb.id
+        ) a
+        --WHERE a.count_in > 0 OR a.count_out > 0 OR a.count_pre > 0
+        <if test="sort != null and sort != ''">
+            <choose>
+                <when test="sort == 'nextLegalCheckDate'">
+                    order by NVL(a.NEXT_LEGAL_CHECK_DATE,'1000-12-31')
+                </when>
+                <when test="sort == 'nextYearCheckDate'">
+                    order by NVL(a.NEXT_YEAR_CHECK_DATE,'1000-12-31')
+                </when>
+            </choose>
+            <if test="order != null and order != ''">
+                <choose>
+                    <when test="order == 'descending'">
+                        desc
+                    </when>
+                    <otherwise>
+                        asc
+                    </otherwise>
+                </choose>
+            </if>
+        </if>
+        <if test="pageSize != -1">
+            OFFSET ${(pageNo - 1) * pageSize} ROWS FETCH NEXT #{pageSize} ROWS ONLY
+        </if>
+    </select>
+
+    <select id="selectPlanPagePipeCount">
+        select count(*) from (
+        select eb.id
+        from PRESSURE2_EQUIP_PIPE eb
+        <where>
+            eb.deleted = 0
+            <if test="unitName != null and unitName != ''">
+                AND eb.UNIT_NAME LIKE CONCAT('%',#{unitName},'%')
+            </if>
+            <if test="pipeAddress != null and pipeAddress != ''">
+                AND eb.PIPE_ADDRESS LIKE CONCAT('%',#{pipeAddress},'%')
+            </if>
+            <if test="relateDepartment != null and relateDepartment != ''">
+                AND eb.RELATION_DEPT = #{relateDepartment}
+            </if>
+            <if test="projectNo != null and projectNo != ''">
+                AND eb.PROJECT_NO LIKE CONCAT('%',#{projectNo},'%')
+            </if>
+            <if test="projectName != null and projectName != ''">
+                AND eb.PROJECT_NAME LIKE CONCAT('%',#{projectName},'%')
+            </if>
+            <if test="useStatus != null and useStatus.size() > 0">
+                AND eb.USE_STATUS IN
+                <foreach close=")" collection="useStatus" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+            <if test="equipStreet != null and equipStreet.size() > 0">
+                AND eb.EQUIP_STREET IN
+                <foreach close=")" collection="equipStreet" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+            <if test="equipDistrict != null and equipDistrict.size() > 0">
+                AND eb.EQUIP_DISTRICT IN
+                <foreach close=")" collection="equipDistrict" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+            <if test="nextDate != null and nextDate.size() >= 2">
+                AND (
+                (eb.NEXT_LEGAL_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]})
+                OR (eb.NEXT_YEAR_CHECK_DATE BETWEEN #{nextDate[0]} AND #{nextDate[1]})
+                )
+            </if>
+            <if test="typeList != null and typeList.size() > 0">
+                AND eb.PIPE_CATEGORY IN
+                <foreach close=")" collection="typeList" item="listItem" open="(" separator=",">
+                    #{listItem}
+                </foreach>
+            </if>
+        </where>
+        group by eb.id
+        ) a
+    </select>
+
+
     <select id="selectPlanPageGroupProject">
         select ped.ID,ped.EQUIP_PIPE_ID,ped.PIPE_NO,ped.PIPE_NAME,ped.PIPE_REG_CODE,ped.PIPE_LENGTH,
         pe.PROJECT_NO,pe.PROJECT_NAME,pe.CONTACT,pe.CONTACT_PHONE,ped.HAS_LEGAL_SCHEDULING,ped.HAS_YEAR_SCHEDULING,
@@ -373,6 +536,43 @@
         group by b.unit_code,a.plan_date,a.type,a.ID
         order by b.unit_code
     </select>
+    <select id="selectShiftSchedule">
+        select a.ID task_id,a.TYPE check_type,b.unit_code,b.unit_name,b.unit_address,a.plan_date,count(distinct c.ID) equip_count,
+        b.equip_district,b.equip_street,a.source,FIRST_VALUE(b.lng) lng,FIRST_VALUE(b.lat) lat,
+        b.CONTACT,b.CONTACT_PHONE,b.PIPE_LENGTH_TOTAL,b.LAST_LEGAL_PERIODICAL_INSPECTION_REPORT_NO,b.LAST_YEAR_REPORT_NO,b.LAST_MAINTENANCE_REPORT_NO,
+        e.id APPOINTMENT_ID,f.id ACCEPT_ORDER_ID,f.STATUS accept_status, g.TASK_STATUS ,b.PIPE_ADDRESS
+        from PRESSURE2_EQUIP_PIPE_SCHEDULING a
+        inner join PRESSURE2_EQUIP_PIPE_SCHEDULING_ITEM c on c.SCHEDULING_ID = a.ID and c.DELETED = 0
+        inner join PRESSURE2_EQUIP_PIPE b on b.ID = c.equip_id and b.DELETED = 0
+        inner join PRESSURE2_EQUIP_PIPE_SCHEDULING_USER d on d.SCHEDULING_ID = a.ID and d.DELETED = 0
+        left join PRESSURE_APPOINTMENT_CONFIRM_ORDER e on e.SCHEDULING_ID = a.ID
+        left join PRESSURE_ACCEPT_ORDER f on f.APPOINTMENT_ID = e.ID
+        left join PRESSURE_Task_ORDER g on g.ACCEPT_ORDER_ID = f.ID
+
+        <where>
+            a.DELETED = 0
+            <if test="startDate != null and endDate == null">
+                and a.plan_date &gt;= #{startDate}
+            </if>
+            <if test="startDate == null and endDate != null">
+                and a.plan_date &lt;= #{endDate}
+            </if>
+            <if test="startDate != null and endDate != null">
+                and a.plan_date between #{startDate} and #{endDate}
+            </if>
+            <if test="checkType != null and checkType != ''">
+                and  a.TYPE = #{checkType}
+            </if>
+            <if test="unitName != null and unitName != ''">
+                and  b.unit_name like CONCAT('%',#{unitName},'%')
+            </if>
+            <if test="relateDepartment != null and relateDepartment != ''">
+                and b.RELATION_DEPT = #{relateDepartment}
+            </if>
+        </where>
+        group by b.unit_code,a.plan_date,a.type,a.ID
+        order by a.plan_date
+    </select>
 
     <select id="selectPlanPipesPage">
         select rownum,a.* from (

+ 1 - 1
tz-module-system/tz-module-system-biz/src/main/resources/logback-spring.xml

@@ -65,7 +65,7 @@
         </root>
     </springProfile>
     <!-- 其它环境 -->
-    <springProfile name="dev,test,uat,stage,prod,default,hsd">
+    <springProfile name="dev,test,uat,stage,prod,default,hsd,hst">
         <root level="INFO">
             <appender-ref ref="STDOUT"/>
             <appender-ref ref="ASYNC"/>