xuzhancheng 2 tygodni temu
rodzic
commit
9c97c32bb2
25 zmienionych plików z 1168 dodań i 2 usunięć
  1. 79 1
      build-cyjw/update.sql
  2. 3 0
      tz-module-pressure2/tz-module-pressure2-api/src/main/java/cn/start/tz/module/pressure2/enums/ErrorCodeConstants.java
  3. 4 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemAddReportVO.java
  4. 19 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/WallThicknessReqVO.java
  5. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/dynamictb/vo/DynamicTbColsVO.java
  6. 95 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/usertemplatelibrary/UserTemplateLibraryController.java
  7. 37 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/usertemplatelibrary/vo/UserTemplateLibraryPageReqVO.java
  8. 43 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/usertemplatelibrary/vo/UserTemplateLibraryRespVO.java
  9. 29 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/usertemplatelibrary/vo/UserTemplateLibrarySaveReqVO.java
  10. 107 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/UserWallThicknessTemplateController.java
  11. 34 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/vo/UserWallThicknessTemplatePageReqVO.java
  12. 39 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/vo/UserWallThicknessTemplateRespVO.java
  13. 30 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/vo/UserWallThicknessTemplateSaveReqVO.java
  14. 51 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/usertemplatelibrary/UserTemplateLibraryDO.java
  15. 47 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/userwallthicknesstemplate/UserWallThicknessTemplateDO.java
  16. 31 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/usertemplatelibrary/UserTemplateLibraryMapper.java
  17. 38 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/userwallthicknesstemplate/UserWallThicknessTemplateMapper.java
  18. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  19. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/comm/QC52044_202401RecordOFData.java
  20. 56 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/usertemplatelibrary/UserTemplateLibraryService.java
  21. 75 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/usertemplatelibrary/UserTemplateLibraryServiceImpl.java
  22. 75 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/userwallthicknesstemplate/UserWallThicknessTemplateService.java
  23. 242 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/userwallthicknesstemplate/UserWallThicknessTemplateServiceImpl.java
  24. 12 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/usertemplatelibrary/UserTemplateLibraryMapper.xml
  25. 12 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/userwallthicknesstemplate/UserWallThicknessTemplateMapper.xml

+ 79 - 1
build-cyjw/update.sql

@@ -138,4 +138,82 @@ COMMENT ON COLUMN "PRESSURE2_EQUIP_BOILER_SCHEDULING_FEE"."REDUCE_FEE" IS '免
 
 
 ALTER TABLE "PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT" ADD COLUMN "FEE_TYPE" VARCHAR(50);
-COMMENT ON COLUMN "PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT"."FEE_TYPE" IS '费用类型(1=法定,2=服务)';
+COMMENT ON COLUMN "PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT"."FEE_TYPE" IS '费用类型(1=法定,2=服务)';
+
+
+CREATE TABLE PRESSURE2_EQUIP_BOILER_PRESSURE_PART
+(
+    ID            VARCHAR(64) NOT NULL,
+    BOILER_ID     VARCHAR(64) NOT NULL,
+    PART_TYPE     VARCHAR(64),
+    PART_NAME     VARCHAR(255),
+    SPECIFICATION VARCHAR(128),
+    MATERIAL      VARCHAR(128),
+    REMARK        VARCHAR(500),
+    CREATOR       VARCHAR(64),
+    CREATE_TIME   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    UPDATER       VARCHAR(64),
+    UPDATE_TIME   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    DELETED       CHAR(1)   DEFAULT '0',
+    PRIMARY KEY (ID)
+);
+
+CREATE SEQUENCE PRESSURE2_EQUIP_BOILER_PRESSURE_PART_SEQ START WITH 1 INCREMENT BY 1;
+
+
+ALTER TABLE "PRESSURE2_EQUIP_PIPE_SCHEDULING" ADD COLUMN "SOURCE_ID" VARCHAR(64);
+COMMENT ON COLUMN "PRESSURE2_EQUIP_PIPE_SCHEDULING"."SOURCE_ID" IS '复制行的源id';
+
+CREATE TABLE "PRESSURE2_USER_TEMPLATE_LIBRARY"
+(
+    "ID" VARCHAR2(64) NOT NULL,
+    "USER_ID" VARCHAR2(64) NOT NULL,
+    "TEMPLATE_ID" VARCHAR2(64) NOT NULL,
+    "NAME" VARCHAR2(255) NOT NULL,
+    "DEFAULT_JSON" TEXT,
+    "CREATOR" VARCHAR2(64) DEFAULT '',
+    "CREATE_TIME" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    "UPDATER" VARCHAR2(64) DEFAULT '',
+    "UPDATE_TIME" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    "DELETED" BIT DEFAULT 0,
+    "TEMPLATE_TYPE" VARCHAR2(255),
+    NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
+
+COMMENT ON TABLE "PRESSURE2_USER_TEMPLATE_LIBRARY" IS '用户操作指导书模板库';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."ID" IS '主键';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."USER_ID" IS '用户id';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."TEMPLATE_ID" IS '模版id';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."NAME" IS '模版名称';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."DEFAULT_JSON" IS '模版默认json';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."CREATOR" IS '创建人';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."CREATE_TIME" IS '创建时间';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."UPDATER" IS '更新者';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."UPDATE_TIME" IS '更新时间';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."DELETED" IS '是否删除';
+COMMENT ON COLUMN "PRESSURE2_USER_TEMPLATE_LIBRARY"."TEMPLATE_TYPE" IS '模版类型';
+
+CREATE TABLE "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"
+(
+    "ID" VARCHAR2(64) NOT NULL,
+    "USER_ID" VARCHAR2(64) NOT NULL,
+    "TEMPLATE_ID" VARCHAR2(64) NOT NULL,
+    "NAME" VARCHAR2(255) NOT NULL,
+    "DEFAULT_VALUE" TEXT,
+    "CREATOR" VARCHAR2(64) DEFAULT '',
+    "CREATE_TIME" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    "UPDATER" VARCHAR2(64) DEFAULT '',
+    "UPDATE_TIME" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    "DELETED" BIT DEFAULT 0,
+    NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
+
+COMMENT ON TABLE "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE" IS '用户壁厚测定点数模版';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."ID" IS '主键';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."USER_ID" IS '用户id';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."TEMPLATE_ID" IS '模版id';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."NAME" IS '模版名称';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."DEFAULT_VALUE" IS '模版值';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."CREATOR" IS '创建人';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."CREATE_TIME" IS '创建时间';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."UPDATER" IS '更新者';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."UPDATE_TIME" IS '更新时间';
+COMMENT ON COLUMN "PRESSURE2_USER_WALL_THICKNESS_TEMPLATE"."DELETED" IS '是否删除';

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

@@ -151,4 +151,7 @@ public interface ErrorCodeConstants{
     ErrorCode DYNAMIC_TB_FEE_COL_CODE_EXISTS = new ErrorCode(5017, "承压动态报表字段标识已存在");
 
     ErrorCode INSPECTION_NATURE_TYPE_NOT_EXISTS = new ErrorCode(5018, "检验性质类型关联不存在");
+
+    ErrorCode USER_WALL_THICKNESS_TEMPLATE_NOT_EXISTS = new ErrorCode(5019, "检验性质类型关联报告模版不存在");
+    ErrorCode USER_TEMPLATE_LIBRARY_NOT_EXISTS = new ErrorCode(5020, "用户操作指导书模板库不存在");
 }

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

@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 @Data
 public class BoilerOrderItemAddReportVO {
@@ -23,6 +24,9 @@ public class BoilerOrderItemAddReportVO {
     @Schema(description = "报告类型", example = "6822")
     private Integer reportType;
 
+    @Schema(description = "壁厚测定点位列表")
+    private List<WallThicknessReqVO> wallThicknessList;
+
     private String reportName;
 
     @Schema(description = "费用", example = "6822")

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

@@ -0,0 +1,19 @@
+package cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class WallThicknessReqVO {
+
+    @Schema(description = "编号", example = "A")
+    public String code;
+
+    @Schema(description = "列数", example = "20")
+    public Integer columnNum;
+
+    @Schema(description = "点数", example = "5")
+    public Integer points;
+
+
+}

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

@@ -30,4 +30,6 @@ public class DynamicTbColsVO{
     private Integer versionMax;
 
     private Integer versionNo;
+
+    private String note;
 }

+ 95 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/usertemplatelibrary/UserTemplateLibraryController.java

@@ -0,0 +1,95 @@
+package cn.start.tz.module.pressure2.controller.admin.usertemplatelibrary;
+
+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.usertemplatelibrary.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.usertemplatelibrary.UserTemplateLibraryDO;
+import cn.start.tz.module.pressure2.service.usertemplatelibrary.UserTemplateLibraryService;
+
+@Tag(name = "管理后台 - 用户操作指导书模板库")
+@RestController
+@RequestMapping("/pressure2/user-template-library")
+@Validated
+public class UserTemplateLibraryController {
+
+    @Resource
+    private UserTemplateLibraryService userTemplateLibraryService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建用户操作指导书模板库")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-template-library:create')")
+    public CommonResult<String> createUserTemplateLibrary(@Valid @RequestBody UserTemplateLibrarySaveReqVO createReqVO) {
+        return success(userTemplateLibraryService.createUserTemplateLibrary(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新用户操作指导书模板库")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-template-library:update')")
+    public CommonResult<Boolean> updateUserTemplateLibrary(@Valid @RequestBody UserTemplateLibrarySaveReqVO updateReqVO) {
+        userTemplateLibraryService.updateUserTemplateLibrary(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除用户操作指导书模板库")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('pressure2:user-template-library:delete')")
+    public CommonResult<Boolean> deleteUserTemplateLibrary(@RequestParam("id") String id) {
+        userTemplateLibraryService.deleteUserTemplateLibrary(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得用户操作指导书模板库")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-template-library:query')")
+    public CommonResult<UserTemplateLibraryRespVO> getUserTemplateLibrary(@RequestParam("id") String id) {
+        UserTemplateLibraryDO userTemplateLibrary = userTemplateLibraryService.getUserTemplateLibrary(id);
+        return success(BeanUtils.toBean(userTemplateLibrary, UserTemplateLibraryRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得用户操作指导书模板库分页")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-template-library:query')")
+    public CommonResult<PageResult<UserTemplateLibraryRespVO>> getUserTemplateLibraryPage(@Valid UserTemplateLibraryPageReqVO pageReqVO) {
+        PageResult<UserTemplateLibraryDO> pageResult = userTemplateLibraryService.getUserTemplateLibraryPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, UserTemplateLibraryRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出用户操作指导书模板库 Excel")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-template-library:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportUserTemplateLibraryExcel(@Valid UserTemplateLibraryPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<UserTemplateLibraryDO> list = userTemplateLibraryService.getUserTemplateLibraryPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "用户操作指导书模板库.xls", "数据", UserTemplateLibraryRespVO.class,
+                        BeanUtils.toBean(list, UserTemplateLibraryRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,37 @@
+package cn.start.tz.module.pressure2.controller.admin.usertemplatelibrary.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 UserTemplateLibraryPageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "24234")
+    private String userId;
+
+    @Schema(description = "模版id", example = "794")
+    private String templateId;
+
+    @Schema(description = "模版名称", example = "李四")
+    private String name;
+
+    @Schema(description = "模版默认json")
+    private String defaultJson;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "模版类型", example = "1")
+    private String templateType;
+
+}

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

@@ -0,0 +1,43 @@
+package cn.start.tz.module.pressure2.controller.admin.usertemplatelibrary.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 UserTemplateLibraryRespVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25667")
+    @ExcelProperty("主键")
+    private String id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24234")
+    @ExcelProperty("用户id")
+    private String userId;
+
+    @Schema(description = "模版id", requiredMode = Schema.RequiredMode.REQUIRED, example = "794")
+    @ExcelProperty("模版id")
+    private String templateId;
+
+    @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("模版名称")
+    private String name;
+
+    @Schema(description = "模版默认json")
+    @ExcelProperty("模版默认json")
+    private String defaultJson;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "模版类型", example = "1")
+    @ExcelProperty("模版类型")
+    private String templateType;
+
+}

+ 29 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/usertemplatelibrary/vo/UserTemplateLibrarySaveReqVO.java

@@ -0,0 +1,29 @@
+package cn.start.tz.module.pressure2.controller.admin.usertemplatelibrary.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 UserTemplateLibrarySaveReqVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25667")
+    private String id;
+
+    @Schema(description = "模版id", requiredMode = Schema.RequiredMode.REQUIRED, example = "794")
+    @NotEmpty(message = "模版id不能为空")
+    private String templateId;
+
+    @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "模版名称不能为空")
+    private String name;
+
+    @Schema(description = "模版默认json")
+    private String defaultJson;
+
+    @Schema(description = "模版类型", example = "1")
+    private String templateType;
+
+}

+ 107 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/UserWallThicknessTemplateController.java

@@ -0,0 +1,107 @@
+package cn.start.tz.module.pressure2.controller.admin.userwallthicknesstemplate;
+
+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.userwallthicknesstemplate.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.userwallthicknesstemplate.UserWallThicknessTemplateDO;
+import cn.start.tz.module.pressure2.service.userwallthicknesstemplate.UserWallThicknessTemplateService;
+
+@Tag(name = "管理后台 - 用户壁厚测定点数模版")
+@RestController
+@RequestMapping("/pressure2/user-wall-thickness-template")
+@Validated
+public class UserWallThicknessTemplateController {
+
+    @Resource
+    private UserWallThicknessTemplateService userWallThicknessTemplateService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建用户壁厚测定点数模版")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-wall-thickness-template:create')")
+    public CommonResult<String> createUserWallThicknessTemplate(@Valid @RequestBody UserWallThicknessTemplateSaveReqVO createReqVO) {
+        return success(userWallThicknessTemplateService.createUserWallThicknessTemplate(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新用户壁厚测定点数模版")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-wall-thickness-template:update')")
+    public CommonResult<Boolean> updateUserWallThicknessTemplate(@Valid @RequestBody UserWallThicknessTemplateSaveReqVO updateReqVO) {
+        userWallThicknessTemplateService.updateUserWallThicknessTemplate(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除用户壁厚测定点数模版")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('pressure2:user-wall-thickness-template:delete')")
+    public CommonResult<Boolean> deleteUserWallThicknessTemplate(@RequestParam("id") String id) {
+        userWallThicknessTemplateService.deleteUserWallThicknessTemplate(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得用户壁厚测定点数模版")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-wall-thickness-template:query')")
+    public CommonResult<UserWallThicknessTemplateRespVO> getUserWallThicknessTemplate(@RequestParam("id") String id) {
+        UserWallThicknessTemplateDO userWallThicknessTemplate = userWallThicknessTemplateService.getUserWallThicknessTemplate(id);
+        return success(BeanUtils.toBean(userWallThicknessTemplate, UserWallThicknessTemplateRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得用户壁厚测定点数模版分页")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-wall-thickness-template:query')")
+    public CommonResult<PageResult<UserWallThicknessTemplateRespVO>> getUserWallThicknessTemplatePage(@Valid UserWallThicknessTemplatePageReqVO pageReqVO) {
+        PageResult<UserWallThicknessTemplateDO> pageResult = userWallThicknessTemplateService.getUserWallThicknessTemplatePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, UserWallThicknessTemplateRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出用户壁厚测定点数模版 Excel")
+    @PreAuthorize("@ss.hasPermission('pressure2:user-wall-thickness-template:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportUserWallThicknessTemplateExcel(@Valid UserWallThicknessTemplatePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<UserWallThicknessTemplateDO> list = userWallThicknessTemplateService.getUserWallThicknessTemplatePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "用户壁厚测定点数模版.xls", "数据", UserWallThicknessTemplateRespVO.class,
+                        BeanUtils.toBean(list, UserWallThicknessTemplateRespVO.class));
+    }
+
+    @GetMapping("/page-by-template-and-current-user")
+    @Operation(summary = "根据模板ID和当前登录用户ID查询壁厚测定点数模版列表")
+    @Parameter(name = "templateId", description = "模板ID", required = true)
+    public CommonResult<PageResult<UserWallThicknessTemplateRespVO>> getTemplateByTemplateIdAndCurrentUser(
+            @RequestParam("templateId") String templateId,
+            @Valid UserWallThicknessTemplatePageReqVO pageReqVO) {
+        PageResult<UserWallThicknessTemplateRespVO> pageResult = userWallThicknessTemplateService
+                .getTemplateByTemplateIdAndCurrentUser(templateId, pageReqVO);
+        return success(pageResult);
+    }
+
+
+}

+ 34 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/vo/UserWallThicknessTemplatePageReqVO.java

@@ -0,0 +1,34 @@
+package cn.start.tz.module.pressure2.controller.admin.userwallthicknesstemplate.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 UserWallThicknessTemplatePageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "1077")
+    private String userId;
+
+    @Schema(description = "模版id", example = "23450")
+    private String templateId;
+
+    @Schema(description = "模版名称", example = "王五")
+    private String name;
+
+    @Schema(description = "模版值")
+    private String defaultValue;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 39 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/userwallthicknesstemplate/vo/UserWallThicknessTemplateRespVO.java

@@ -0,0 +1,39 @@
+package cn.start.tz.module.pressure2.controller.admin.userwallthicknesstemplate.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 UserWallThicknessTemplateRespVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "18248")
+    @ExcelProperty("主键")
+    private String id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1077")
+    @ExcelProperty("用户id")
+    private String userId;
+
+    @Schema(description = "模版id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23450")
+    @ExcelProperty("模版id")
+    private String templateId;
+
+    @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @ExcelProperty("模版名称")
+    private String name;
+
+    @Schema(description = "模版值")
+    @ExcelProperty("模版值")
+    private String defaultValue;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,30 @@
+package cn.start.tz.module.pressure2.controller.admin.userwallthicknesstemplate.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 UserWallThicknessTemplateSaveReqVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "18248")
+    private String id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1077")
+    @NotEmpty(message = "用户id不能为空")
+    private String userId;
+
+    @Schema(description = "模版id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23450")
+    @NotEmpty(message = "模版id不能为空")
+    private String templateId;
+
+    @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @NotEmpty(message = "模版名称不能为空")
+    private String name;
+
+    @Schema(description = "模版值")
+    private String defaultValue;
+
+}

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

@@ -0,0 +1,51 @@
+package cn.start.tz.module.pressure2.dal.dataobject.usertemplatelibrary;
+
+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_user_template_library")
+@KeySequence("pressure2_user_template_library_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserTemplateLibraryDO extends BaseDO {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 用户id
+     */
+    private String userId;
+    /**
+     * 模版id
+     */
+    private String templateId;
+    /**
+     * 模版名称
+     */
+    private String name;
+    /**
+     * 模版默认json
+     */
+    private String defaultJson;
+    /**
+     * 模版类型
+     */
+    private String templateType;
+
+}

+ 47 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/userwallthicknesstemplate/UserWallThicknessTemplateDO.java

@@ -0,0 +1,47 @@
+package cn.start.tz.module.pressure2.dal.dataobject.userwallthicknesstemplate;
+
+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_user_wall_thickness_template")
+@KeySequence("pressure2_user_wall_thickness_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserWallThicknessTemplateDO extends BaseDO {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 用户id
+     */
+    private String userId;
+    /**
+     * 模版id
+     */
+    private String templateId;
+    /**
+     * 模版名称
+     */
+    private String name;
+    /**
+     * 模版值
+     */
+    private String defaultValue;
+
+}

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

@@ -0,0 +1,31 @@
+package cn.start.tz.module.pressure2.dal.mysql.usertemplatelibrary;
+
+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.usertemplatelibrary.UserTemplateLibraryDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.start.tz.module.pressure2.controller.admin.usertemplatelibrary.vo.*;
+
+/**
+ * 用户操作指导书模板库 Mapper
+ *
+ * @author 特种管理员
+ */
+@Mapper
+public interface UserTemplateLibraryMapper extends BaseMapperX<UserTemplateLibraryDO> {
+
+    default PageResult<UserTemplateLibraryDO> selectPage(UserTemplateLibraryPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserTemplateLibraryDO>()
+                .eqIfPresent(UserTemplateLibraryDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(UserTemplateLibraryDO::getTemplateId, reqVO.getTemplateId())
+                .likeIfPresent(UserTemplateLibraryDO::getName, reqVO.getName())
+                .eqIfPresent(UserTemplateLibraryDO::getDefaultJson, reqVO.getDefaultJson())
+                .betweenIfPresent(UserTemplateLibraryDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(UserTemplateLibraryDO::getTemplateType, reqVO.getTemplateType())
+                .orderByDesc(UserTemplateLibraryDO::getId));
+    }
+
+}

+ 38 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/userwallthicknesstemplate/UserWallThicknessTemplateMapper.java

@@ -0,0 +1,38 @@
+package cn.start.tz.module.pressure2.dal.mysql.userwallthicknesstemplate;
+
+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.userwallthicknesstemplate.UserWallThicknessTemplateDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.start.tz.module.pressure2.controller.admin.userwallthicknesstemplate.vo.*;
+
+/**
+ * 用户壁厚测定点数模版 Mapper
+ *
+ * @author 特种管理员
+ */
+@Mapper
+public interface UserWallThicknessTemplateMapper extends BaseMapperX<UserWallThicknessTemplateDO> {
+
+    default PageResult<UserWallThicknessTemplateDO> selectPage(UserWallThicknessTemplatePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserWallThicknessTemplateDO>()
+                .eqIfPresent(UserWallThicknessTemplateDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(UserWallThicknessTemplateDO::getTemplateId, reqVO.getTemplateId())
+                .likeIfPresent(UserWallThicknessTemplateDO::getName, reqVO.getName())
+                .eqIfPresent(UserWallThicknessTemplateDO::getDefaultValue, reqVO.getDefaultValue())
+                .betweenIfPresent(UserWallThicknessTemplateDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(UserWallThicknessTemplateDO::getId));
+    }
+    default PageResult<UserWallThicknessTemplateDO> selectPageByTemplateIdAndCurrentUser(
+            String templateId, UserWallThicknessTemplatePageReqVO pageReqVO) {
+        return selectPage(pageReqVO, new LambdaQueryWrapperX<UserWallThicknessTemplateDO>()
+                .eq(UserWallThicknessTemplateDO::getTemplateId, templateId)
+                .eq(UserWallThicknessTemplateDO::getUserId, pageReqVO.getUserId())
+                .likeIfPresent(UserWallThicknessTemplateDO::getName, pageReqVO.getName())
+                .orderByDesc(UserWallThicknessTemplateDO::getUpdateTime));
+    }
+
+}

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

@@ -143,6 +143,7 @@ import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderServiceImpl;
 import cn.start.tz.module.pressure2.service.synchronization.SynchronizationService;
 import cn.start.tz.module.pressure2.service.synchronization.dto.ReportDto;
+import cn.start.tz.module.pressure2.service.userwallthicknesstemplate.UserWallThicknessTemplateService;
 import cn.start.tz.module.pressure2.util.*;
 import cn.start.tz.module.system.api.clientunit.ClientUnitApi;
 import cn.start.tz.module.system.api.clientunit.dto.ClientUnitDTO;
@@ -2080,6 +2081,8 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         boilerTaskOrderItemMapper.update(taskOrderItem, new LambdaUpdateWrapper<BoilerTaskOrderItemDO>().eq(BoilerTaskOrderItemDO::getOrderId, id));
 
     }
+    @Resource
+    private UserWallThicknessTemplateService userWallThicknessTemplateService;
 
 
     public void addReportVo(BoilerOrderItemAddReportV2VO orderItemEnterVO,List<BoilerTaskOrderItemDO> orderItemDOS,Map<String, BoilerTaskOrderItemDO> itemDOMap,String itemPartId){
@@ -2230,6 +2233,10 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                 syncReportVO.setReportType("record");
             }
             com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject();
+            // 判断是否壁厚测定
+            if (!vo.getWallThicknessList().isEmpty()){
+              params.putAll(userWallThicknessTemplateService.generateWallThicknessParams(vo.getWallThicknessList()));
+            }
             if (StringUtils.isBlank(orderItemEnterVO.getCheckId())) {
                 params.put("checkUserId",taskOrderItemDO.getMainChecker());
             }else{

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/comm/QC52044_202401RecordOFData.java

@@ -102,7 +102,7 @@ public class QC52044_202401RecordOFData implements IDynamicOFData {
         String equipMainTpe = ruleVO.getParams().getString("equipMainType");
 
         JSONObject result = new JSONObject();
-
+        result.putAll(ruleVO.getParams());
         if (equipMainTpe.equals("boiler")){
 
             BoilerTaskOrderItemReportDO itemReportDO = boilerTaskOrderItemReportMapper.selectById(refId);

+ 56 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/usertemplatelibrary/UserTemplateLibraryService.java

@@ -0,0 +1,56 @@
+package cn.start.tz.module.pressure2.service.usertemplatelibrary;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.start.tz.module.pressure2.controller.admin.usertemplatelibrary.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.usertemplatelibrary.UserTemplateLibraryDO;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 用户操作指导书模板库 Service 接口
+ *
+ * @author 特种管理员
+ */
+public interface UserTemplateLibraryService extends IService<UserTemplateLibraryDO>  {
+
+    /**
+     * 创建用户操作指导书模板库
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    String createUserTemplateLibrary(@Valid UserTemplateLibrarySaveReqVO createReqVO);
+
+    /**
+     * 更新用户操作指导书模板库
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateUserTemplateLibrary(@Valid UserTemplateLibrarySaveReqVO updateReqVO);
+
+    /**
+     * 删除用户操作指导书模板库
+     *
+     * @param id 编号
+     */
+    void deleteUserTemplateLibrary(String id);
+
+    /**
+     * 获得用户操作指导书模板库
+     *
+     * @param id 编号
+     * @return 用户操作指导书模板库
+     */
+    UserTemplateLibraryDO getUserTemplateLibrary(String id);
+
+    /**
+     * 获得用户操作指导书模板库分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用户操作指导书模板库分页
+     */
+    PageResult<UserTemplateLibraryDO> getUserTemplateLibraryPage(UserTemplateLibraryPageReqVO pageReqVO);
+
+}

+ 75 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/usertemplatelibrary/UserTemplateLibraryServiceImpl.java

@@ -0,0 +1,75 @@
+package cn.start.tz.module.pressure2.service.usertemplatelibrary;
+
+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.usertemplatelibrary.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.usertemplatelibrary.UserTemplateLibraryDO;
+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.usertemplatelibrary.UserTemplateLibraryMapper;
+
+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 UserTemplateLibraryServiceImpl extends ServiceImpl<UserTemplateLibraryMapper, UserTemplateLibraryDO> implements UserTemplateLibraryService {
+
+    @Resource
+    private UserTemplateLibraryMapper userTemplateLibraryMapper;
+
+    @Override
+    public String createUserTemplateLibrary(UserTemplateLibrarySaveReqVO createReqVO) {
+        // 插入
+        UserTemplateLibraryDO userTemplateLibrary = BeanUtils.toBean(createReqVO, UserTemplateLibraryDO.class);
+        userTemplateLibraryMapper.insert(userTemplateLibrary);
+        // 返回
+        return userTemplateLibrary.getId();
+    }
+
+    @Override
+    public void updateUserTemplateLibrary(UserTemplateLibrarySaveReqVO updateReqVO) {
+        // 校验存在
+        validateUserTemplateLibraryExists(updateReqVO.getId());
+        // 更新
+        UserTemplateLibraryDO updateObj = BeanUtils.toBean(updateReqVO, UserTemplateLibraryDO.class);
+        userTemplateLibraryMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteUserTemplateLibrary(String id) {
+        // 校验存在
+        validateUserTemplateLibraryExists(id);
+        // 删除
+        userTemplateLibraryMapper.deleteById(id);
+    }
+
+    private void validateUserTemplateLibraryExists(String id) {
+        if (userTemplateLibraryMapper.selectById(id) == null) {
+            throw exception(USER_TEMPLATE_LIBRARY_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public UserTemplateLibraryDO getUserTemplateLibrary(String id) {
+        return userTemplateLibraryMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<UserTemplateLibraryDO> getUserTemplateLibraryPage(UserTemplateLibraryPageReqVO pageReqVO) {
+        return userTemplateLibraryMapper.selectPage(pageReqVO);
+    }
+
+}

+ 75 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/userwallthicknesstemplate/UserWallThicknessTemplateService.java

@@ -0,0 +1,75 @@
+package cn.start.tz.module.pressure2.service.userwallthicknesstemplate;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.start.tz.module.pressure2.controller.admin.userwallthicknesstemplate.vo.*;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.WallThicknessReqVO;
+import cn.start.tz.module.pressure2.dal.dataobject.userwallthicknesstemplate.UserWallThicknessTemplateDO;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 用户壁厚测定点数模版 Service 接口
+ *
+ * @author 特种管理员
+ */
+public interface UserWallThicknessTemplateService extends IService<UserWallThicknessTemplateDO>  {
+
+    /**
+     * 创建用户壁厚测定点数模版
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    String createUserWallThicknessTemplate(@Valid UserWallThicknessTemplateSaveReqVO createReqVO);
+
+    /**
+     * 更新用户壁厚测定点数模版
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateUserWallThicknessTemplate(@Valid UserWallThicknessTemplateSaveReqVO updateReqVO);
+
+    /**
+     * 删除用户壁厚测定点数模版
+     *
+     * @param id 编号
+     */
+    void deleteUserWallThicknessTemplate(String id);
+
+    /**
+     * 获得用户壁厚测定点数模版
+     *
+     * @param id 编号
+     * @return 用户壁厚测定点数模版
+     */
+    UserWallThicknessTemplateDO getUserWallThicknessTemplate(String id);
+
+    /**
+     * 获得用户壁厚测定点数模版分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用户壁厚测定点数模版分页
+     */
+    PageResult<UserWallThicknessTemplateDO> getUserWallThicknessTemplatePage(UserWallThicknessTemplatePageReqVO pageReqVO);
+
+
+    /**
+     * 根据模板ID和当前登录用户ID查询模板库列表
+     *
+     * @param templateId 模板ID
+     * @param pageReqVO 分页查询条件
+     * @return 模板库分页结果
+     */
+    PageResult<UserWallThicknessTemplateRespVO> getTemplateByTemplateIdAndCurrentUser(String templateId, UserWallThicknessTemplatePageReqVO pageReqVO);
+
+    /**
+     * 根据壁厚测定点位列表生成报表预填参数
+     *
+     * @param wallThicknessList 壁厚测定点位列表
+     * @return 报表预填参数
+     */
+    com.alibaba.fastjson2.JSONObject generateWallThicknessParams(List<WallThicknessReqVO> wallThicknessList);
+
+}

+ 242 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/userwallthicknesstemplate/UserWallThicknessTemplateServiceImpl.java

@@ -0,0 +1,242 @@
+package cn.start.tz.module.pressure2.service.userwallthicknesstemplate;
+
+import cn.hutool.core.util.StrUtil;
+import cn.start.tz.framework.security.core.util.SecurityFrameworkUtils;
+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.userwallthicknesstemplate.vo.*;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.WallThicknessReqVO;
+import cn.start.tz.module.pressure2.dal.dataobject.userwallthicknesstemplate.UserWallThicknessTemplateDO;
+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.userwallthicknesstemplate.UserWallThicknessTemplateMapper;
+
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.start.tz.module.pressure2.enums.ErrorCodeConstants.*;
+import static cn.start.tz.module.system.enums.ErrorCodeConstants.USER_NOT_LOGIN;
+
+/**
+ * 用户壁厚测定点数模版 Service 实现类
+ *
+ * @author 特种管理员
+ */
+@Service
+@Validated
+public class UserWallThicknessTemplateServiceImpl extends ServiceImpl<UserWallThicknessTemplateMapper, UserWallThicknessTemplateDO> implements UserWallThicknessTemplateService {
+
+    @Resource
+    private UserWallThicknessTemplateMapper userWallThicknessTemplateMapper;
+
+    @Override
+    public String createUserWallThicknessTemplate(UserWallThicknessTemplateSaveReqVO createReqVO) {
+        // 插入
+        UserWallThicknessTemplateDO userWallThicknessTemplate = BeanUtils.toBean(createReqVO, UserWallThicknessTemplateDO.class);
+        userWallThicknessTemplateMapper.insert(userWallThicknessTemplate);
+        // 返回
+        return userWallThicknessTemplate.getId();
+    }
+
+    @Override
+    public void updateUserWallThicknessTemplate(UserWallThicknessTemplateSaveReqVO updateReqVO) {
+        // 校验存在
+        validateUserWallThicknessTemplateExists(updateReqVO.getId());
+        // 更新
+        UserWallThicknessTemplateDO updateObj = BeanUtils.toBean(updateReqVO, UserWallThicknessTemplateDO.class);
+        userWallThicknessTemplateMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteUserWallThicknessTemplate(String id) {
+        // 校验存在
+        validateUserWallThicknessTemplateExists(id);
+        // 删除
+        userWallThicknessTemplateMapper.deleteById(id);
+    }
+
+    private void validateUserWallThicknessTemplateExists(String id) {
+        if (userWallThicknessTemplateMapper.selectById(id) == null) {
+            throw exception(USER_WALL_THICKNESS_TEMPLATE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public UserWallThicknessTemplateDO getUserWallThicknessTemplate(String id) {
+        return userWallThicknessTemplateMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<UserWallThicknessTemplateDO> getUserWallThicknessTemplatePage(UserWallThicknessTemplatePageReqVO pageReqVO) {
+        return userWallThicknessTemplateMapper.selectPage(pageReqVO);
+    }
+    @Override
+    public PageResult<UserWallThicknessTemplateRespVO> getTemplateByTemplateIdAndCurrentUser(
+            String templateId, UserWallThicknessTemplatePageReqVO pageReqVO) {
+        // 获取当前登录用户ID
+        String currentUserId = SecurityFrameworkUtils.getLoginUserId();
+        if (StrUtil.isEmpty(currentUserId)) {
+            throw exception(USER_NOT_LOGIN);
+        }
+
+        // 设置当前用户ID到查询条件中
+        pageReqVO.setUserId(currentUserId);
+
+        PageResult<UserWallThicknessTemplateDO> pageResult =
+                userWallThicknessTemplateMapper.selectPageByTemplateIdAndCurrentUser(templateId, pageReqVO);
+        return BeanUtils.toBean(pageResult, UserWallThicknessTemplateRespVO.class);
+    }
+
+    @Override
+    public com.alibaba.fastjson2.JSONObject generateWallThicknessParams(List<WallThicknessReqVO> wallThicknessList) {
+        com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject();
+        if (wallThicknessList == null || wallThicknessList.isEmpty()) {
+            params.put("table", "[]");
+            return params;
+        }
+        String wallThicknessJson = getWallThicknessJsonStr(wallThicknessList);
+        params.put("table", wallThicknessJson);
+        return params;
+    }
+
+    /**
+     * 壁厚测定JSON生成(参考压力模块 TaskOrderServiceImpl)
+     */
+    private String getWallThicknessJsonStr(List<WallThicknessReqVO> reqVOList) {
+        if (reqVOList == null || reqVOList.isEmpty()) {
+            com.alibaba.fastjson2.JSONArray arr = new com.alibaba.fastjson2.JSONArray();
+            return arr.toJSONString();
+        }
+
+        // 只有一个系列且code为空:走简化路径
+        if (reqVOList.size() == 1 && StrUtil.isEmpty(reqVOList.get(0).getCode())) {
+            return wallThicknessJsonSimple(reqVOList.get(0).getPoints());
+        }
+
+        com.alibaba.fastjson2.JSONArray voList = new com.alibaba.fastjson2.JSONArray();
+
+        // 第一个系列:直接生成完整数据
+        WallThicknessReqVO firstReqVO = reqVOList.get(0);
+        generateCompleteSeriesData(firstReqVO, voList);
+
+        // 处理后续系列
+        for (int i = 1; i < reqVOList.size(); i++) {
+            WallThicknessReqVO currentReqVO = reqVOList.get(i);
+            WallThicknessReqVO prevReqVO = reqVOList.get(i - 1);
+
+            if (currentReqVO.getPoints() <= prevReqVO.getPoints()) {
+                fillSeriesToPreviousAndGenerateRemaining(prevReqVO, currentReqVO, voList);
+            } else {
+                generateCompleteSeriesData(currentReqVO, voList);
+            }
+        }
+        return voList.toJSONString();
+    }
+
+    /**
+     * 壁厚测定简化版JSON:仅根据点数生成简单编号 (1), (2), ...
+     */
+    private String wallThicknessJsonSimple(Integer points) {
+        com.alibaba.fastjson2.JSONArray voList = new com.alibaba.fastjson2.JSONArray();
+        int objCount = (points + 5) / 6; // 每个对象最多6个字段,向上取整
+
+        for (int i = 0; i < objCount; i++) {
+            com.alibaba.fastjson2.JSONObject vo = new com.alibaba.fastjson2.JSONObject();
+            for (int j = 0; j < 6; j++) {
+                int currentColumn = (i * 6) + j + 1;
+                if (currentColumn > points) {
+                    break;
+                }
+                String pointValue = "(" + currentColumn + ")";
+                String fieldName = "value" + ((j * 2) + 1);
+                vo.put(fieldName, pointValue);
+            }
+            voList.add(vo);
+        }
+        return voList.toJSONString();
+    }
+
+    /**
+     * 为单个系列生成完整数据
+     */
+    private void generateCompleteSeriesData(WallThicknessReqVO reqVO, com.alibaba.fastjson2.JSONArray voList) {
+        String code = reqVO.getCode();
+        int columnNum = reqVO.getColumnNum();
+        int points = reqVO.getPoints();
+
+        int objCount = (columnNum + 5) / 6; // 每6列一个对象
+
+        for (int k = 0; k < objCount; k++) {
+            for (int i = 0; i < points; i++) {
+                com.alibaba.fastjson2.JSONObject vo = new com.alibaba.fastjson2.JSONObject();
+                for (int j = 0; j < 6; j++) {
+                    int currentColumn = (k * 6) + j + 1;
+                    if (currentColumn > columnNum) {
+                        break;
+                    }
+                    String pointValue = code + currentColumn + "-" + (i + 1);
+                    String fieldName = "value" + ((j * 2) + 1);
+                    vo.put(fieldName, pointValue);
+                }
+                voList.add(vo);
+            }
+        }
+    }
+
+    /**
+     * 将当前系列拼接到前一系列的空位中,如有剩余再生成独立对象
+     */
+    private void fillSeriesToPreviousAndGenerateRemaining(WallThicknessReqVO prevReqVO,
+                                                           WallThicknessReqVO currentReqVO, com.alibaba.fastjson2.JSONArray voList) {
+        String currentCode = currentReqVO.getCode();
+        int currentColumnNum = currentReqVO.getColumnNum();
+
+        // 找到拼接起点:从前一系列最后一个对象组开始,找第一个有空位的对象索引
+        int lastObjStartIndex = voList.size() - prevReqVO.getPoints();
+        if (lastObjStartIndex < 0) {
+            lastObjStartIndex = 0;
+        }
+
+        // 计算已有对象中被填充的字段数(从最后一个对象组末尾计算)
+        int filledFields = 0;
+        com.alibaba.fastjson2.JSONObject lastVO = (com.alibaba.fastjson2.JSONObject) voList.get(voList.size() - 1);
+        for (int j = 0; j < 6; j++) {
+            String fieldName = "value" + ((j * 2) + 1);
+            if (lastVO.containsKey(fieldName) && lastVO.getString(fieldName) != null) {
+                filledFields++;
+            } else {
+                break;
+            }
+        }
+
+        int availableSlots = 6 - filledFields;
+        int columnsToFill = Math.min(currentColumnNum, availableSlots);
+
+        // 填充当前系列数据到已有对象的空位
+        for (int pointIndex = 0; pointIndex < currentReqVO.getPoints(); pointIndex++) {
+            com.alibaba.fastjson2.JSONObject targetVO =
+                (com.alibaba.fastjson2.JSONObject) voList.get(lastObjStartIndex + pointIndex);
+            for (int colIndex = 0; colIndex < columnsToFill; colIndex++) {
+                String fieldName = "value" + ((filledFields + colIndex) * 2 + 1);
+                String value = currentCode + (colIndex + 1) + "-" + (pointIndex + 1);
+                targetVO.put(fieldName, value);
+            }
+        }
+
+        // 如果还有剩余列没填完,生成独立的剩余对象
+        int remainingColumns = currentColumnNum - columnsToFill;
+        if (remainingColumns > 0) {
+            WallThicknessReqVO remainingVO = new WallThicknessReqVO();
+            remainingVO.setCode(currentCode);
+            remainingVO.setColumnNum(remainingColumns);
+            remainingVO.setPoints(currentReqVO.getPoints());
+            generateCompleteSeriesData(remainingVO, voList);
+        }
+    }
+
+}

+ 12 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/usertemplatelibrary/UserTemplateLibraryMapper.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.usertemplatelibrary.UserTemplateLibraryMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/userwallthicknesstemplate/UserWallThicknessTemplateMapper.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.userwallthicknesstemplate.UserWallThicknessTemplateMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>