Bläddra i källkod

待约检设备调整

xy 1 dag sedan
förälder
incheckning
20811acc09
12 ändrade filer med 448 tillägg och 13 borttagningar
  1. 18 0
      build-uat/update.sql
  2. 130 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/PlanSchedulingController.java
  3. 25 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/ContactUpdateVO.java
  4. 20 5
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/EquipBoilerPageRespVO.java
  5. 22 8
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/EquipPipePageRespVO.java
  6. 30 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/PendingInspectionRemarkUpdateVO.java
  7. 16 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equipboiler/EquipBoilerDO.java
  8. 18 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equippipe/EquipPipeDO.java
  9. 15 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/planscheduling/PlanSchedulingService.java
  10. 152 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/planscheduling/PlanSchedulingServiceImpl.java
  11. 1 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equipboiler/EquipBoilerMapper.xml
  12. 1 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipe/EquipPipeMapper.xml

+ 18 - 0
build-uat/update.sql

@@ -1499,3 +1499,21 @@ COMMENT ON COLUMN "PRESSURE2_REPORT_CITY_RECORD"."EQUIP_STATUS_NAME" IS '运行
 --20260525
 ALTER TABLE "PRESSURE2_TASK_ORDER_NON_TAX_REPORT" ADD COLUMN "QRCODE_PATH" VARCHAR(32);
 COMMENT ON COLUMN "PRESSURE2_TASK_ORDER_NON_TAX_REPORT"."CHECK_TYPE_NAME" IS '二维码路径';
+
+ALTER TABLE "PRESSURE2_EQUIP_PIPE" ADD COLUMN "PENDING_INSPECTION_REMARK" VARCHAR2(1000) DEFAULT ('');
+ALTER TABLE "PRESSURE2_EQUIP_PIPE" ADD COLUMN "ANNOTATOR_DATE" DATETIME(6);
+ALTER TABLE "PRESSURE2_EQUIP_PIPE" ADD COLUMN "ANNOTATOR_ID" VARCHAR(50);
+ALTER TABLE "PRESSURE2_EQUIP_PIPE" ADD COLUMN "ANNOTATOR_NAME" VARCHAR(50);
+COMMENT ON COLUMN "PRESSURE2_EQUIP_PIPE"."PENDING_INSPECTION_REMARK" IS '待约检备注';
+COMMENT ON COLUMN "PRESSURE2_EQUIP_PIPE"."ANNOTATOR_DATE" IS '备注时间';
+COMMENT ON COLUMN "PRESSURE2_EQUIP_PIPE"."ANNOTATOR_ID" IS '备注人ID';
+COMMENT ON COLUMN "PRESSURE2_EQUIP_PIPE"."ANNOTATOR_NAME" IS '备注人名称';
+
+ALTER TABLE "PRESSURE2_EQUIP_BOILER" ADD COLUMN "PENDING_INSPECTION_REMARK" VARCHAR2(1000) DEFAULT ('');
+ALTER TABLE "PRESSURE2_EQUIP_BOILER" ADD COLUMN "ANNOTATOR_DATE" DATETIME(6);
+ALTER TABLE "PRESSURE2_EQUIP_BOILER" ADD COLUMN "ANNOTATOR_ID" VARCHAR(50);
+ALTER TABLE "PRESSURE2_EQUIP_BOILER" ADD COLUMN "ANNOTATOR_NAME" VARCHAR(50);
+COMMENT ON COLUMN "PRESSURE2_EQUIP_BOILER"."PENDING_INSPECTION_REMARK" IS '待约检备注';
+COMMENT ON COLUMN "PRESSURE2_EQUIP_BOILER"."ANNOTATOR_DATE" IS '备注时间';
+COMMENT ON COLUMN "PRESSURE2_EQUIP_BOILER"."ANNOTATOR_ID" IS '备注人ID';
+COMMENT ON COLUMN "PRESSURE2_EQUIP_BOILER"."ANNOTATOR_NAME" IS '备注人名称';

+ 130 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/PlanSchedulingController.java

@@ -1,23 +1,33 @@
 package cn.start.tz.module.pressure2.controller.admin.planscheduling;
 
 
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
 import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
 import cn.start.tz.module.pressure2.controller.admin.planscheduling.vo.*;
 import cn.start.tz.module.pressure2.service.planscheduling.PlanSchedulingService;
 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 lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.start.tz.framework.common.pojo.CommonResult.success;
 
 @Tag(name = "管理后台-计划排期")
 @RestController
 @RequestMapping("/pressure2/plan-scheduling")
 @Validated
+@Slf4j
 public class PlanSchedulingController {
 
     @Resource
@@ -164,4 +174,124 @@ public class PlanSchedulingController {
     public CommonResult<PageResult<EquipPipePageRespVO>> pendingInspectionPagePipe(@Valid PendingInspectionEquipReqVO pageReqVO) {
         return success(planSchedulingService.pendingInspectionPagePipe(pageReqVO));
     }
+
+    /**
+     * 批量更新设备待约检备注
+     *
+     * @param updateVO 更新请求信息,包含设备ID列表和备注内容
+     * @param equipMainType 设备类型:200-锅炉,300-管道
+     */
+    @PutMapping("/update-pending-inspection-remark")
+    @Operation(summary = "批量更新设备待约检备注", description = "根据设备类型(200=锅炉, 300=管道)批量更新对应的设备待约检备注信息")
+    public CommonResult<Boolean> updatePendingInspectionRemark(@RequestBody PendingInspectionRemarkUpdateVO updateVO,
+                                                                @RequestParam(required = false, defaultValue = "200") Integer equipMainType) {
+        planSchedulingService.updatePendingInspectionRemark(updateVO, equipMainType);
+        return success(true);
+    }
+
+    /**
+     * 批量更新设备联系人信息
+     *
+     * @param contactUpdateVO 更新请求信息,包含设备ID列表、联系人和联系电话
+     * @param equipMainType 设备类型:200-锅炉,300-管道
+     */
+    @PutMapping("/contact/batch-update")
+    @Operation(summary = "批量更新设备联系人信息", description = "根据设备类型(200=锅炉, 300=管道)批量更新对应的设备联系人和联系电话")
+    public CommonResult<Boolean> updateEquipContactBatch(@RequestBody ContactUpdateVO contactUpdateVO,
+                                                          @RequestParam(required = false, defaultValue = "200") Integer equipMainType) {
+        planSchedulingService.updateEquipContactBatch(contactUpdateVO, equipMainType);
+        return success(true);
+    }
+
+    @PostMapping("/pending-inspection-export-excel")
+    @Operation(summary = "导出待约检设备 Excel")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportPendingInspectionEquipExcel(@Valid @RequestBody PendingInspectionEquipReqVO pageReqVO,
+                                                  HttpServletResponse response) throws IOException {
+        // 限制最大导出数量,防止超时
+        int maxExportSize = pageReqVO.getPageSize();
+//        pageReqVO.setPageSize(maxExportSize);
+//        pageReqVO.setPageNo(1);
+
+        long totalCount = 0;
+        if (Objects.equals(pageReqVO.getEquipMainType(), "boiler")){
+            // 查询第一页数据
+
+            PageResult<EquipBoilerPageRespVO> pageResult = planSchedulingService.pendingInspectionPageBoiler(pageReqVO);
+            List<EquipBoilerPageRespVO> list = pageResult.getList();
+            // 检查是否有更多数据
+            totalCount = pageResult.getTotal();
+
+            if (totalCount > maxExportSize) {
+                log.warn("导出待约检设备数据量过大: {} 条,仅导出前 {} 条", totalCount, maxExportSize);
+                // 在响应头中提示用户(使用英文字符,避免中文编码问题)
+                response.setHeader("X-Total-Count", String.valueOf(totalCount));
+                response.setHeader("X-Export-Count", String.valueOf(maxExportSize));
+                response.setHeader("X-Export-Limit-Enabled", "true");
+                response.setHeader("X-Export-Message", "Data exceeds limit, only exporting first " + maxExportSize + " records. Please use filters to reduce the dataset.");
+            }
+
+            // 将检验性质转换为中文(仅用于导出)
+            list.forEach(item -> {
+                if (item.getCheckType() != null) {
+                    switch (item.getCheckType()) {
+                        case 100:
+                            item.setCheckTypeStr("内部检验");
+                            break;
+                        case 200:
+                            item.setCheckTypeStr("外部检验");
+                            break;
+                        case 300:
+                            item.setCheckTypeStr("耐压检验");
+                            break;
+                        default:
+                            item.setCheckTypeStr("");
+                            break;
+                    }
+                }
+            });
+
+            // 导出 Excel
+            ExcelUtils.write(response, "待约检设备.xls", "数据",
+                    EquipBoilerPageRespVO.class, list);
+
+        }else if (Objects.equals(pageReqVO.getEquipMainType(), "pipe")){
+
+            PageResult<EquipPipePageRespVO> pageResult = planSchedulingService.pendingInspectionPagePipe(pageReqVO);
+            List<EquipPipePageRespVO> list = pageResult.getList();
+            // 检查是否有更多数据
+            totalCount = pageResult.getTotal();
+
+
+            if (totalCount > maxExportSize) {
+                log.warn("导出待约检设备数据量过大: {} 条,仅导出前 {} 条", totalCount, maxExportSize);
+                // 在响应头中提示用户(使用英文字符,避免中文编码问题)
+                response.setHeader("X-Total-Count", String.valueOf(totalCount));
+                response.setHeader("X-Export-Count", String.valueOf(maxExportSize));
+                response.setHeader("X-Export-Limit-Enabled", "true");
+                response.setHeader("X-Export-Message", "Data exceeds limit, only exporting first " + maxExportSize + " records. Please use filters to reduce the dataset.");
+            }
+
+            list.forEach(item -> {
+                if (item.getCheckType() != null) {
+                    switch (item.getCheckType()) {
+                        case 100:
+                            item.setCheckTypeStr("定期检验");
+                            break;
+                        case 200:
+                            item.setCheckTypeStr("年度检查");
+                            break;
+                        default:
+                            item.setCheckTypeStr("");
+                            break;
+                    }
+                }
+            });
+
+            // 导出 Excel
+            ExcelUtils.write(response, "待约检设备.xls", "数据",
+                    EquipPipePageRespVO.class, list);
+        }
+
+    }
 }

+ 25 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/ContactUpdateVO.java

@@ -0,0 +1,25 @@
+package cn.start.tz.module.pressure2.controller.admin.planscheduling.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 批量更新联系人信息 Request VO
+ *
+ * @author tz
+ */
+@Data
+public class ContactUpdateVO {
+
+    @Schema(description = "设备ID列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[\"id1\", \"id2\"]")
+    private List<String> ids;
+
+    @Schema(description = "约检联系人")
+    private String contact;
+
+    @Schema(description = "约检联系人电话")
+    private String contactPhone;
+
+}

+ 20 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/EquipBoilerPageRespVO.java

@@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 @Schema(description = "管理后台 - 容器设备分页 Response VO")
 @Data
@@ -132,20 +133,17 @@ public class EquipBoilerPageRespVO {
     @ExcelProperty("使用证编号")
     private String useRegisterNo;
 
-    @Schema(description = "容器名称")
-    @ExcelProperty("容器名称")
+    @Schema(description = "锅炉名称")
+    @ExcelProperty("锅炉名称")
     private String equipName;
 
     @Schema(description = "容积")
-    @ExcelProperty("容积")
     private String equipVolume;
 
     @Schema(description = "使用年限")
-    @ExcelProperty("使用年限")
     private String useYears;
 
     @Schema(description = "设计使用年限")
-    @ExcelProperty("设计使用年限")
     private Integer designUseYears;
 
     @Schema(description = "是否为拒检状态")
@@ -159,4 +157,21 @@ public class EquipBoilerPageRespVO {
 
     @Schema(description = "是否存在待审核的启用申请")
     private Boolean hasPendingEnableAudit;
+
+    /**
+     * 待约检备注
+     */
+    private String pendingInspectionRemark;
+    /**
+     * 备注时间
+     */
+    private LocalDateTime annotatorDate;
+    /**
+     * 备注人ID
+     */
+    private String annotatorId;
+    /**
+     * 备注人名称
+     */
+    private String annotatorName;
 }

+ 22 - 8
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/planscheduling/vo/EquipPipePageRespVO.java

@@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 @Schema(description = "管理后台 - 容器设备分页 Response VO")
 @Data
@@ -120,32 +121,28 @@ public class EquipPipePageRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
-    @Schema(description = "设备注册代码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("设备注册代码")
+    @Schema(description = "工程号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("工程号")
     private String equipCode;
 
     @Schema(description = "产品编号")
-    @ExcelProperty("产品编号")
     private String productNo;
 
     @Schema(description = "使用证编号")
     @ExcelProperty("使用证编号")
     private String useRegisterNo;
 
-    @Schema(description = "容器名称")
-    @ExcelProperty("容器名称")
+    @Schema(description = "工程名称")
+    @ExcelProperty("工程名称")
     private String equipName;
 
     @Schema(description = "容积")
-    @ExcelProperty("容积")
     private String equipVolume;
 
     @Schema(description = "使用年限")
-    @ExcelProperty("使用年限")
     private String useYears;
 
     @Schema(description = "设计使用年限")
-    @ExcelProperty("设计使用年限")
     private Integer designUseYears;
 
     @Schema(description = "是否为拒检状态")
@@ -159,4 +156,21 @@ public class EquipPipePageRespVO {
 
     @Schema(description = "是否存在待审核的启用申请")
     private Boolean hasPendingEnableAudit;
+
+    /**
+     * 待约检备注
+     */
+    private String pendingInspectionRemark;
+    /**
+     * 备注时间
+     */
+    private LocalDateTime annotatorDate;
+    /**
+     * 备注人ID
+     */
+    private String annotatorId;
+    /**
+     * 备注人名称
+     */
+    private String annotatorName;
 }

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

@@ -0,0 +1,30 @@
+package cn.start.tz.module.pressure2.controller.admin.planscheduling.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 批量更新待约检备注 Request VO
+ *
+ * @author tz
+ */
+@Schema(description = "管理后台 - 批量更新待约检备注 Request VO")
+@Data
+public class PendingInspectionRemarkUpdateVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "设备ID列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[\"id1\", \"id2\"]")
+    @NotEmpty(message = "设备ID列表不能为空")
+    private List<String> ids;
+
+    @Schema(description = "备注", example = "需要提前联系客户")
+    private String pendingInspectionRemark;
+
+}

+ 16 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equipboiler/EquipBoilerDO.java

@@ -690,5 +690,21 @@ public class EquipBoilerDO extends BaseDO {
      */
     private String workpressure;
 
+    /**
+     * 待约检备注
+     */
+    private String pendingInspectionRemark;
+    /**
+     * 备注时间
+     */
+    private LocalDateTime annotatorDate;
+    /**
+     * 备注人ID
+     */
+    private String annotatorId;
+    /**
+     * 备注人名称
+     */
+    private String annotatorName;
 
 }

+ 18 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/equippipe/EquipPipeDO.java

@@ -389,4 +389,22 @@ public class EquipPipeDO extends BaseDO {
      * 状态
      */
     private String isEffective;
+
+    /**
+     * 待约检备注
+     */
+    private String pendingInspectionRemark;
+    /**
+     * 备注时间
+     */
+    private LocalDateTime annotatorDate;
+    /**
+     * 备注人ID
+     */
+    private String annotatorId;
+    /**
+     * 备注人名称
+     */
+    private String annotatorName;
+
 }

+ 15 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/planscheduling/PlanSchedulingService.java

@@ -47,4 +47,19 @@ public interface PlanSchedulingService {
      * @return 结果
      */
     PageResult<EquipPipePageRespVO> pendingInspectionPagePipe(@Valid PendingInspectionEquipReqVO pageReqVO);
+
+    /**
+     * 批量更新设备待约检备注
+     *
+     * @param updateVO 更新请求信息,包含设备ID列表、备注内容和设备类型(200-锅炉, 300-管道)
+     */
+    void updatePendingInspectionRemark(PendingInspectionRemarkUpdateVO updateVO, Integer equipMainType);
+
+    /**
+     * 批量更新设备联系人信息
+     *
+     * @param contactUpdateVO 更新请求信息,包含设备ID列表、联系人信息
+     * @param equipMainType 设备类型(200-锅炉, 300-管道)
+     */
+    void updateEquipContactBatch(ContactUpdateVO contactUpdateVO, Integer equipMainType);
 }

+ 152 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/planscheduling/PlanSchedulingServiceImpl.java

@@ -10,10 +10,17 @@ import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.pressure2.controller.admin.planscheduling.vo.*;
 import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.appointmentconfirmorder.AppointmentConfirmOrderDO;
+import cn.start.tz.module.pressure2.dal.dataobject.boilerequipoperationrecord.BoilerEquipOperationRecordDO;
+import cn.start.tz.module.pressure2.dal.dataobject.equipboiler.EquipBoilerDO;
+import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipeequipmentoperationrecord.PipeEquipmentOperationRecordDO;
 import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.appointmentconfirmorder.AppointmentConfirmOrderMapper;
+import cn.start.tz.module.pressure2.dal.mysql.boilerequipoperationrecord.BoilerEquipOperationRecordMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
+import cn.start.tz.framework.security.core.util.SecurityFrameworkUtils;
+import cn.start.tz.module.pressure2.dal.mysql.pipeequipmentoperationrecord.PipeEquipmentOperationRecordMapper;
 import cn.start.tz.module.system.api.clientunit.ClientUnitApi;
 import cn.start.tz.module.system.api.clientunit.dto.ClientUnitDTO;
 import cn.start.tz.module.system.api.clientunit.dto.ClientUnitPageDTO;
@@ -21,16 +28,22 @@ import cn.start.tz.module.system.api.dept.DeptApi;
 import cn.start.tz.module.system.api.dept.dto.DeptRespDTO;
 import cn.start.tz.module.system.api.dict.DictDataApi;
 import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import jakarta.annotation.Resource;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception0;
+
 @Service
 @Validated
 public class PlanSchedulingServiceImpl implements PlanSchedulingService {
@@ -50,6 +63,14 @@ public class PlanSchedulingServiceImpl implements PlanSchedulingService {
     @Resource
     private AppointmentConfirmOrderMapper appointmentConfirmOrderMapper;
 
+    @Resource
+    private BoilerEquipOperationRecordMapper boilerEquipOperationRecordMapper;
+
+    @Resource
+    private PipeEquipmentOperationRecordMapper pipeEquipOperationRecordMapper;
+
+    @Resource
+    private ObjectMapper objectMapper;
 
     @Resource
     private AcceptOrderMapper acceptOrderMapper;
@@ -1611,4 +1632,135 @@ public class PlanSchedulingServiceImpl implements PlanSchedulingService {
 //            }
 //        }
 //    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updatePendingInspectionRemark(PendingInspectionRemarkUpdateVO updateVO, Integer equipMainType) {
+        List<String> ids = updateVO.getIds();
+        if (CollUtil.isEmpty(ids)) {
+            return;
+        }
+
+        String annotatorId = SecurityFrameworkUtils.getLoginUserId();
+        String annotatorName = SecurityFrameworkUtils.getLoginUserNickname();
+        LocalDateTime annotatorDate = LocalDateTime.now();
+
+        // 200-锅炉, 300-管道
+        if (equipMainType == 200) {
+            List<EquipBoilerDO> equipBoilerDOS = equipBoilerMapper.selectByIds(ids);
+            if (CollUtil.isEmpty(equipBoilerDOS)) {
+                return;
+            }
+            equipBoilerDOS.forEach(boiler -> {
+                EquipBoilerDO updateDO = new EquipBoilerDO();
+                updateDO.setId(boiler.getId());
+                updateDO.setPendingInspectionRemark(updateVO.getPendingInspectionRemark());
+                updateDO.setAnnotatorId(annotatorId);
+                updateDO.setAnnotatorName(annotatorName);
+                updateDO.setAnnotatorDate(annotatorDate);
+                equipBoilerMapper.updateById(updateDO);
+            });
+        } else if (equipMainType == 300) {
+            List<EquipPipeDO> equipPipeDOS = equipPipeMapper.selectByIds(ids);
+            if (CollUtil.isEmpty(equipPipeDOS)) {
+                return;
+            }
+            equipPipeDOS.forEach(pipe -> {
+                EquipPipeDO updateDO = new EquipPipeDO();
+                updateDO.setId(pipe.getId());
+                updateDO.setPendingInspectionRemark(updateVO.getPendingInspectionRemark());
+                updateDO.setAnnotatorId(annotatorId);
+                updateDO.setAnnotatorName(annotatorName);
+                updateDO.setAnnotatorDate(annotatorDate);
+                equipPipeMapper.updateById(updateDO);
+            });
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateEquipContactBatch(ContactUpdateVO contactUpdateVO, Integer equipMainType) {
+        List<String> ids = contactUpdateVO.getIds();
+        if (CollUtil.isEmpty(ids)) {
+            return;
+        }
+
+        // 200-锅炉, 300-管道
+        if (equipMainType == 200) {
+            List<EquipBoilerDO> equipBoilerDOS = equipBoilerMapper.selectByIds(ids);
+            if (CollUtil.isEmpty(equipBoilerDOS)) {
+                return;
+            }
+            equipBoilerDOS.forEach(boiler -> {
+
+                EquipBoilerDO equipBoilerDO = new EquipBoilerDO();
+                equipBoilerDO.setId(boiler.getId());
+                equipBoilerDO.setContact(contactUpdateVO.getContact());
+                equipBoilerDO.setContactPhone(contactUpdateVO.getContactPhone());
+
+                equipBoilerMapper.updateById(equipBoilerDO);
+
+                // 之前的记录数
+                Long count = boilerEquipOperationRecordMapper.selectCount(BoilerEquipOperationRecordDO::getEquipCode, boiler.getEquipCode());
+                String beforeJson = null;
+                String afterJson = null;
+                try {
+                    beforeJson = objectMapper.writeValueAsString(boiler);
+                    boiler.setContact(contactUpdateVO.getContact());
+                    boiler.setContactPhone(contactUpdateVO.getContactPhone());
+                    afterJson = objectMapper.writeValueAsString(boiler);
+                } catch (JsonProcessingException e) {
+                    throw exception0(900, e.getMessage());
+                }
+                BoilerEquipOperationRecordDO record = new BoilerEquipOperationRecordDO();
+                record.setVersion(boiler.getEquipCode() + "-" + (count + 1));
+                record.setType(100);
+                record.setReason("人工修改");
+
+                record.setEquipId(boiler.getId());
+                record.setEquipCode(boiler.getEquipCode());
+                record.setBeforeJson(beforeJson);
+                record.setAfterJson(afterJson);
+                boilerEquipOperationRecordMapper.insert(record);
+
+            });
+        } else if (equipMainType == 300) {
+            List<EquipPipeDO> equipPipeDOS = equipPipeMapper.selectByIds(ids);
+            if (CollUtil.isEmpty(equipPipeDOS)) {
+                return;
+            }
+            equipPipeDOS.forEach(pipe -> {
+
+                EquipPipeDO equipPipeDO = new EquipPipeDO();
+                equipPipeDO.setId(pipe.getId());
+                equipPipeDO.setContact(contactUpdateVO.getContact());
+                equipPipeDO.setContactPhone(contactUpdateVO.getContactPhone());
+
+                equipPipeMapper.updateById(equipPipeDO);
+
+                // 之前的记录数
+                Long count = pipeEquipOperationRecordMapper.selectCount(PipeEquipmentOperationRecordDO::getProjectNo, pipe.getProjectNo());
+                String beforeJson = null;
+                String afterJson = null;
+                try {
+                    beforeJson = objectMapper.writeValueAsString(pipe);
+                    pipe.setContact(contactUpdateVO.getContact());
+                    pipe.setContactPhone(contactUpdateVO.getContactPhone());
+                    afterJson = objectMapper.writeValueAsString(pipe);
+                } catch (JsonProcessingException e) {
+                    throw exception0(900, e.getMessage());
+                }
+                PipeEquipmentOperationRecordDO record = new PipeEquipmentOperationRecordDO();
+                record.setVersion(pipe.getProjectNo() + "-" + (count + 1));
+//                record.set(100);
+                record.setReason("人工修改");
+
+                record.setPipeId(pipe.getId());
+                record.setProjectNo(pipe.getProjectNo());
+                record.setBeforeJson(beforeJson);
+                record.setAfterJson(afterJson);
+                pipeEquipOperationRecordMapper.insert(record);
+            });
+        }
+    }
 }

+ 1 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equipboiler/EquipBoilerMapper.xml

@@ -346,6 +346,7 @@
             eb.product_code,
             eb.contact,
             eb.contact_phone,
+            eb.pending_inspection_remark,
             eb.related_department as dept_id,
             eb.use_time as use_date,
             eb.made_time as make_date,

+ 1 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipe/EquipPipeMapper.xml

@@ -331,6 +331,7 @@
             ep.contact_phone,
             ep.relation_dept as dept_id,
             ep.use_date,
+            ep.pending_inspection_remark,
             ep.pipe_address as equip_address,
             ep.pipe_category as equip_type,
             ep.next_legal_check_date as next_check_date,