Browse Source

Merge remote-tracking branch 'origin/dev' into dev

yangguanjin 2 weeks ago
parent
commit
2a3d2c0e6c
59 changed files with 2776 additions and 237 deletions
  1. 8 0
      build-prod/Dockerfile-admin
  2. 3 7
      build-prod/Dockerfile-bpm
  3. 4 7
      build-prod/Dockerfile-gateway
  4. 0 41
      build-prod/Dockerfile-grape
  5. 3 7
      build-prod/Dockerfile-infra
  6. 3 14
      build-prod/Dockerfile-laboratory
  7. 3 7
      build-prod/Dockerfile-member
  8. 3 7
      build-prod/Dockerfile-mp
  9. 0 15
      build-prod/Dockerfile-mq
  10. 4 22
      build-prod/Dockerfile-pressure
  11. 11 0
      build-prod/Dockerfile-pressure2
  12. 0 29
      build-prod/Dockerfile-quartz
  13. 6 16
      build-prod/Dockerfile-system
  14. 29 0
      build-uat/update.sql
  15. 2 1
      tz-framework/tz-spring-boot-starter-env/src/main/java/cn/start/tz/framework/env/core/enums/EnvEnum.java
  16. 20 0
      tz-gateway/src/main/resources/application-prod.yaml
  17. 130 0
      tz-module-bpm/tz-module-bpm-biz/src/main/resources/application-prod.yaml
  18. 150 0
      tz-module-grape-city/tz-module-grape-city-biz/src/main/resources/application-prod.yaml
  19. 148 12
      tz-module-infra/tz-module-infra-biz/src/main/resources/application-prod.yaml
  20. 1 1
      tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/service/taskrelation/TaskRelationServiceImpl.java
  21. 175 0
      tz-module-laboratory/tz-module-laboratory-biz/src/main/resources/application-prod.yaml
  22. 157 0
      tz-module-member/tz-module-member-biz/src/main/resources/application-prod.yaml
  23. 123 0
      tz-module-mp/tz-module-mp-biz/src/main/resources/application-prod.yaml
  24. 177 0
      tz-module-mq/tz-module-mq-biz/src/main/resources/application-prod.yaml
  25. 157 0
      tz-module-pressure/tz-module-pressure-biz/src/main/resources/application-prod.yaml
  26. 3 0
      tz-module-pressure2/tz-module-pressure2-api/src/main/java/cn/start/tz/module/pressure2/enums/ErrorCodeConstants.java
  27. 21 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerTaskOrderArchiveDetailRespVO.java
  28. 21 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/vo/PipeTaskOrderArchiveDetailRespVO.java
  29. 32 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/platformEquip/vo/BoilerTaskOrderItemDetailsVO.java
  30. 32 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/platformEquip/vo/PipeTaskOrderItemDetailsVO.java
  31. 29 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorder/TaskOrderController.java
  32. 89 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/TaskOrderFileController.java
  33. 37 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/vo/TaskOrderFilePageReqVO.java
  34. 43 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/vo/TaskOrderFileRespVO.java
  35. 30 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/vo/TaskOrderFileSaveReqVO.java
  36. 51 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/taskorderfile/TaskOrderFileDO.java
  37. 31 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/taskorderfile/TaskOrderFileMapper.java
  38. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/AcceptOrderServiceImpl.java
  39. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/PipeAcceptOrderServiceImpl.java
  40. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/PipeAppointmentConfirmOrderServiceImpl.java
  41. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderInspectionServiceImpl.java
  42. 46 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  43. 35 11
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderissuereport/BoilerTaskOrderIssueReportServiceImpl.java
  44. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java
  45. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderInspectionServiceImpl.java
  46. 45 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  47. 35 11
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderissuereport/PipeTaskOrderIssueReportServiceImpl.java
  48. 2 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pushtaskorder/PushTaskOrderServiceImpl.java
  49. 12 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/synchronization/SynchronizationServiceImpl.java
  50. 11 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorder/TaskOrderService.java
  51. 93 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorder/TaskOrderServiceImpl.java
  52. 68 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorderfile/TaskOrderFileService.java
  53. 101 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorderfile/TaskOrderFileServiceImpl.java
  54. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskordernontaxrecord/TaskOrderNonTaxRecordServiceImpl.java
  55. 184 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/application-prod.yaml
  56. 12 16
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipe/EquipPipeMapper.xml
  57. 12 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/taskorderfile/TaskOrderFileMapper.xml
  58. 177 0
      tz-module-quartz/tz-module-quartz-biz/src/main/resources/application-prod.yaml
  59. 200 0
      tz-module-system/tz-module-system-biz/src/main/resources/application-prod.yaml

+ 8 - 0
build-prod/Dockerfile-admin

@@ -0,0 +1,8 @@
+FROM nginx:1.29.4
+WORKDIR /usr/share/nginx/html/
+#RUN mkdir -p /usr/share/nginx/html/
+#RUN ls -ls
+COPY ./html  /usr/share/nginx/html/
+COPY ./nginx.conf /etc/nginx/conf.d/default.conf
+COPY ./mime.types /etc/nginx/mime.types
+CMD ["nginx", "-g", "daemon off;"]

+ 3 - 7
build-prod/Dockerfile-bpm

@@ -1,13 +1,9 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
-# 设置环境变量
-ENV TZ=Asia/Shanghai
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-COPY ./tz-module-bpm/tz-module-bpm-biz/target/tz-module-bpm-biz*.jar /srv/tz-module-bpm-biz.jar
+COPY ./jar/tz-module-bpm-biz*.jar /srv/tz-module-bpm-biz.jar
 WORKDIR /srv
 
-ENV JAVA_OPS=""
-
 EXPOSE 48083
 ENTRYPOINT ["java", "-jar", "/srv/tz-module-bpm-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 4 - 7
build-prod/Dockerfile-gateway

@@ -1,19 +1,16 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
 #RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update
 #RUN apk -Uuv add --no-cache ca-certificates tini tzdata && \
 #      ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-COPY ./tz-gateway/target/tz-gateway*.jar /srv/tz-gateway.jar
+COPY ./jar/tz-gateway*.jar /srv/tz-gateway.jar
 
 WORKDIR /srv
 
 # -Xmx512m -Xms256m -XX:MaxMetaspaceSize=256m
-ENV JAVA_OPS=""
+# ENV JAVA_OPS=""
 
 EXPOSE 48080
 ENTRYPOINT ["java", "-jar", "/srv/tz-gateway.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 0 - 41
build-prod/Dockerfile-grape

@@ -1,41 +0,0 @@
-#FROM openjdk:17-jdk-alpine
-
-#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update
-#RUN apk -Uuv add --no-cache ca-certificates tini tzdata ttf-dejavu ttf-droid ttf-freefont ttf-liberation&& \
-#      ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
-
-FROM registry.cn-hangzhou.aliyuncs.com/dexdev/common:ubuntu22
-
-RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
-    && echo $TZ > /etc/timezone \
-    && apt-get update \
-    && apt-get install -y tzdata language-pack-zh-hans
-
-# 设置环境变量
-ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
-ENV PATH=$JAVA_HOME/bin:$PATH
-ENV TZ=Asia/Shanghai
-
-WORKDIR /srv
-
-ADD build/gc-excel-lic /srv
-RUN mkdir -p /srv/fonts
-ADD build/gb2312.ttf /srv/fonts
-ADD build/songti.ttf /srv/fonts
-
-RUN echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc && echo 'export LC_ALL=zh_CN.UTF-8' >> ~/bash.bashrc
-#RUN source ~/bash.bashrc
-RUN chmod a+x /srv/gc-excel-lic
-# 授权使用目录
-RUN mkdir -p $HOME/.local/share
-
-
-COPY ./tz-module-pressure/tz-module-pressure-biz/target/tz-module-pressure-biz*.jar /srv/tz-module-pressure-biz.jar
-
-WORKDIR /srv
-
-ENV JAVA_OPS=""
-
-EXPOSE 48099
-ENTRYPOINT ["java", "-jar", "/srv/tz-module-pressure-biz.jar","$JAVA_OPS","--spring.profiles.active=dev"]

+ 3 - 7
build-prod/Dockerfile-infra

@@ -1,15 +1,11 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-COPY ./tz-module-infra/tz-module-infra-biz/target/tz-module-infra-biz*.jar /srv/tz-module-infra-biz.jar
+COPY ./jar/tz-module-infra-biz*.jar /srv/tz-module-infra-biz.jar
 
 WORKDIR /srv
 
-ENV JAVA_OPS=""
 
 EXPOSE 48082
 ENTRYPOINT ["java", "-jar", "/srv/tz-module-infra-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 3 - 14
build-prod/Dockerfile-laboratory

@@ -1,22 +1,11 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-# 设置环境变量
-ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
-ENV PATH=$JAVA_HOME/bin:$PATH
-ENV TZ=Asia/Shanghai
+COPY ./jar/tz-module-laboratory-biz*.jar /srv/tz-module-laboratory-biz.jar
 
 WORKDIR /srv
 
 
-RUN echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc && echo 'export LANG=zh_CN.UTF-8' >> ~/.profile
-
-# 授权使用目录
-RUN mkdir -p $HOME/.local/share
-COPY ./tz-module-laboratory/tz-module-laboratory-biz/target/tz-module-laboratory-biz*.jar /srv/tz-module-laboratory-biz.jar
-
-ENV JAVA_OPS=""
-
 EXPOSE 48099
 ENTRYPOINT ["java", "-jar", "/srv/tz-module-laboratory-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 3 - 7
build-prod/Dockerfile-member

@@ -1,12 +1,8 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-COPY ./tz-module-member/tz-module-member-biz/target/tz-module-member-biz*.jar /srv/tz-module-member-biz.jar
-
+COPY ./jar/tz-module-member-biz*.jar /srv/tz-module-member-biz.jar
 WORKDIR /srv
 
 ENV JAVA_OPS=""

+ 3 - 7
build-prod/Dockerfile-mp

@@ -1,15 +1,11 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-COPY ./tz-module-mp/tz-module-mp-biz/target/tz-module-mp-biz*.jar /srv/tz-module-mp-biz.jar
+COPY ./jar/tz-module-mp-biz*.jar /srv/tz-module-mp-biz.jar
 
 WORKDIR /srv
 
-ENV JAVA_OPS=""
 
 EXPOSE 48086
 ENTRYPOINT ["java", "-jar", "/srv/tz-module-mp-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 0 - 15
build-prod/Dockerfile-mq

@@ -1,15 +0,0 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
-
-
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-COPY ./tz-module-mq/tz-module-mq-biz/target/tz-module-mq-biz*.jar /srv/tz-module-mq-biz.jar
-
-WORKDIR /srv
-
-ENV JAVA_OPS=""
-
-EXPOSE 48001
-ENTRYPOINT ["java", "-jar", "/srv/tz-module-mq-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 4 - 22
build-prod/Dockerfile-pressure

@@ -1,29 +1,11 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
-RUN sed -i 's|ports.ubuntu.com/ubuntu-ports|mirrors.aliyun.com/ubuntu-ports|g' /etc/apt/sources.list
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-RUN apt-get update && \
-    apt-get install -y --no-install-recommends \
-    fontconfig \
-    fonts-dejavu \
-    fonts-liberation \
-    fonts-noto \
-    fonts-noto-cjk \
-    fonts-opensymbol less vim  \
-    && rm -rf /var/lib/apt/lists/*
-
-
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-WORKDIR /srv
-
-COPY ./tz-module-pressure/tz-module-pressure-biz/target/tz-module-pressure-biz*.jar /srv/tz-module-pressure-biz.jar
+COPY ./jar/tz-module-pressure-biz*.jar /srv/tz-module-pressure-biz.jar
 
 WORKDIR /srv
 
-ENV JAVA_OPS=""
 
-EXPOSE 48099
+EXPOSE 48100
 ENTRYPOINT ["java", "-jar", "/srv/tz-module-pressure-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 11 - 0
build-prod/Dockerfile-pressure2

@@ -0,0 +1,11 @@
+FROM eclipse-temurin:17-jdk-jammy
+
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
+
+COPY ./jar/tz-module-pressure2-biz*.jar /srv/tz-module-pressure2-biz.jar
+
+WORKDIR /srv
+
+
+EXPOSE 48097
+ENTRYPOINT ["java", "-jar", "/srv/tz-module-pressure2-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 0 - 29
build-prod/Dockerfile-quartz

@@ -1,29 +0,0 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
-
-RUN sed -i 's|ports.ubuntu.com/ubuntu-ports|mirrors.aliyun.com/ubuntu-ports|g' /etc/apt/sources.list
-
-RUN apt-get update && \
-    apt-get install -y --no-install-recommends \
-    fontconfig \
-    fonts-dejavu \
-    fonts-liberation \
-    fonts-noto \
-    fonts-noto-cjk \
-    fonts-opensymbol \
-    && rm -rf /var/lib/apt/lists/*
-
-
-# 设置环境变量
-ENV TZ=Asia/Shanghai
-
-WORKDIR /srv
-
-COPY ./tz-module-quartz/tz-module-quartz-biz/target/tz-module-quartz-biz*.jar /srv/tz-module-quartz-biz.jar
-
-WORKDIR /srv
-
-ENV JAVA_OPS=""
-
-EXPOSE 48001
-ENTRYPOINT ["java", "-jar", "/srv/tz-module-quartz-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 6 - 16
build-prod/Dockerfile-system

@@ -1,25 +1,15 @@
-ARG TARGETPLATFORM=linux/arm64
-FROM --platform=$TARGETPLATFORM eclipse-temurin:17-jre
+FROM eclipse-temurin:17-jdk-jammy
 
+# ���û�������
+ENV TZ=Asia/Shanghai JAVA_OPTS=""
 
-RUN apt-get update && \
-    apt-get install -y --no-install-recommends less vim  \
-    && rm -rf /var/lib/apt/lists/*
-
-# 设置环境变量
-ENV TZ=Asia/Shanghai
+COPY ./jar/tz-module-system-biz*.jar /srv/tz-module-system-biz.jar
 
 WORKDIR /srv
 
-RUN mkdir -p /srv/fonts
-
-RUN echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc && echo 'export LC_ALL=zh_CN.UTF-8' >> ~/bash.bashrc
-# 授权使用目录
-RUN mkdir -p $HOME/.local/share
-
-COPY ./tz-module-system/tz-module-system-biz/target/tz-module-system-biz*.jar /srv/tz-module-system-biz.jar
+ADD ./icons/gb2312.ttf /srv/fonts
+ADD ./icons/songti.ttf /srv/fonts
 
-ENV JAVA_OPS=""
 
 EXPOSE 48081
 ENTRYPOINT ["java", "-jar", "/srv/tz-module-system-biz.jar","$JAVA_OPS","--spring.profiles.active=prod"]

+ 29 - 0
build-uat/update.sql

@@ -1628,3 +1628,32 @@ COMMENT ON COLUMN "PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT"."ENTER_PDF_URL" IS '
 ALTER TABLE "PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT" ADD COLUMN "ENTER_PDF_URL" VARCHAR(64);
 COMMENT ON COLUMN "PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT"."ENTER_PDF_URL" IS '记录pdfurl';
 
+--20260622
+CREATE TABLE "PRESSURE2_TASK_ORDER_FILE"
+(
+    "ID" VARCHAR2(64),
+    "FILE_URL" VARCHAR2(255),
+    "CREATE_TIME" TIMESTAMP(6),
+    "CREATOR" VARCHAR2(64),
+    "UPDATE_TIME" TIMESTAMP(6),
+    "UPDATER" VARCHAR2(64),
+    "DELETED" BIT,
+    "ORDER_ID" VARCHAR(50),
+    "ORDER_ITEM_ID" VARCHAR(50),
+    "EQUIP_MAIN_TYPE" INTEGER,
+    "FILE_NAME" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;
+
+COMMENT ON TABLE "PRESSURE2_TASK_ORDER_FILE" IS '任务单附件表';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."ID" IS 'ID';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."FILE_URL" IS '文件路径';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."CREATE_TIME" IS '创建人';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."CREATOR" IS '创建时间';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."UPDATE_TIME" IS '修改人';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."UPDATER" IS '修改时间';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."DELETED" IS '是否删除';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."ORDER_ID" IS '任务单ID';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."ORDER_ITEM_ID" IS '检验设备单ID';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."EQUIP_MAIN_TYPE" IS '设备类型 200锅炉 300管道';
+COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_FILE"."FILE_NAME" IS '文件名称';
+
+--已加

+ 2 - 1
tz-framework/tz-spring-boot-starter-env/src/main/java/cn/start/tz/framework/env/core/enums/EnvEnum.java

@@ -14,7 +14,8 @@ public enum EnvEnum {
 
     LOCAL("local", "开发环境"),
     HSD("hsd", "开发环境"),
-    UAT("uat", "特种uat环境");
+    UAT("uat", "特种uat环境"),
+    PROD("prod", "生产环境");
 
     private final String envName;
     private final String memo;

+ 20 - 0
tz-gateway/src/main/resources/application-prod.yaml

@@ -0,0 +1,20 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      #server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+# 日志文件配置
+logging:
+  level:
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示

+ 130 - 0
tz-module-bpm/tz-module-bpm-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,130 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+--- #################### 数据库相关配置 ####################
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    # 数据库初始化脚本
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+--- #################### MQ 消息队列相关配置 ####################
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    admin:
+      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.pressure.dal.mysql: debug
+    cn.start.tz.module.pressure.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.pressure.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  demo: false # 开启演示模式
+  captcha:
+    enable: false

+ 150 - 0
tz-module-grape-city/tz-module-grape-city-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,150 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      config:
+        enabled: false
+        refresh-enabled: false
+      discovery:
+        enabled: false
+        instance-enabled: false
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: false
+      stat-view-servlet:
+        enabled: false
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        stat-view-servlet:
+          enabled: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 10 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+  # rocketmq 配置项,对应 RocketMQProperties 配置类
+  rocketmq:
+    name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+--- #################### 定时任务相关配置 ####################
+#xxl:
+#  job:
+#    admin:
+#      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+#      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: "*" # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.system.dal.mysql: debug
+    cn.start.tz.module.system.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.system.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 微信公众号、小程序相关配置 ####################
+wx:
+  mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+    #    app-id: wx041349c6f39b268b
+    #    secret: 5abee519483bc9f8cb37ce280e814bd0
+    app-id: wx5b23ba7a5589ecbb # 测试号
+    secret: 2a7b3b20c537e52e74afd395eb85f61f
+    # 存储配置,解决 AccessToken 的跨节点的共享
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wx # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+  miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
+    #    appid: wx62056c0d5e8db250
+    #    secret: 333ae72f41552af1e998fe1f54e1584a
+    appid: wxf88e2dba767bb5d6 # wenhualian的接口测试号
+    secret: c2fffd16cb6c0f9c6b649a9828168fb5
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wa # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  env: # 多环境的配置项
+    tag: ${HOSTNAME}
+    name: prod
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+  fonts-folder-path: /mnt/grape-server/fonts

+ 148 - 12
tz-module-infra/tz-module-infra-biz/src/main/resources/application-prod.yaml

@@ -1,22 +1,158 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
 
 spring:
   cloud:
     nacos:
-      server-addr: nacos-server:8848
-      username: nacos
-      password: dexdev@2025
-      discovery:
-        namespace: dev
-        group: DEFAULT_GROUP
-      config:
-        namespace: dev
-        group: DEFAULT_GROUP
-        max-retry: 10
-        retry-interval: 2000
+      #server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+      #server-addr: localhost:31848 # Nacos 服务器地址
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
 
+--- #################### 数据库相关配置 ####################
+spring:
+
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+      - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
+      - de.codecentric.boot.admin.server.cloud.config.AdminServerDiscoveryAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
+      - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
+      - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 1 # 初始连接数
+        min-idle: 1 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        #          username: sa # SQL Server 连接的示例
+        #          password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例
+        #          username: SYSDBA # DM 连接的示例
+        #          password: SYSDBA # DM 连接的示例
+        slave: # 模拟从库,可根据自己需要修改
+          lazy: true # 开启懒加载,保证启动速度
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host:  192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+--- #################### MQ 消息队列相关配置 ####################
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server:  192.168.20.224:9876 # RocketMQ Namesrv
+
+spring:
+  # RabbitMQ 配置项,对应 RabbitProperties 配置类
+  rabbitmq:
+    host: 127.0.0.1 # RabbitMQ 服务的地址
+    port: 5672 # RabbitMQ 服务的端口
+    username: guest # RabbitMQ 服务的账号
+    password: guest # RabbitMQ 服务的密码
+  # Kafka 配置项,对应 KafkaProperties 配置类
+  kafka:
+    bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    enabled: false # 是否开启调度中心,默认为 true 开启
+    admin:
+      addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
 
 # 日志文件配置
 logging:
   level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.infra.dal.mysql: debug
+    cn.start.tz.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.infra.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
     org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
-    com.alibaba.nacos: DEBUG
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  env: # 多环境的配置项
+    tag: ${HOSTNAME}
+  security:
+    mock-enable: true
+  access-log: # 访问日志的配置项
+    enable: false
+  encryption: your-base64-encoded-aes256-key-here

+ 1 - 1
tz-module-laboratory/tz-module-laboratory-biz/src/main/java/cn/start/tz/module/laboratory/service/taskrelation/TaskRelationServiceImpl.java

@@ -1340,7 +1340,7 @@ public class TaskRelationServiceImpl extends ServiceImpl<TaskRelationMapper, Tas
             String id = taskRelationDO.getId();
             String type = "1";
             String url = String.format("https://yudao-h5.hofo.co/mp/pagesSub/reportInfoList/index?id=%s&type=%s", id, type);
-            if (EnvEnum.UAT.getEnvName().equals(env)) {
+            if (EnvEnum.PROD.getEnvName().equals(env)) {
                 url = String.format("https://tjt.gzsei.cn/mp/pagesSub/reportInfoList/index?id=%s&type=%s", id, type);
             }
 

+ 175 - 0
tz-module-laboratory/tz-module-laboratory-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,175 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+--- #################### MQ 消息队列相关配置 ####################
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+spring:
+# RabbitMQ 配置项,对应 RabbitProperties 配置类
+#  rabbitmq:
+#    host: 127.0.0.1 # RabbitMQ 服务的地址
+#    port: 5672 # RabbitMQ 服务的端口
+#    username: guest # RabbitMQ 服务的账号
+#    password: guest # RabbitMQ 服务的密码
+#  # Kafka 配置项,对应 KafkaProperties 配置类
+#  kafka:
+#    bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    admin:
+      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+  level:
+      # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.laboratory.dal.mysql: debug
+    cn.start.tz.module.laboratory.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.laboratory.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+
+justauth:
+  enabled: true
+  type:
+    DINGTALK: # 钉钉
+      client-id: dingvrnreaje3yqvzhxg
+      client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+      ignore-check-redirect-uri: true
+    WECHAT_ENTERPRISE: # 企业微信
+      client-id: wwd411c69a39ad2e54
+      client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+      agent-id: 1000004
+      ignore-check-redirect-uri: true
+    # noinspection SpringBootApplicationYaml
+    WECHAT_MINI_APP: # 微信小程序
+      client-id: ${wx.miniapp.appid}
+      client-secret: ${wx.miniapp.secret}
+      ignore-check-redirect-uri: true
+      ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
+    WECHAT_MP: # 微信公众号
+      client-id: ${wx.mp.app-id}
+      client-secret: ${wx.mp.secret}
+      ignore-check-redirect-uri: true
+  cache:
+    type: REDIS
+    prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+    timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+
+feign:
+  client:
+    #    direct-grape-service: http://127.0.0.1:48010  # 本地测试
+    direct-grape-service: http://8.138.109.252:48010

+ 157 - 0
tz-module-member/tz-module-member-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,157 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+      - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 1 # 初始连接数
+        min-idle: 1 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+#    password: 123456 # 密码,建议生产环境开启
+
+--- #################### MQ 消息队列相关配置 ####################
+rocketmq:
+  name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+--- #################### 定时任务相关配置 ####################
+
+xxl:
+  job:
+    enabled: false # 是否开启调度中心,默认为 true 开启
+    admin:
+      addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.member.dal.mysql: debug
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+
+##############################小程序相关配置########################################
+wx:
+  miniapp:
+    appid: wx42cd964b5f2f5efd
+    secret: e446b09bd9d62da50f2b8b9704b7852c
+  mp:
+    appid: wxa8ee312a1ad60f61 # 蚁群
+    secret: 7189797e4640b5b5c5b9a64de1ba404e
+   #mp:
+   # appid: wx5b23ba7a5589ecbb # 特种
+    #secret: 2a7b3b20c537e52e74afd395eb85f61f
+
+#=======ocr识别配置 ==================
+ocr:
+  accessKeyId: LTAI4FicD7M7RwQdAbqWC5Mu
+  accessKeySecret: AXI8eq7QcrlDPG1skoPnjhZkbSjOwz
+
+aly:
+  blApiKey : sk-8a46c04a2f6742eab6d960bc5d893503
+
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  env: # 多环境的配置项
+    tag: ${HOSTNAME}
+    name: prod
+  demo: false # 开启演示模式
+  security:
+    mock-enable: true
+  access-log: # 访问日志的配置项
+    enable: false
+app-auth:
+  base-url: https://cloud-admin-uat.gzsei.com
+  app-id: 20260527
+  app-secret: ce9fba85d73b475ab3897cbb9d62d61d

+ 123 - 0
tz-module-mp/tz-module-mp-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,123 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+      - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 1 # 初始连接数
+        min-idle: 1 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+--- #################### MQ 消息队列相关配置 ####################
+rocketmq:
+  name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+--- #################### 定时任务相关配置 ####################
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.mp.dal.mysql: debug
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  env: # 多环境的配置项
+    tag: ${HOSTNAME}
+  security:
+    mock-enable: true
+  access-log: # 访问日志的配置项
+    enable: false

+ 177 - 0
tz-module-mq/tz-module-mq-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,177 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-server:8848 # Nacos 服务器地址
+      username: nacos # Nacos 账号
+      password: dexdev@2025 # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: dev # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: dev # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 10 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+  rocketmq:
+    name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    admin:
+      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: "*" # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.system.dal.mysql: debug
+    cn.start.tz.module.system.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.system.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 微信公众号、小程序相关配置 ####################
+wx:
+  mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+    #    app-id: wx041349c6f39b268b
+    #    secret: 5abee519483bc9f8cb37ce280e814bd0
+    app-id: wx5b23ba7a5589ecbb # 测试号
+    secret: 2a7b3b20c537e52e74afd395eb85f61f
+    # 存储配置,解决 AccessToken 的跨节点的共享
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wx # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+  miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
+    #    appid: wx62056c0d5e8db250
+    #    secret: 333ae72f41552af1e998fe1f54e1584a
+    appid: wxf88e2dba767bb5d6 # wenhualian的接口测试号
+    secret: c2fffd16cb6c0f9c6b649a9828168fb5
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wa # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+
+justauth:
+  enabled: true
+  type:
+    DINGTALK: # 钉钉
+      client-id: dingvrnreaje3yqvzhxg
+      client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+      ignore-check-redirect-uri: true
+    WECHAT_ENTERPRISE: # 企业微信
+      client-id: wwd411c69a39ad2e54
+      client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+      agent-id: 1000004
+      ignore-check-redirect-uri: true
+    # noinspection SpringBootApplicationYaml
+    WECHAT_MINI_APP: # 微信小程序
+      client-id: ${wx.miniapp.appid}
+      client-secret: ${wx.miniapp.secret}
+      ignore-check-redirect-uri: true
+      ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
+    WECHAT_MP: # 微信公众号
+      client-id: ${wx.mp.app-id}
+      client-secret: ${wx.mp.secret}
+      ignore-check-redirect-uri: true
+  cache:
+    type: REDIS
+    prefix: "social_auth_state:" # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+    timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟

+ 157 - 0
tz-module-pressure/tz-module-pressure-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,157 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+--- #################### 数据库相关配置 ####################
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  #      datasource:
+  #        master:
+  #          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+  #          username: SYSDBA
+  #          password: Dexdev2025
+  #        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+  #          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+  #          username: SYSDBA
+  #          password: Dexdev2025
+  #        oracle: # 承压测试数据库
+  #          driver-class-name: oracle.jdbc.OracleDriver
+  #          url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.20.26)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=oadb)))
+  #          username: eosdb
+  #          password: eosdb
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 #地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+--- #################### MQ 消息队列相关配置 ####################
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+
+--- #################### 定时任务相关配置 ####################
+#xxl:
+#  job:
+#    admin:
+#addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+#      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.pressure.dal.mysql: debug
+    cn.start.tz.module.pressure.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.pressure.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  env: # 多环境的配置项
+    tag: ${HOSTNAME}
+    name: prod
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+  minio:
+    host: https://yudao-admin.hofo.co/dexdev/
+    hostouter: https://tjt.gzsei.cn/app-api/dexdev/
+
+feign:
+  client:
+    #direct-grape-service: http://127.0.0.1:48010  # 本地测试
+    direct-grape-service: http://8.138.109.252:48010

+ 3 - 0
tz-module-pressure2/tz-module-pressure2-api/src/main/java/cn/start/tz/module/pressure2/enums/ErrorCodeConstants.java

@@ -157,6 +157,9 @@ public interface ErrorCodeConstants{
 
     ErrorCode INDEX_TODO_NOT_EXISTS = new ErrorCode(1076, "首页代办不存在");
 
+    ErrorCode TASK_ORDER_FILE_NOT_EXISTS = new ErrorCode(1077, "任务单附件不存在");
+    ErrorCode TASK_ORDER_FILE_UPLOAD_FAIL = new ErrorCode(1078, "任务单附件上传失败");
+
     ErrorCode EQUIP_BOILER_NOT_EXISTS = new ErrorCode(2000, "锅炉设备不存在");
 
     ErrorCode BOILER_EQUIP_OPERATION_RECORD_NOT_EXISTS = new ErrorCode(2001, "锅炉操作记录不存在");

+ 21 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerTaskOrderArchiveDetailRespVO.java

@@ -24,6 +24,9 @@ public class BoilerTaskOrderArchiveDetailRespVO implements Serializable {
     @Schema(description = "项目文件")
     private List<ItemFile> itemFiles;
 
+    @Schema(description = "附件文件")
+    private List<AttachmentFile> attachmentFiles;
+
     @Schema(description = "任务单号")
     private String orderNo;
 
@@ -139,4 +142,22 @@ public class BoilerTaskOrderArchiveDetailRespVO implements Serializable {
         private String filePdf;
     }
 
+    @Data
+    public static class AttachmentFile implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        @Schema(description = "附件记录ID", example = "6948")
+        private String id;
+
+        @Schema(description = "文件名称", example = "检验报告附件.pdf")
+        private String fileName;
+
+        @Schema(description = "文件路径", example = "/path/to/file.pdf")
+        private String fileUrl;
+
+        @Schema(description = "上传时间", example = "2025-01-01 12:00:00")
+        private LocalDateTime createTime;
+    }
+
 }

+ 21 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/vo/PipeTaskOrderArchiveDetailRespVO.java

@@ -24,6 +24,9 @@ public class PipeTaskOrderArchiveDetailRespVO implements Serializable {
     @Schema(description = "项目文件")
     private List<ItemFile> itemFiles;
 
+    @Schema(description = "附件文件")
+    private List<AttachmentFile> attachmentFiles;
+
     @Schema(description = "任务单号")
     private String orderNo;
 
@@ -142,4 +145,22 @@ public class PipeTaskOrderArchiveDetailRespVO implements Serializable {
 
     }
 
+    @Data
+    public static class AttachmentFile implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        @Schema(description = "附件记录ID", example = "6948")
+        private String id;
+
+        @Schema(description = "文件名称", example = "检验报告附件.pdf")
+        private String fileName;
+
+        @Schema(description = "文件路径", example = "/path/to/file.pdf")
+        private String fileUrl;
+
+        @Schema(description = "上传时间", example = "2025-01-01 12:00:00")
+        private LocalDateTime createTime;
+    }
+
 }

+ 32 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/platformEquip/vo/BoilerTaskOrderItemDetailsVO.java

@@ -32,9 +32,41 @@ public class BoilerTaskOrderItemDetailsVO {
     @Schema(description = "统一社会信用代码")
     private String socialCreditCode;
 
+    @Schema(description = "使用单位代码")
+    private String useUnitCode;
+
     @Schema(description = "使用单位名称")
     private String useUnitName;
 
+    @Schema(description = "检验项目")
+    private String checkProject;
+
+    @Schema(description = "任务单号")
+    private String orderNo;
+
+    @Schema(description = "记录编号")
+    private String recordNo;
+
+    @Schema(description = "主检验员")
+    private String mainChecker;
+
+    @Schema(description = "检验员")
+    private String checkers;
+
+    @Schema(description = "'审核员'")
+    private String approvalName;
+
+    @Schema(description = "'审核日期'")
+    @JsonFormat(pattern = "yyyy年MM月dd日")
+    private LocalDate approvalTime;
+
+    @Schema(description = "'审批员'")
+    private String ratifyName;
+
+    @Schema(description = "'审批日期'")
+    @JsonFormat(pattern = "yyyy年MM月dd日")
+    private LocalDate ratifyTime;
+
     @Schema(description = "使用登记证编号")
     private String useRegisterNo;
 

+ 32 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/platformEquip/vo/PipeTaskOrderItemDetailsVO.java

@@ -27,9 +27,41 @@ public class PipeTaskOrderItemDetailsVO {
     @Schema(description = "统一社会信用代码")
     private String socialCreditCode;
 
+    @Schema(description = "使用单位代码")
+    private String useUnitCode;
+
     @Schema(description = "使用单位名称")
     private String useUnitName;
 
+    @Schema(description = "检验项目")
+    private String checkProject;
+
+    @Schema(description = "任务单号")
+    private String orderNo;
+
+    @Schema(description = "记录编号")
+    private String recordNo;
+
+    @Schema(description = "主检验员")
+    private String mainChecker;
+
+    @Schema(description = "检验员")
+    private String checkers;
+
+    @Schema(description = "'审核员'")
+    private String approvalName;
+
+    @Schema(description = "'审核日期'")
+    @JsonFormat(pattern = "yyyy年MM月dd日")
+    private LocalDate approvalTime;
+
+    @Schema(description = "'审批员'")
+    private String ratifyName;
+
+    @Schema(description = "'审批日期'")
+    @JsonFormat(pattern = "yyyy年MM月dd日")
+    private LocalDate ratifyTime;
+
     @Schema(description = "使用登记证编号")
     private String useRegisterNo;
 

+ 29 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorder/TaskOrderController.java

@@ -4,15 +4,21 @@ import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.TaskOrderExportVO;
 import cn.start.tz.module.pressure2.service.taskorder.TaskOrderService;
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.util.List;
 
-
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.start.tz.framework.common.pojo.CommonResult.success;
 import static cn.start.tz.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
 
@@ -37,4 +43,26 @@ public class TaskOrderController {
         pageReqVO.setUserId(getLoginUserId());
         return success(taskOrderService.getTaskOrderPage(pageReqVO));
     }
+
+    @PostMapping("/page/export-excel")
+    @Operation(summary = "导出统一任务单 Excel")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTaskOrderPageExcel(@Valid @RequestBody BoilerTaskOrderPageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setUserId(getLoginUserId());
+        pageReqVO.setPageNo(1);
+        pageReqVO.setPageSize(2000);
+        PageResult<BoilerTaskOrderRespVO> pageResult = taskOrderService.getTaskOrderPage(pageReqVO);
+        ExcelUtils.write(response, "统一任务单.xls", "数据", BoilerTaskOrderRespVO.class, pageResult.getList());
+    }
+
+    @PostMapping("/item/export-excel")
+    @Operation(summary = "导出任务单设备明细 Excel")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTaskOrderItemExcel(@Valid @RequestBody BoilerTaskOrderPageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setUserId(getLoginUserId());
+        List<TaskOrderExportVO> list = taskOrderService.getTaskOrderItemExportList(pageReqVO);
+        ExcelUtils.write(response, "任务单设备明细.xls", "数据", TaskOrderExportVO.class, list);
+    }
 }

+ 89 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/TaskOrderFileController.java

@@ -0,0 +1,89 @@
+package cn.start.tz.module.pressure2.controller.admin.taskorderfile;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.start.tz.framework.common.pojo.PageParam;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
+
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
+
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.taskorderfile.TaskOrderFileDO;
+import cn.start.tz.module.pressure2.service.taskorderfile.TaskOrderFileService;
+import org.springframework.web.multipart.MultipartFile;
+
+@Tag(name = "管理后台 - 任务单附件")
+@RestController
+@RequestMapping("/pressure2/task-order-file")
+@Validated
+public class TaskOrderFileController {
+
+    @Resource
+    private TaskOrderFileService taskOrderFileService;
+
+    @PostMapping("/upload-and-create")
+    @Operation(summary = "上传文件并创建任务单附件")
+    public CommonResult<TaskOrderFileRespVO> uploadAndCreate(
+            @RequestParam("file") MultipartFile file,
+            @RequestParam("orderId") String orderId,
+            @RequestParam("orderItemId") String orderItemId,
+            @RequestParam("equipMainType") Integer equipMainType) {
+        TaskOrderFileDO taskOrderFile = taskOrderFileService.uploadAndCreate(file, orderId, orderItemId, equipMainType);
+        return success(BeanUtils.toBean(taskOrderFile, TaskOrderFileRespVO.class));
+    }
+
+    @PostMapping("/create")
+    @Operation(summary = "创建任务单附件")
+    public CommonResult<String> createTaskOrderFile(@Valid @RequestBody TaskOrderFileSaveReqVO createReqVO) {
+        return success(taskOrderFileService.createTaskOrderFile(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新任务单附件")
+    public CommonResult<Boolean> updateTaskOrderFile(@Valid @RequestBody TaskOrderFileSaveReqVO updateReqVO) {
+        taskOrderFileService.updateTaskOrderFile(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除任务单附件")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deleteTaskOrderFile(@RequestParam("id") String id) {
+        taskOrderFileService.deleteTaskOrderFile(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得任务单附件")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<TaskOrderFileRespVO> getTaskOrderFile(@RequestParam("id") String id) {
+        TaskOrderFileDO taskOrderFile = taskOrderFileService.getTaskOrderFile(id);
+        return success(BeanUtils.toBean(taskOrderFile, TaskOrderFileRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得任务单附件分页")
+    public CommonResult<PageResult<TaskOrderFileRespVO>> getTaskOrderFilePage(@Valid TaskOrderFilePageReqVO pageReqVO) {
+        PageResult<TaskOrderFileDO> pageResult = taskOrderFileService.getTaskOrderFilePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, TaskOrderFileRespVO.class));
+    }
+
+}

+ 37 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/vo/TaskOrderFilePageReqVO.java

@@ -0,0 +1,37 @@
+package cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.start.tz.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.start.tz.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 任务单附件分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class TaskOrderFilePageReqVO extends PageParam {
+
+    @Schema(description = "文件路径", example = "https://www.iocoder.cn")
+    private String fileUrl;
+
+    @Schema(description = "创建人")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "任务单ID", example = "25222")
+    private String orderId;
+
+    @Schema(description = "检验设备单ID", example = "25955")
+    private String orderItemId;
+
+    @Schema(description = "设备类型 200锅炉 300管道", example = "2")
+    private Integer equipMainType;
+
+    @Schema(description = "文件名称", example = "芋艿")
+    private String fileName;
+
+}

+ 43 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/vo/TaskOrderFileRespVO.java

@@ -0,0 +1,43 @@
+package cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 任务单附件 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class TaskOrderFileRespVO {
+
+    @Schema(description = "ID", example = "10035")
+    @ExcelProperty("ID")
+    private String id;
+
+    @Schema(description = "文件路径", example = "https://www.iocoder.cn")
+    @ExcelProperty("文件路径")
+    private String fileUrl;
+
+    @Schema(description = "创建人")
+    @ExcelProperty("创建人")
+    private LocalDateTime createTime;
+
+    @Schema(description = "任务单ID", example = "25222")
+    @ExcelProperty("任务单ID")
+    private String orderId;
+
+    @Schema(description = "检验设备单ID", example = "25955")
+    @ExcelProperty("检验设备单ID")
+    private String orderItemId;
+
+    @Schema(description = "设备类型 200锅炉 300管道", example = "2")
+    @ExcelProperty("设备类型 200锅炉 300管道")
+    private Integer equipMainType;
+
+    @Schema(description = "文件名称", example = "芋艿")
+    @ExcelProperty("文件名称")
+    private String fileName;
+
+}

+ 30 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorderfile/vo/TaskOrderFileSaveReqVO.java

@@ -0,0 +1,30 @@
+package cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 任务单附件新增/修改 Request VO")
+@Data
+public class TaskOrderFileSaveReqVO {
+
+    @Schema(description = "ID", example = "10035")
+    private String id;
+
+    @Schema(description = "文件路径", example = "https://www.iocoder.cn")
+    private String fileUrl;
+
+    @Schema(description = "任务单ID", example = "25222")
+    private String orderId;
+
+    @Schema(description = "检验设备单ID", example = "25955")
+    private String orderItemId;
+
+    @Schema(description = "设备类型 200锅炉 300管道", example = "2")
+    private Integer equipMainType;
+
+    @Schema(description = "文件名称", example = "芋艿")
+    private String fileName;
+
+}

+ 51 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/taskorderfile/TaskOrderFileDO.java

@@ -0,0 +1,51 @@
+package cn.start.tz.module.pressure2.dal.dataobject.taskorderfile;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 任务单附件 DO
+ *
+ * @author 特种管理员
+ */
+@TableName("pressure2_task_order_file")
+@KeySequence("pressure2_task_order_file_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TaskOrderFileDO extends BaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 文件路径
+     */
+    private String fileUrl;
+    /**
+     * 任务单ID
+     */
+    private String orderId;
+    /**
+     * 检验设备单ID
+     */
+    private String orderItemId;
+    /**
+     * 设备类型 200锅炉 300管道
+     */
+    private Integer equipMainType;
+    /**
+     * 文件名称
+     */
+    private String fileName;
+
+}

+ 31 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/taskorderfile/TaskOrderFileMapper.java

@@ -0,0 +1,31 @@
+package cn.start.tz.module.pressure2.dal.mysql.taskorderfile;
+
+import java.util.*;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.taskorderfile.TaskOrderFileDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo.*;
+
+/**
+ * 任务单附件 Mapper
+ *
+ * @author 特种管理员
+ */
+@Mapper
+public interface TaskOrderFileMapper extends BaseMapperX<TaskOrderFileDO> {
+
+    default PageResult<TaskOrderFileDO> selectPage(TaskOrderFilePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<TaskOrderFileDO>()
+                .eqIfPresent(TaskOrderFileDO::getFileUrl, reqVO.getFileUrl())
+                .betweenIfPresent(TaskOrderFileDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(TaskOrderFileDO::getOrderId, reqVO.getOrderId())
+                .eqIfPresent(TaskOrderFileDO::getOrderItemId, reqVO.getOrderItemId())
+                .eqIfPresent(TaskOrderFileDO::getEquipMainType, reqVO.getEquipMainType())
+                .likeIfPresent(TaskOrderFileDO::getFileName, reqVO.getFileName())
+                .orderByDesc(TaskOrderFileDO::getId));
+    }
+
+}

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/AcceptOrderServiceImpl.java

@@ -724,7 +724,7 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
                 param.setMemberId(memberUser.getId());
                 if (EnvEnum.LOCAL.getEnvName().equals(env)){
                     param.setTemplateId("xMrZQzMWb6b_OrvLfwa-rflUrRvgifE7gW8L-cJ8dUs");
-                } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                     param.setTemplateId("jPOXU-IcuG-l20RRQiitybJjyAHVf2RfK6t-T9d5ry0");
                 }
                 List<WxMpTemplateDataReqDto> list = new ArrayList<>();

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/PipeAcceptOrderServiceImpl.java

@@ -720,7 +720,7 @@ public class PipeAcceptOrderServiceImpl implements PipeAcceptOrderService {
                 param.setMemberId(memberUser.getId());
                 if (EnvEnum.LOCAL.getEnvName().equals(env)){
                     param.setTemplateId("xMrZQzMWb6b_OrvLfwa-rflUrRvgifE7gW8L-cJ8dUs");
-                } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                     param.setTemplateId("jPOXU-IcuG-l20RRQiitybJjyAHVf2RfK6t-T9d5ry0");
                 }
                 List<WxMpTemplateDataReqDto> list = new ArrayList<>();

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/PipeAppointmentConfirmOrderServiceImpl.java

@@ -1213,7 +1213,7 @@ public class PipeAppointmentConfirmOrderServiceImpl implements PipeAppointmentCo
             // 	3f-xg-UmbhgSb0QrU_3QYoN70uFWPfbhkBMhObgr3CE
             if (EnvEnum.HSD.getEnvName().equals(env)) {
                 param.setTemplateId("3f-xg-UmbhgSb0QrU_3QYoN70uFWPfbhkBMhObgr3CE");
-            } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+            } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                 param.setTemplateId("roTC0SQzXdla8FZJLyl3X84cSbrOsLMikD9lpmPD3YY");
             }
             List<SendMpMessageReqVO.TemplateData> list = new ArrayList<>();

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderInspectionServiceImpl.java

@@ -183,7 +183,7 @@ public class BoilerTaskOrderInspectionServiceImpl implements BoilerTaskOrderInsp
                     param.setMemberId(memberId);
                     if (EnvEnum.LOCAL.getEnvName().equals(env)) {
                         param.setTemplateId("_hhzHmx5P7t2_fptmyUPhk6JHCEzu0lC47ewGHqrCfM");
-                    } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                    } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                         param.setTemplateId("jIRqD-_mb6nZb4xvUDjmTQso1llTpE8i5-NkEnlI7cc");
                     }
                     List<WxMpTemplateDataReqDto> list = new ArrayList<>();

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

@@ -2186,7 +2186,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             BoilerTaskOrderItemDO taskOrderItem = new BoilerTaskOrderItemDO();
             taskOrderItem.setTaskStatus(TaskOrderStatusEnum.CANCEL.getStatus());
             boilerTaskOrderItemMapper.update(taskOrderItem, new LambdaUpdateWrapper<BoilerTaskOrderItemDO>().eq(BoilerTaskOrderItemDO::getOrderId, id));
-            if (EnvEnum.UAT.getEnvName().equals(env)) {
+            if (EnvEnum.PROD.getEnvName().equals(env)) {
                 pushTaskOrderService.pushFinanceSystem(taskOrderDO);
             }
         }
@@ -7102,7 +7102,28 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         if (equipBoilerDO.getNextOutCheckDate() != null){
             taskOrderItemDetailsVO.setNextOutCheckDate(LocalDate.from(equipBoilerDO.getNextOutCheckDate()));
         }
+
         taskOrderItemDetailsVO.setUseUnitName(taskOrderDO.getUseUnitName());
+        taskOrderItemDetailsVO.setUseUnitCode(taskOrderDO.getUnitCode());
+        taskOrderItemDetailsVO.setOrderNo(taskOrderDO.getOrderNo());
+
+        if (taskOrderItemDO.getMainChecker() != null){
+            AdminUserRespDTO manager = adminUserApi.getUser(taskOrderItemDO.getMainChecker()).getData();
+            if (manager != null){
+                taskOrderItemDetailsVO.setMainChecker(manager.getNickname());
+            }
+        }
+
+        List<BoilerTaskOrderUserDO> boilerTaskOrderUserDOS = boilerTaskOrderUserMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderUserDO>()
+                .eq(BoilerTaskOrderUserDO::getOrderId,taskOrderDO.getId()));
+        if (!boilerTaskOrderUserDOS.isEmpty()){
+            List<String> uIds = boilerTaskOrderUserDOS.stream().map(BoilerTaskOrderUserDO::getUserId).toList();
+            List<AdminUserRespDTO> checkUsers = adminUserApi.getUserList(uIds).getData();
+            if (!checkUsers.isEmpty()){
+                taskOrderItemDetailsVO.setCheckers(checkUsers.stream().map(AdminUserRespDTO::getNickname).collect(Collectors.joining(",")));
+            }
+        }
+
         taskOrderItemDetailsVO.setCheckDate(taskOrderDO.getCheckDate());
         taskOrderItemDetailsVO.setCheckType(taskOrderDO.getCheckType());
         String checkTypeName = switch (taskOrderDO.getCheckType()) {
@@ -7115,12 +7136,35 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         //主报告检验结论
         BoilerTaskOrderItemReportDO mainReport = taskOrderItemReportMapper.selectOne(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
                 .eq(BoilerTaskOrderItemReportDO::getReportType, 100)
-                .eq(BoilerTaskOrderItemReportDO::getOrderId, taskOrderDO.getId())
+                .eq(BoilerTaskOrderItemReportDO::getOrderItemId, taskOrderItemDO.getId())
                 .eq(BoilerTaskOrderItemReportDO::getTaskStatus, 800), false);
         if (mainReport != null){
+
             taskOrderItemDetailsVO.setMainConclusion(mainReport.getReportConclusion());
             taskOrderItemDetailsVO.setReportNo(mainReport.getReportNo());
+            taskOrderItemDetailsVO.setRecordNo(mainReport.getReportNo());
+
+            taskOrderItemDetailsVO.setApprovalName(mainReport.getApprovalName());
+            if (mainReport.getApprovalTime() != null){
+                taskOrderItemDetailsVO.setApprovalTime(LocalDate.from(mainReport.getApprovalTime()));
+            }
+            taskOrderItemDetailsVO.setRatifyName(mainReport.getRatifyName());
+            if (mainReport.getRatifyTime() != null){
+                taskOrderItemDetailsVO.setRatifyTime(LocalDate.from(mainReport.getRatifyTime()));
+            }
+
         }
+
+        //检验项目
+        List<BoilerTaskOrderItemReportDO> reportDOList = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
+                .eq(BoilerTaskOrderItemReportDO::getOrderItemId, taskOrderItemDO.getId())
+                .eq(BoilerTaskOrderItemReportDO::getTaskStatus, 800)
+                .in(BoilerTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.MAIN_REPORT.getType(), TaskOrderItemReportTypeEnum.SUB_REPORT.getType(),
+                    TaskOrderItemReportTypeEnum.SOLO_TRIP_REPORT.getType()));
+        if (!reportDOList.isEmpty()){
+            taskOrderItemDetailsVO.setCheckProject(reportDOList.stream().map(BoilerTaskOrderItemReportDO::getReportName).collect(Collectors.joining(",")));
+        }
+
         //社会统一信用代码socialCreditCode
         if (equipBoilerDO.getUnitCode() != null){
             ClientUnitDTO clientUnit = clientUnitApi.getClientUnitByCode(equipBoilerDO.getUnitCode()).getData();

+ 35 - 11
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderissuereport/BoilerTaskOrderIssueReportServiceImpl.java

@@ -38,6 +38,7 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.
 import cn.start.tz.module.pressure2.controller.admin.bpmtaskinfo.vo.BpmTaskRespVO;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorderinput.vo.PipeTaskOrderInputPrintReqVO;
+import cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo.TaskOrderFilePageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.taskordernontaxrecord.vo.TaskOrderNonTaxRecordPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.taskordernontaxrecord.vo.TaskOrderNonTaxRecordRespVO;
 import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderIssueReportItemRespVO;
@@ -59,6 +60,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.equipboiler.EquipBoilerDO;
 import cn.start.tz.module.pressure2.dal.dataobject.notificationformreport.NotificationformReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.reporttemplate.ReportTemplateDO;
+import cn.start.tz.module.pressure2.dal.dataobject.taskorderfile.TaskOrderFileDO;
 import cn.start.tz.module.pressure2.dal.dataobject.usesignreport.UseSignReportDO;
 import cn.start.tz.module.pressure2.dal.mysql.boilerconnecttbservice.BoilerConnectTbServiceMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilerelectronicreportauditrecord.BoilerElectronicReportAuditRecordMapper;
@@ -93,6 +95,7 @@ import cn.start.tz.module.pressure2.service.membermessage.MemberMessageRemoteSer
 import cn.start.tz.module.pressure2.service.membermessage.vo.SendMpMessageReqVO;
 import cn.start.tz.module.pressure2.service.pdf.PdfService;
 import cn.start.tz.module.pressure2.service.pushtaskorder.PushTaskOrderService;
+import cn.start.tz.module.pressure2.service.taskorderfile.TaskOrderFileService;
 import cn.start.tz.module.pressure2.service.taskordernontaxrecord.TaskOrderNonTaxRecordService;
 import cn.start.tz.module.pressure2.util.JwApiClient;
 import cn.start.tz.module.pressure2.util.vo.ApiResponse;
@@ -302,6 +305,9 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
     @Resource
     private FileApi fileApi;
 
+    @Resource
+    private TaskOrderFileService taskOrderFileService;
+
     @Resource
     private PushTaskOrderService pushTaskOrderService;
 
@@ -476,7 +482,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                         param.setMemberId(memberUser.getId());
                         if (EnvEnum.LOCAL.getEnvName().equals(env)){
                             param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                        } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                        } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                             param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                         }
                         List<WxMpTemplateDataReqDto> list1 = new ArrayList<>();
@@ -548,7 +554,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                         param.setMemberId(memberUser.getId());
                         if (EnvEnum.LOCAL.getEnvName().equals(env)){
                             param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                        } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                        } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                             param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                         }
                         List<SendMpMessageReqVO.TemplateData> list1 = new ArrayList<>();
@@ -768,7 +774,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                                 //TODO 标志
                                 ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
                                 useLogoUrl = fileApi.createFile(outputStream.toByteArray());
-                                if (Objects.equals(env, "uat")) {
+                                if (Objects.equals(env, "prod")) {
                                     useLogoUrl = minioHostouter + useLogoUrl;
                                 } else {
                                     useLogoUrl = minioHost + useLogoUrl;
@@ -832,7 +838,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                 param.setMemberId(finalMemberUser.getId());
                 if (EnvEnum.LOCAL.getEnvName().equals(env)){
                     param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                     param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                 }
                 List<WxMpTemplateDataReqDto> list = new ArrayList<>();
@@ -895,7 +901,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
             }
         });
         // 推送结算系统
-        if (env.equals("uat")){
+        if (env.equals("prod")){
             pushTaskOrderService.pushFinanceSystem(taskOrderDO);
         }
     }
@@ -1060,7 +1066,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                 taskOrderItemDO.getIssueUrl().toLowerCase().startsWith("https://")) {
             issuePdfUrl = taskOrderItemDO.getIssueUrl();
         } else {
-            if (Objects.equals(env, "uat")) {
+            if (Objects.equals(env, "prod")) {
                 issuePdfUrl = minioHostouter + taskOrderItemDO.getIssueUrl();
             } else {
                 issuePdfUrl = minioHost + taskOrderItemDO.getIssueUrl();
@@ -1141,7 +1147,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                         taskOrderItemDO.getUseLogo().toLowerCase().startsWith("https://")) {
                     useLogoPdfUrl = taskOrderItemDO.getUseLogo();
                 } else {
-                    if (Objects.equals(env, "uat")) {
+                    if (Objects.equals(env, "prod")) {
                         useLogoPdfUrl = minioHostouter + taskOrderItemDO.getUseLogo();
                     } else {
                         useLogoPdfUrl = minioHost + taskOrderItemDO.getUseLogo();
@@ -1281,7 +1287,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
         }
 
         // 根据环境返回完整的 URL
-        if (Objects.equals(env, "uat")) {
+        if (Objects.equals(env, "prod")) {
             return minioHostouter + useLogo;
         } else {
             return minioHost + useLogo;
@@ -1491,7 +1497,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     param.setMemberId(finalMemberUser.getId());
                     if (EnvEnum.LOCAL.getEnvName().equals(env)) {
                         param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                    } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                    } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                         param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                     }
                     List<WxMpTemplateDataReqDto> list = new ArrayList<>();
@@ -1553,7 +1559,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     });
                 }
                 // 推送结算系统
-                if (env.equals("uat")){
+                if (env.equals("prod")){
                     pushTaskOrderService.pushFinanceSystem(taskOrderDO);
                 }
 
@@ -2508,6 +2514,24 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                 }
             }
         }
+        // 查询附件文件
+        TaskOrderFilePageReqVO filePageReqVO = new TaskOrderFilePageReqVO();
+        filePageReqVO.setOrderItemId(orderItemId);
+        filePageReqVO.setPageSize(Integer.MAX_VALUE);
+        PageResult<TaskOrderFileDO> filePageResult =
+                taskOrderFileService.getTaskOrderFilePage(filePageReqVO);
+        if (CollUtil.isNotEmpty(filePageResult.getList())) {
+            List<BoilerTaskOrderArchiveDetailRespVO.AttachmentFile> attachmentFiles = new ArrayList<>();
+            for (TaskOrderFileDO fileDO : filePageResult.getList()) {
+                BoilerTaskOrderArchiveDetailRespVO.AttachmentFile attachmentFile = new BoilerTaskOrderArchiveDetailRespVO.AttachmentFile();
+                attachmentFile.setId(fileDO.getId());
+                attachmentFile.setFileName(fileDO.getFileName());
+                attachmentFile.setFileUrl(fileDO.getFileUrl());
+                attachmentFile.setCreateTime(fileDO.getCreateTime());
+                attachmentFiles.add(attachmentFile);
+            }
+            taskOrderArchiveDetail.setAttachmentFiles(attachmentFiles);
+        }
         return taskOrderArchiveDetail;
     }
 
@@ -2812,7 +2836,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
             }
         }
         
-        if (EnvEnum.UAT.getEnvName().equals(env)) {
+        if (EnvEnum.PROD.getEnvName().equals(env)) {
             reportUrl = minioHostouter + fileUrl;
         } else {
             reportUrl = minioHost + fileUrl;

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java

@@ -521,7 +521,7 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
                 fileUrl = fileApi.createFile(pdf);
             }
 
-            if (Objects.equals(env, "uat")) {
+            if (Objects.equals(env, "prod")) {
                 reportUrl = minioHostouter + fileUrl;
             } else {
                 reportUrl = minioHost + fileUrl;

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderInspectionServiceImpl.java

@@ -194,7 +194,7 @@ public class PipeTaskOrderInspectionServiceImpl implements PipeTaskOrderInspecti
                     param.setMemberId(memberId);
                     if (EnvEnum.LOCAL.getEnvName().equals(env)) {
                         param.setTemplateId("_hhzHmx5P7t2_fptmyUPhk6JHCEzu0lC47ewGHqrCfM");
-                    } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                    } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                         param.setTemplateId("jIRqD-_mb6nZb4xvUDjmTQso1llTpE8i5-NkEnlI7cc");
                     }
                     List<WxMpTemplateDataReqDto> list = new ArrayList<>();

+ 45 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java

@@ -1838,7 +1838,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             taskOrderItem.setTaskStatus(TaskOrderStatusEnum.CANCEL.getStatus());
             pipeTaskOrderItemMapper.update(taskOrderItem, new LambdaUpdateWrapper<PipeTaskOrderItemDO>().eq(PipeTaskOrderItemDO::getOrderId, id));
 
-            if (EnvEnum.UAT.getEnvName().equals(env)) {
+            if (EnvEnum.PROD.getEnvName().equals(env)) {
                 pushTaskOrderService.pushFinanceSystem(taskOrderDO);
             }
         }
@@ -6271,7 +6271,27 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         if (equipPipeDO.getNextYearCheckDate() != null){
             taskOrderItemDetailsVO.setNextYearCheckDate(LocalDate.from(equipPipeDO.getNextYearCheckDate()));
         }
+
         taskOrderItemDetailsVO.setUseUnitName(taskOrderDO.getUseUnitName());
+        taskOrderItemDetailsVO.setUseUnitCode(taskOrderDO.getUnitCode());
+        taskOrderItemDetailsVO.setOrderNo(taskOrderDO.getOrderNo());
+        if (taskOrderDO.getManagerId() != null){
+            AdminUserRespDTO manager = adminUserApi.getUser(taskOrderDO.getManagerId()).getData();
+            if (manager != null){
+                taskOrderItemDetailsVO.setMainChecker(manager.getNickname());
+            }
+        }
+
+        List<PipeTaskOrderUserDO> pipeTaskOrderUserDOS = pipeTaskOrderUserMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderUserDO>()
+                .eq(PipeTaskOrderUserDO::getOrderId,taskOrderDO.getId()));
+        if (!pipeTaskOrderUserDOS.isEmpty()){
+            List<String> uIds = pipeTaskOrderUserDOS.stream().map(PipeTaskOrderUserDO::getUserId).toList();
+            List<AdminUserRespDTO> checkUsers = adminUserApi.getUserList(uIds).getData();
+            if (!checkUsers.isEmpty()){
+                taskOrderItemDetailsVO.setCheckers(checkUsers.stream().map(AdminUserRespDTO::getNickname).collect(Collectors.joining(",")));
+            }
+        }
+
         taskOrderItemDetailsVO.setCheckDate(taskOrderDO.getCheckDate());
         taskOrderItemDetailsVO.setCheckType(taskOrderDO.getCheckType());
         String checkTypeName = switch (taskOrderDO.getCheckType()) {
@@ -6280,15 +6300,39 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             default -> "";
         };
         taskOrderItemDetailsVO.setCheckTypeName(checkTypeName);
+
         //主报告检验结论
         PipeTaskOrderItemReportDO mainReport = taskOrderItemReportMapper.selectOne(new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
                 .eq(PipeTaskOrderItemReportDO::getReportType, 100)
                 .eq(PipeTaskOrderItemReportDO::getOrderId, taskOrderDO.getId())
                 .eq(PipeTaskOrderItemReportDO::getTaskStatus, 800), false);
         if (mainReport != null){
+
             taskOrderItemDetailsVO.setMainConclusion(mainReport.getReportConclusion());
             taskOrderItemDetailsVO.setReportNo(mainReport.getReportNo());
+            taskOrderItemDetailsVO.setRecordNo(mainReport.getReportNo());
+
+            taskOrderItemDetailsVO.setApprovalName(mainReport.getApprovalName());
+            if (mainReport.getApprovalTime() != null){
+                taskOrderItemDetailsVO.setApprovalTime(LocalDate.from(mainReport.getApprovalTime()));
+            }
+            taskOrderItemDetailsVO.setRatifyName(mainReport.getRatifyName());
+            if (mainReport.getRatifyTime() != null){
+                taskOrderItemDetailsVO.setRatifyTime(LocalDate.from(mainReport.getRatifyTime()));
+            }
+
         }
+
+        //检验项目
+        List<PipeTaskOrderItemReportDO> reportDOList = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
+                .eq(PipeTaskOrderItemReportDO::getOrderId, taskOrderDO.getId())
+                .eq(PipeTaskOrderItemReportDO::getTaskStatus, 800)
+                .in(PipeTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.MAIN_REPORT.getType(), TaskOrderItemReportTypeEnum.SUB_REPORT.getType(),
+                        TaskOrderItemReportTypeEnum.SOLO_TRIP_REPORT.getType()));
+        if (!reportDOList.isEmpty()){
+            taskOrderItemDetailsVO.setCheckProject(reportDOList.stream().map(PipeTaskOrderItemReportDO::getReportName).collect(Collectors.joining(",")));
+        }
+
         //社会统一信用代码socialCreditCode
         if (equipPipeDO.getUnitCode() != null){
             ClientUnitDTO clientUnit = clientUnitApi.getClientUnitByCode(equipPipeDO.getUnitCode()).getData();

+ 35 - 11
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderissuereport/PipeTaskOrderIssueReportServiceImpl.java

@@ -25,6 +25,7 @@ import cn.start.tz.module.member.api.user.dto.MemberUserRespDTO;
 import cn.start.tz.module.member.api.user.dto.SendAppMpMessageReqDTO;
 import cn.start.tz.module.member.api.user.dto.WxMpTemplateDataReqDto;
 import cn.start.tz.module.pressure2.constant.TemplateIdConstants;
+import cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo.TaskOrderFilePageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.taskordernontaxrecord.vo.TaskOrderNonTaxRecordPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.taskordernontaxrecord.vo.TaskOrderNonTaxRecordRespVO;
 import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderIssueReportItemRespVO;
@@ -32,6 +33,7 @@ import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderIssueRe
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.BoilerTaskOrderSignFileDO;
 import cn.start.tz.module.pressure2.dal.dataobject.notificationformreport.NotificationformReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
+import cn.start.tz.module.pressure2.dal.dataobject.taskorderfile.TaskOrderFileDO;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskordersignfile.BoilerTaskOrderSignFileMapper;
 import cn.start.tz.module.pressure2.dal.mysql.dynamictbins.DynamicTbInsMapper;
 import cn.start.tz.module.pressure2.dal.mysql.notificationformreport.NotificationformReportMapper;
@@ -95,6 +97,7 @@ import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
 import cn.start.tz.module.pressure2.service.pipetaskorderitemreportrecord.PipeTaskOrderItemReportRecordService;
 import cn.start.tz.module.pressure2.service.pipetaskorderitemreportversion.PipeTaskOrderItemReportVersionService;
 import cn.start.tz.module.pressure2.service.pushtaskorder.PushTaskOrderService;
+import cn.start.tz.module.pressure2.service.taskorderfile.TaskOrderFileService;
 import cn.start.tz.module.pressure2.service.taskordernontaxrecord.TaskOrderNonTaxRecordService;
 import cn.start.tz.module.pressure2.util.JwApiClient;
 import cn.start.tz.module.pressure2.util.vo.ApiResponse;
@@ -295,6 +298,9 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
     @Resource
     private FileApi fileApi;
 
+    @Resource
+    private TaskOrderFileService taskOrderFileService;
+
     @Resource
     private PushTaskOrderService pushTaskOrderService;
 
@@ -471,7 +477,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                         param.setMemberId(memberUser.getId());
                         if (EnvEnum.LOCAL.getEnvName().equals(env)){
                             param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                        } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                        } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                             param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                         }
                         List<WxMpTemplateDataReqDto> list1 = new ArrayList<>();
@@ -709,7 +715,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                                             //TODO 标志
                                             ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
                                             useLogoUrl = fileApi.createFile(outputStream.toByteArray());
-                                            if (Objects.equals(env, "uat")) {
+                                            if (Objects.equals(env, "prod")) {
                                                 useLogoUrl = minioHostouter + useLogoUrl;
                                             } else {
                                                 useLogoUrl = minioHost + useLogoUrl;
@@ -779,7 +785,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                 param.setMemberId(finalMemberUser.getId());
                 if (EnvEnum.LOCAL.getEnvName().equals(env)){
                     param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                     param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                 }
                 List<WxMpTemplateDataReqDto> list = new ArrayList<>();
@@ -842,7 +848,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
             }
         });
         // 推送结算系统
-        if (env.equals("uat")){
+        if (env.equals("prod")){
             pushTaskOrderService.pushFinanceSystem(taskOrderDO);
         }
     }
@@ -1019,7 +1025,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                 taskOrderItemDO.getIssueUrl().toLowerCase().startsWith("https://")) {
             issuePdfUrl = taskOrderItemDO.getIssueUrl();
         } else {
-            if (Objects.equals(env, "uat")) {
+            if (Objects.equals(env, "prod")) {
                 issuePdfUrl = minioHostouter + taskOrderItemDO.getIssueUrl();
             } else {
                 issuePdfUrl = minioHost + taskOrderItemDO.getIssueUrl();
@@ -1100,7 +1106,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                         taskOrderItemDO.getUseLogo().toLowerCase().startsWith("https://")) {
                     useLogoPdfUrl = taskOrderItemDO.getUseLogo();
                 } else {
-                    if (Objects.equals(env, "uat")) {
+                    if (Objects.equals(env, "prod")) {
                         useLogoPdfUrl = minioHostouter + taskOrderItemDO.getUseLogo();
                     } else {
                         useLogoPdfUrl = minioHost + taskOrderItemDO.getUseLogo();
@@ -1229,7 +1235,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
         }
 
         // 根据环境返回完整的 URL
-        if (Objects.equals(env, "uat")) {
+        if (Objects.equals(env, "prod")) {
             return minioHostouter + useLogo;
         } else {
             return minioHost + useLogo;
@@ -1396,7 +1402,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                                                 //TODO 标志
                                                 ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
                                                 useLogoUrl = fileApi.createFile(outputStream.toByteArray());
-                                                if (Objects.equals(env, "uat")) {
+                                                if (Objects.equals(env, "prod")) {
                                                     useLogoUrl = minioHostouter + useLogoUrl;
                                                 } else {
                                                     useLogoUrl = minioHost + useLogoUrl;
@@ -1467,7 +1473,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                     param.setMemberId(finalMemberUser.getId());
                     if (EnvEnum.LOCAL.getEnvName().equals(env)) {
                         param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                    } else if (EnvEnum.UAT.getEnvName().equals(env)) {
+                    } else if (EnvEnum.PROD.getEnvName().equals(env)) {
                         param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
                     }
                     List<WxMpTemplateDataReqDto> list = new ArrayList<>();
@@ -1530,7 +1536,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                     });
                 }
                 // 推送结算系统
-                if (env.equals("uat")){
+                if (env.equals("prod")){
                     pushTaskOrderService.pushFinanceSystem(taskOrderDO);
                 }
 
@@ -2494,6 +2500,24 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                 }
             }
         }
+        // 查询附件文件
+        TaskOrderFilePageReqVO filePageReqVO = new TaskOrderFilePageReqVO();
+        filePageReqVO.setOrderItemId(orderItemId);
+        filePageReqVO.setPageSize(Integer.MAX_VALUE);
+        PageResult<TaskOrderFileDO> filePageResult =
+                taskOrderFileService.getTaskOrderFilePage(filePageReqVO);
+        if (CollUtil.isNotEmpty(filePageResult.getList())) {
+            List<PipeTaskOrderArchiveDetailRespVO.AttachmentFile> attachmentFiles = new ArrayList<>();
+            for (TaskOrderFileDO fileDO : filePageResult.getList()) {
+                PipeTaskOrderArchiveDetailRespVO.AttachmentFile attachmentFile = new PipeTaskOrderArchiveDetailRespVO.AttachmentFile();
+                attachmentFile.setId(fileDO.getId());
+                attachmentFile.setFileName(fileDO.getFileName());
+                attachmentFile.setFileUrl(fileDO.getFileUrl());
+                attachmentFile.setCreateTime(fileDO.getCreateTime());
+                attachmentFiles.add(attachmentFile);
+            }
+            taskOrderArchiveDetail.setAttachmentFiles(attachmentFiles);
+        }
         return taskOrderArchiveDetail;
     }
 
@@ -2798,7 +2822,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
             }
         }
 
-        if (EnvEnum.UAT.getEnvName().equals(env)) {
+        if (EnvEnum.PROD.getEnvName().equals(env)) {
             reportUrl = minioHostouter + fileUrl;
         } else {
             reportUrl = minioHost + fileUrl;

+ 2 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pushtaskorder/PushTaskOrderServiceImpl.java

@@ -307,7 +307,7 @@ public class PushTaskOrderServiceImpl implements PushTaskOrderService {
         }
 
 
-        if (profilesEnv.equals("uat")) {
+        if (profilesEnv.equals("prod")) {
             reqDTO.setRemark("测试");
         }
         // reqDTO.setServiceFee(taskOrderDO.getServiceAmount());
@@ -494,7 +494,7 @@ public class PushTaskOrderServiceImpl implements PushTaskOrderService {
         }
 
 
-        if (profilesEnv.equals("uat")) {
+        if (profilesEnv.equals("prod")) {
             reqDTO.setRemark("测试");
         }
         // reqDTO.setServiceFee(taskOrderDO.getServiceAmount());

+ 12 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/synchronization/SynchronizationServiceImpl.java

@@ -530,6 +530,18 @@ public class SynchronizationServiceImpl implements SynchronizationService {
             equipBoilerDO.setEquipStreet(area != null ? area.getId() : null);
         }
 
+        // 增城市的设置为增城区
+        if ("440183".equals(boilerDto.AREACODE)){
+            equipBoilerDO.setEquipDistrict(440100);
+            equipBoilerDO.setEquipStreet(440118);
+        }
+
+        // 从化市的设置为从化区
+        if ("440184".equals(boilerDto.AREACODE)){
+            equipBoilerDO.setEquipDistrict(440100);
+            equipBoilerDO.setEquipStreet(440117);
+        }
+
         // 设置设备基本信息
         equipBoilerDO.setEquipCode(boilerDto.REGISTERNO);
         equipBoilerDO.setUseRegisterNo(boilerDto.USENO);

+ 11 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorder/TaskOrderService.java

@@ -3,6 +3,9 @@ package cn.start.tz.module.pressure2.service.taskorder;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.TaskOrderExportVO;
+
+import java.util.List;
 
 /**
  * 统一任务单 Service 接口
@@ -12,4 +15,12 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTa
 public interface TaskOrderService {
 
     PageResult<BoilerTaskOrderRespVO> getTaskOrderPage(BoilerTaskOrderPageReqVO pageReqVO);
+
+    /**
+     * 获取任务单设备导出列表(锅炉+管道合并)
+     *
+     * @param pageReqVO 查询条件
+     * @return 导出数据列表
+     */
+    List<TaskOrderExportVO> getTaskOrderItemExportList(BoilerTaskOrderPageReqVO pageReqVO);
 }

+ 93 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorder/TaskOrderServiceImpl.java

@@ -1,12 +1,18 @@
 package cn.start.tz.module.pressure2.service.taskorder;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.TaskOrderExportVO;
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderuser.BoilerTaskOrderUserDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderuser.PipeTaskOrderUserDO;
+import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrderItemQueryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderuser.BoilerTaskOrderUserMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemQueryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderuser.PipeTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.dal.mysql.taskorder.UnifiedTaskOrderMapper;
 import cn.start.tz.module.pressure2.util.DeptDataPermissionUtil;
@@ -41,6 +47,12 @@ public class TaskOrderServiceImpl implements TaskOrderService {
     @Resource
     private DeptApi deptApi;
 
+    @Resource
+    private BoilerTaskOrderItemQueryMapper boilerTaskOrderItemQueryMapper;
+
+    @Resource
+    private PipeTaskOrderItemQueryMapper pipeTaskOrderItemQueryMapper;
+
     @Override
     public PageResult<BoilerTaskOrderRespVO> getTaskOrderPage(BoilerTaskOrderPageReqVO pageReqVO) {
         pageReqVO = DeptDataPermissionUtil.generateDeptDataPermissionReq(pageReqVO);
@@ -86,4 +98,85 @@ public class TaskOrderServiceImpl implements TaskOrderService {
 
         return new PageResult<>(taskOrderRespVOS, total);
     }
+
+    @Override
+    public List<TaskOrderExportVO> getTaskOrderItemExportList(BoilerTaskOrderPageReqVO pageReqVO) {
+        // 1. 检验员筛选 → 转换为任务单ID列表
+        if (CollUtil.isNotEmpty(pageReqVO.getInspectorIds())) {
+            List<String> boilerOrderIds = boilerTaskOrderUserMapper.selectList(
+                    new LambdaQueryWrapperX<BoilerTaskOrderUserDO>()
+                            .in(BoilerTaskOrderUserDO::getUserId, pageReqVO.getInspectorIds()))
+                    .stream().map(BoilerTaskOrderUserDO::getOrderId).distinct().toList();
+            List<String> pipeOrderIds = pipeTaskOrderUserMapper.selectList(
+                    new LambdaQueryWrapperX<PipeTaskOrderUserDO>()
+                            .in(PipeTaskOrderUserDO::getUserId, pageReqVO.getInspectorIds()))
+                    .stream().map(PipeTaskOrderUserDO::getOrderId).distinct().toList();
+            List<String> orderIds = new ArrayList<>(boilerOrderIds);
+            orderIds.addAll(pipeOrderIds);
+            orderIds = orderIds.stream().distinct().collect(Collectors.toList());
+            pageReqVO.setIds(CollUtil.isEmpty(orderIds) ? List.of("-1") : orderIds);
+        }
+
+        // 2. submitId(多选逗号分隔字符串)→ submitUserId(List)转换,并清空 submitId 避免 eq 误匹配
+        if (StrUtil.isNotBlank(pageReqVO.getSubmitId()) && CollUtil.isEmpty(pageReqVO.getSubmitUserId())) {
+            List<String> submitUserIdList = Arrays.stream(pageReqVO.getSubmitId().split(","))
+                    .filter(StrUtil::isNotBlank)
+                    .collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(submitUserIdList)) {
+                pageReqVO.setSubmitUserId(submitUserIdList);
+                pageReqVO.setSubmitId(null); // 清空,避免 mapper 中 eq(submitId, "a,b") 无法匹配
+            }
+        }
+
+        // 明细全导出
+        pageReqVO.setTaskStatusList(null);
+
+        // 3. 查询锅炉任务单设备数据
+        List<TaskOrderExportVO> boilerList = boilerTaskOrderItemQueryMapper.selectExportList(pageReqVO);
+
+        // 4. 查询管道任务单设备数据(手动拷贝字段,避免 BeanUtils 泛型丢失)
+        PipeTaskOrderPageReqVO pipeReqVO = new PipeTaskOrderPageReqVO();
+        pipeReqVO.setCheckDate(pageReqVO.getCheckDate());
+        pipeReqVO.setDeptId(pageReqVO.getDeptId());
+        pipeReqVO.setTaskStatusList(pageReqVO.getTaskStatusList());
+        pipeReqVO.setCheckType(pageReqVO.getCheckType());
+        pipeReqVO.setUnitName(pageReqVO.getUnitName());
+        pipeReqVO.setEquipCode(pageReqVO.getEquipCode());
+        pipeReqVO.setOrderNo(pageReqVO.getOrderNo());
+        pipeReqVO.setTaskOrderIds(pageReqVO.getTaskOrderIds());
+        pipeReqVO.setReportNo(pageReqVO.getReportNo());
+        pipeReqVO.setContractNo(pageReqVO.getContractNo());
+        pipeReqVO.setSubmitUserId(pageReqVO.getSubmitUserId());
+        pipeReqVO.setSubmitTime(pageReqVO.getSubmitTime());
+        pipeReqVO.setCheckUserIds(pageReqVO.getCheckUserIds());
+        pipeReqVO.setIds(pageReqVO.getIds());
+        pipeReqVO.setSubmitId(pageReqVO.getSubmitId());
+        pipeReqVO.setInspectorIds(pageReqVO.getInspectorIds());
+        List<TaskOrderExportVO> pipeList = pipeTaskOrderItemQueryMapper.selectExportList(pipeReqVO);
+
+        // 5. 合并结果
+        List<TaskOrderExportVO> allList = new ArrayList<>(boilerList);
+        if (CollUtil.isNotEmpty(pipeList)) {
+            allList.addAll(pipeList);
+        }
+
+        // 6. 批量查询部门名称
+        if (CollUtil.isNotEmpty(allList)) {
+            List<String> deptIds = allList.stream()
+                    .map(TaskOrderExportVO::getDeptId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(deptIds)) {
+                Map<String, DeptRespDTO> deptMap = deptApi.getDeptMap(deptIds);
+                allList.forEach(item -> {
+                    if (item.getDeptId() != null && deptMap.containsKey(item.getDeptId())) {
+                        item.setDeptName(deptMap.get(item.getDeptId()).getName());
+                    }
+                });
+            }
+        }
+
+        return allList;
+    }
 }

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

@@ -0,0 +1,68 @@
+package cn.start.tz.module.pressure2.service.taskorderfile;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.taskorderfile.TaskOrderFileDO;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 任务单附件 Service 接口
+ *
+ * @author 特种管理员
+ */
+public interface TaskOrderFileService extends IService<TaskOrderFileDO>  {
+
+    /**
+     * 创建任务单附件
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    String createTaskOrderFile(@Valid TaskOrderFileSaveReqVO createReqVO);
+
+    /**
+     * 更新任务单附件
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateTaskOrderFile(@Valid TaskOrderFileSaveReqVO updateReqVO);
+
+    /**
+     * 删除任务单附件
+     *
+     * @param id 编号
+     */
+    void deleteTaskOrderFile(String id);
+
+    /**
+     * 获得任务单附件
+     *
+     * @param id 编号
+     * @return 任务单附件
+     */
+    TaskOrderFileDO getTaskOrderFile(String id);
+
+    /**
+     * 获得任务单附件分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 任务单附件分页
+     */
+    PageResult<TaskOrderFileDO> getTaskOrderFilePage(TaskOrderFilePageReqVO pageReqVO);
+
+    /**
+     * 上传文件并创建附件记录
+     *
+     * @param file 上传的文件
+     * @param orderId 任务单ID
+     * @param orderItemId 检验设备单ID
+     * @param equipMainType 设备类型 200锅炉 300管道
+     * @return 附件记录
+     */
+    TaskOrderFileDO uploadAndCreate(MultipartFile file, String orderId, String orderItemId, Integer equipMainType);
+
+}

+ 101 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorderfile/TaskOrderFileServiceImpl.java

@@ -0,0 +1,101 @@
+package cn.start.tz.module.pressure2.service.taskorderfile;
+
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.*;
+import cn.start.tz.module.pressure2.controller.admin.taskorderfile.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.taskorderfile.TaskOrderFileDO;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.PageParam;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+
+import cn.start.tz.module.pressure2.dal.mysql.taskorderfile.TaskOrderFileMapper;
+import cn.start.tz.module.infra.api.file.FileApi;
+import org.springframework.web.multipart.MultipartFile;
+import cn.hutool.core.io.IoUtil;
+
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.start.tz.module.pressure2.enums.ErrorCodeConstants.*;
+
+/**
+ * 任务单附件 Service 实现类
+ *
+ * @author 特种管理员
+ */
+@Service
+@Validated
+public class TaskOrderFileServiceImpl extends ServiceImpl<TaskOrderFileMapper, TaskOrderFileDO> implements TaskOrderFileService {
+
+    @Resource
+    private TaskOrderFileMapper taskOrderFileMapper;
+
+    @Resource
+    private FileApi fileApi;
+
+    @Override
+    public String createTaskOrderFile(TaskOrderFileSaveReqVO createReqVO) {
+        // 插入
+        TaskOrderFileDO taskOrderFile = BeanUtils.toBean(createReqVO, TaskOrderFileDO.class);
+        taskOrderFileMapper.insert(taskOrderFile);
+        // 返回
+        return taskOrderFile.getId();
+    }
+
+    @Override
+    public void updateTaskOrderFile(TaskOrderFileSaveReqVO updateReqVO) {
+        // 校验存在
+        validateTaskOrderFileExists(updateReqVO.getId());
+        // 更新
+        TaskOrderFileDO updateObj = BeanUtils.toBean(updateReqVO, TaskOrderFileDO.class);
+        taskOrderFileMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteTaskOrderFile(String id) {
+        // 校验存在
+        validateTaskOrderFileExists(id);
+        // 删除
+        taskOrderFileMapper.deleteById(id);
+    }
+
+    @Override
+    public TaskOrderFileDO uploadAndCreate(MultipartFile file, String orderId, String orderItemId, Integer equipMainType) {
+        try {
+            // 上传文件到文件服务
+            byte[] content = IoUtil.readBytes(file.getInputStream());
+            String fileUrl = fileApi.createFile(file.getOriginalFilename(), null, content);
+            // 创建附件记录
+            TaskOrderFileDO taskOrderFile = new TaskOrderFileDO();
+            taskOrderFile.setFileUrl(fileUrl);
+            taskOrderFile.setFileName(file.getOriginalFilename());
+            taskOrderFile.setOrderId(orderId);
+            taskOrderFile.setOrderItemId(orderItemId);
+            taskOrderFile.setEquipMainType(equipMainType);
+            taskOrderFileMapper.insert(taskOrderFile);
+            return taskOrderFile;
+        } catch (Exception e) {
+            throw exception(TASK_ORDER_FILE_UPLOAD_FAIL);
+        }
+    }
+
+    private void validateTaskOrderFileExists(String id) {
+        if (taskOrderFileMapper.selectById(id) == null) {
+            throw exception(TASK_ORDER_FILE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public TaskOrderFileDO getTaskOrderFile(String id) {
+        return taskOrderFileMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<TaskOrderFileDO> getTaskOrderFilePage(TaskOrderFilePageReqVO pageReqVO) {
+        return taskOrderFileMapper.selectPage(pageReqVO);
+    }
+
+}

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskordernontaxrecord/TaskOrderNonTaxRecordServiceImpl.java

@@ -745,7 +745,7 @@ public class TaskOrderNonTaxRecordServiceImpl extends ServiceImpl<TaskOrderNonTa
             String fileName = "nonTaxPayment_" + taskOrderNonTaxRecordDO.getPaymentInstructionNo() + ".pdf";
             attachmentPath = fileApi.createFile(fileName, pdfOutputStream.toByteArray());
 
-            if (Objects.equals(env, "uat")) {
+            if (Objects.equals(env, "prod")) {
                 attachmentPath = minioHostouter + attachmentPath;
             } else {
                 attachmentPath = minioHost + attachmentPath;

+ 184 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,184 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+
+--- #################### 数据库相关配置 ####################
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm:// 192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+--- #################### MQ 消息队列相关配置 ####################
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+rocketmq:
+  name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+#rocketmq:
+#  name-server: 192.168.20.224:9876
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    admin:
+      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# 日志文件配置
+logging:
+  level:
+      # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.pressure2.dal.mysql: debug
+    cn.start.tz.module.pressure2.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.pressure2.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  env: # 多环境的配置项
+    tag: ${HOSTNAME}
+    name: prod
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+  minio:
+     host: http://192.168.19.190:9000/cyjw/
+     hostouter: http://192.168.19.190:9000/cyjw/
+#     hostouter: https://tjt.gzsei.cn/app-api/dexdev/
+  office:
+    docservice:
+      url: 'http://192.168.0.53:6180/'
+      callbackUrl: 'http://192.168.0.92:48097/admin-api/pressure2/dynamic-tb/track'
+      ignoreSSLCertificate: true
+      lossyEdit: epub, fb2, html, odt, ott, rtf, txt, csv, ods, ots, odp, otp
+      security:
+        key: 'bowin_jwt-secret'
+        header: ''
+        tokenValidityInMinutes: 120
+  qrCodeWebUrl:
+    pipe: 'http://192.168.19.165:40081/pressure2/qr-report/pipe?id=%s'
+    boiler: 'http://192.168.19.165:40081/pressure2/qr-report/boiler?id=%s'
+
+
+feign:
+  client:
+    #direct-grape-service: http://127.0.0.1:48010  # 本地测试
+    direct-grape-service: http://8.138.109.252:48010
+
+external:
+  oa:
+    #    host: http://192.168.18.115
+    host: http://192.168.19.68
+    rest:
+      #      userName: flowsend
+      #      password: 69030b1b-44b7-45d0-aaf3-e73968933642
+      userName: restflow
+      password: aefa27bf-518d-42cf-9ae1-84c8fb40552b
+      loginName: 300801
+      enableProd: true
+    # 定时获取状态
+    cron: 0 0 * * * ?
+synchronization:
+  host: http://192.168.20.70:28081
+  apiKey: cecb02cf8d1c7be3a05987d6acc6d913666d9cb72cc061039ffb19ecaead1bb9
+  cron: 0 0 0 * * ?
+grapecity:
+  url: http://192.168.19.190:48011
+app-auth:
+  enabled: true
+  base-url: https://cloud-admin-uat.gzsei.com
+  app-id: 20260527
+  app-secret: ce9fba85d73b475ab3897cbb9d62d61d

+ 12 - 16
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipe/EquipPipeMapper.xml

@@ -408,14 +408,12 @@
 
         <where>
             ep.deleted = 0
-            <choose>
-                <when test="isEffective != null and isEffective == '否'">
-                    AND ep.is_effective = '否'
-                </when>
-                <otherwise>
-                    AND ep.is_effective != '否'
-                </otherwise>
-            </choose>
+            <if test='isEffective != null and isEffective == "否"'>
+                AND ep.is_effective = '否'
+            </if>
+            <if test='isEffective != null and isEffective == "是"'>
+                AND ep.is_effective != '否'
+            </if>
 
             <choose>
                 <when test="checkType == 100">
@@ -580,14 +578,12 @@
 
         <where>
             ep.deleted = 0
-            <choose>
-                <when test="isEffective != null and isEffective == '否'">
-                    AND ep.is_effective = '否'
-                </when>
-                <otherwise>
-                    AND ep.is_effective != '否'
-                </otherwise>
-            </choose>
+            <if test='isEffective != null and isEffective == "否"'>
+                AND ep.is_effective = '否'
+            </if>
+            <if test='isEffective != null and isEffective == "是"'>
+                AND ep.is_effective != '否'
+            </if>
 
             <choose>
                 <when test="checkType == 100">

+ 12 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/taskorderfile/TaskOrderFileMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.start.tz.module.pressure2.dal.mysql.taskorderfile.TaskOrderFileMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 177 - 0
tz-module-quartz/tz-module-quartz-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,177 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      server-addr: nacos-server:8848 # Nacos 服务器地址
+      username: nacos # Nacos 账号
+      password: dexdev@2025 # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: dev # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: dev # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm://192.168.20.224:5236?schema=TZ_CLOUD_DEV
+          username: SYSDBA
+          password: Dexdev2025
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 10 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+# rocketmq 配置项,对应 RocketMQProperties 配置类
+  rocketmq:
+    name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    admin:
+      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: "*" # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.system.dal.mysql: debug
+    cn.start.tz.module.system.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.system.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 微信公众号、小程序相关配置 ####################
+wx:
+  mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+    #    app-id: wx041349c6f39b268b
+    #    secret: 5abee519483bc9f8cb37ce280e814bd0
+    app-id: wx5b23ba7a5589ecbb # 测试号
+    secret: 2a7b3b20c537e52e74afd395eb85f61f
+    # 存储配置,解决 AccessToken 的跨节点的共享
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wx # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+  miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
+    #    appid: wx62056c0d5e8db250
+    #    secret: 333ae72f41552af1e998fe1f54e1584a
+    appid: wxf88e2dba767bb5d6 # wenhualian的接口测试号
+    secret: c2fffd16cb6c0f9c6b649a9828168fb5
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wa # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+
+justauth:
+  enabled: true
+  type:
+    DINGTALK: # 钉钉
+      client-id: dingvrnreaje3yqvzhxg
+      client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+      ignore-check-redirect-uri: true
+    WECHAT_ENTERPRISE: # 企业微信
+      client-id: wwd411c69a39ad2e54
+      client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+      agent-id: 1000004
+      ignore-check-redirect-uri: true
+    # noinspection SpringBootApplicationYaml
+    WECHAT_MINI_APP: # 微信小程序
+      client-id: ${wx.miniapp.appid}
+      client-secret: ${wx.miniapp.secret}
+      ignore-check-redirect-uri: true
+      ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
+    WECHAT_MP: # 微信公众号
+      client-id: ${wx.mp.app-id}
+      client-secret: ${wx.mp.secret}
+      ignore-check-redirect-uri: true
+  cache:
+    type: REDIS
+    prefix: "social_auth_state:" # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+    timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟

+ 200 - 0
tz-module-system/tz-module-system-biz/src/main/resources/application-prod.yaml

@@ -0,0 +1,200 @@
+--- #################### 注册中心 + 配置中心相关配置 ####################
+
+spring:
+  cloud:
+    nacos:
+      #      server-addr: localhost:31848 # Nacos 服务器地址
+      #server-addr: 192.168.19.165:31848 # Nacos 服务器地址server-addr: localhost:31848 # Nacos 服务器地址
+      server-addr: nacos-hs.nacos.svc.cluster.local:8848 # Nacos 服务器地址
+      username: hongsuan # Nacos 账号
+      password: v4cqKnhYwDYu8urT # Nacos 密码
+      discovery: # 【配置中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+        metadata:
+          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+      config: # 【注册中心】配置项
+        namespace: b45ed91e-2b29-4aa8-a143-bbf2fd4e17c4 # 命名空间。这里使用 dev 开发环境
+        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+--- #################### 数据库相关配置 ####################
+spring:
+  # 数据源配置项
+  autoconfigure:
+    exclude:
+      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+  datasource:
+    druid: # Druid 【监控】相关的全局配置
+      web-stat-filter:
+        enabled: true
+      stat-view-servlet:
+        enabled: true
+        allow: # 设置白名单,不填则允许所有访问
+        url-pattern: /druid/*
+        login-username: # 控制台管理用户名和密码
+        login-password:
+      filter:
+        stat:
+          enabled: true
+          log-slow-sql: true # 慢 SQL 记录
+          slow-sql-millis: 100
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+    dynamic: # 多数据源配置
+      druid: # Druid 【连接池】相关的全局配置
+        initial-size: 5 # 初始连接数
+        min-idle: 10 # 最小连接池数量
+        max-active: 20 # 最大连接池数量
+        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+      primary: master
+      datasource:
+        master:
+          url: jdbc:dm://192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          url: jdbc:dm://192.168.20.224:5236?schema=CYJW_CLOUD_UAT
+          username: SYSDBA
+          password: Dexdev2025
+
+
+  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+  data:
+    redis:
+      host: 192.168.20.224 # 地址
+      port: 6379 # 端口
+      database: 5 # 数据库索引
+      password: F7B73743E7AEDD58E58900F4782550BF # 密码,建议生产环境开启
+
+  # rocketmq 配置项,对应 RocketMQProperties 配置类
+  rocketmq:
+    name-server: 192.168.20.224:9876 # RocketMQ Namesrv
+
+--- #################### 定时任务相关配置 ####################
+xxl:
+  job:
+    admin:
+      #addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址
+      addresses: https://aimkt.hofo.co/xxl-job-admin # 调度中心部署跟地址
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+  acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+  expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      exposure:
+        include: "*" # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        instance:
+          service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    cn.start.tz.module.system.dal.mysql: debug
+    cn.start.tz.module.system.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    cn.start.tz.module.system.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+  file:
+    name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 微信公众号、小程序相关配置 ####################
+wx:
+  mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+    #    app-id: wx041349c6f39b268b
+    #    secret: 5abee519483bc9f8cb37ce280e814bd0
+    app-id: wx5b23ba7a5589ecbb # 测试号
+    secret: 2a7b3b20c537e52e74afd395eb85f61f
+    # 存储配置,解决 AccessToken 的跨节点的共享
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wx # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+  miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
+    #    appid: wx62056c0d5e8db250
+    #    secret: 333ae72f41552af1e998fe1f54e1584a
+    appid: wxf88e2dba767bb5d6 # wenhualian的接口测试号
+    secret: c2fffd16cb6c0f9c6b649a9828168fb5
+    config-storage:
+      type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+      key-prefix: wa # Redis Key 的前缀
+      http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+tz:
+  demo: false # 开启演示模式
+  captcha:
+    enable: false
+
+justauth:
+  enabled: true
+  type:
+    DINGTALK: # 钉钉
+      client-id: dingvrnreaje3yqvzhxg
+      client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+      ignore-check-redirect-uri: true
+    WECHAT_ENTERPRISE: # 企业微信
+      client-id: wwd411c69a39ad2e54
+      client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+      agent-id: 1000004
+      ignore-check-redirect-uri: true
+    # noinspection SpringBootApplicationYaml
+    WECHAT_MINI_APP: # 微信小程序
+      client-id: ${wx.miniapp.appid}
+      client-secret: ${wx.miniapp.secret}
+      ignore-check-redirect-uri: true
+      ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验
+    WECHAT_MP: # 微信公众号
+      client-id: ${wx.mp.app-id}
+      client-secret: ${wx.mp.secret}
+      ignore-check-redirect-uri: true
+  cache:
+    type: REDIS
+    prefix: "social_auth_state:" # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+    timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+feign:
+  client:
+    #direct-grape-service: http://127.0.0.1:48010  # 本地测试
+    direct-grape-service: http://8.138.109.252:48010
+
+# 集成cas相关配置信息
+cas:
+  # 单点登录URL
+  #server-url-prefix: https://auth.gzsei.work/prod-api/protocols/cas20
+  server-url-prefix: http://192.168.19.80/prod-api/protocols/cas20
+  # CAS 过滤器拦截的 URL 路径模式(只拦截后台管理系统,不影响移动端/小程序等)
+  url-patterns: /admin-api/*
+  # 忽略的地址
+  ignore-url-list: /admin-api/system/auth/**,/admin-api/system/cas/**,/file/**,/tile/**,/actuator/**,/druid/**,/swagger-ui/**,/v3/api-docs/**,/webjars/**,/error
+  # 认证成功后回调地址
+  #front-url: http://192.168.19.165:40081
+  front-url: https://cyjw.gzsei.work
+  # cas客户端地址
+  #client-host-url: http://192.168.19.165:40081
+  client-host-url: https://cyjw.gzsei.work