From e9bf5a0070b5fbdf9afd4475adbf51e46f579040 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 17 四月 2025 17:20:38 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_ztzb' into dev_ztzb

---
 cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java                 |   71 +++++
 ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java                                       |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java |   20 +
 cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java                  |   25 +
 cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java                   |   36 ++
 cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java                    |   61 ++++
 cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml                         |   17 +
 cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java            |   26 +
 cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java          |   16 +
 cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml                                |   14 +
 cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java           |  108 +++++++
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java        |  294 +++++++++++++++++++++
 cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java                           |   75 +++++
 cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java                         |   19 +
 14 files changed, 784 insertions(+), 2 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java
new file mode 100644
index 0000000..354aaf1
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceImpowerController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.service.DeviceImpowerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鎺堟潈琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Api(tags = "璁惧浣跨敤鎺堟潈琛�")
+@RestController
+@RequestMapping("/deviceImpower")
+public class DeviceImpowerController {
+
+    @Resource
+    private DeviceImpowerService deviceImpowerService;
+
+    /**
+     * 鍒嗛〉鏌ヨ浣跨敤鎺堟潈
+     * @return
+     */
+    @ApiOperation("鍒嗛〉鏌ヨ浣跨敤鎺堟潈")
+    @GetMapping("selectDeviceImpowerByPage")
+    public Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(Page page, DeviceImpowerDto itemParameter){
+        return deviceImpowerService.selectDeviceImpowerByPage(page, itemParameter);
+    }
+
+    /**
+     * 鏂板浣跨敤鎺堟潈
+     * @param deviceImpowerDto 浣跨敤鎺堟潈
+     */
+    @ApiOperation("鏂板浣跨敤鎺堟潈")
+    @PostMapping("/addImpower")
+    public Result addImpower(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+        return deviceImpowerService.addImpower(deviceImpowerDto);
+    }
+
+    /**
+     * 淇敼浣跨敤鎺堟潈
+     * @param deviceImpowerDto 浣跨敤鎺堟潈
+     */
+    @ApiOperation("淇敼浣跨敤鎺堟潈")
+    @PostMapping("/updateImpower")
+    public Result updateImpower(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+        return deviceImpowerService.updateImpower(deviceImpowerDto);
+    }
+
+    /**
+     * 鍒犻櫎浣跨敤鎺堟潈
+     * @param deviceImpowerDto 浣跨敤鎺堟潈
+     */
+    @ApiOperation("鍒犻櫎浣跨敤鎺堟潈")
+    @DeleteMapping("/deleteImpower")
+    public Result deleteImpower(DeviceImpowerDto deviceImpowerDto) {
+        return deviceImpowerService.deleteImpower(deviceImpowerDto);
+    }
+
+    /**
+     * 鏌ヨ浣跨敤鎺堟潈璇︽儏
+     */
+    @ApiOperation("鏌ヨ浣跨敤鎺堟潈璇︽儏")
+    @GetMapping("/getImpowerDetail")
+    public Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId) {
+        return deviceImpowerService.getImpowerDetail(impowerId);
+    }
+
+    /**
+     * 鎻愪氦鎵瑰噯
+     */
+    @ApiOperation("鎻愪氦鎵瑰噯")
+    @PostMapping("/submitReviewImpowerStatus")
+    public Result submitReviewImpowerStatus(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+        return deviceImpowerService.submitReviewImpowerStatus(deviceImpowerDto);
+    }
+
+    /**
+     * 浣跨敤鎺堟潈鎵瑰噯
+     */
+    @ApiOperation("浣跨敤鎺堟潈鎵瑰噯")
+    @PostMapping("/reviewImpowerStatus")
+    public Result reviewImpowerStatus(@RequestBody DeviceImpowerDto deviceImpowerDto) {
+        return deviceImpowerService.reviewImpowerStatus(deviceImpowerDto);
+    }
+
+    /**
+     * 瀵煎嚭浣跨敤鎺堟潈
+     */
+    @ApiOperation("瀵煎嚭浣跨敤鎺堟潈")
+    @GetMapping("/exportDeviceImpower")
+    public Result exportDeviceImpower(@RequestParam("ImpowerId") Integer impowerId, HttpServletResponse response) {
+        return deviceImpowerService.exportDeviceImpowerDto(impowerId, response);
+    }
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java
new file mode 100644
index 0000000..502e986
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDetailsDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2025/4/17
+ */
+@Data
+public class DeviceImpowerDetailsDto extends DeviceImpowerDetails {
+
+    @ApiModelProperty("搴忓彿")
+    private Integer index;
+
+    @ApiModelProperty("浠櫒璁惧鍚嶇О")
+    private String deviceName;
+
+    @ApiModelProperty("浠櫒璁惧鍨嬪彿")
+    private String specificationModel;
+
+    @ApiModelProperty("浠櫒缂栧彿")
+    private String managementNumber;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java
new file mode 100644
index 0000000..ec362ab
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceImpowerDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceImpower;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author zhuo
+ * @Date 2025/4/17
+ */
+@Data
+public class DeviceImpowerDto extends DeviceImpower {
+
+
+    @ApiModelProperty("璇︽儏")
+    private List<DeviceImpowerDetailsDto> deviceImpowerDetails;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java
new file mode 100644
index 0000000..200e9a9
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerDetailsMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.device.mapper;
+
+import com.ruoyi.device.dto.DeviceImpowerDetailsDto;
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:39
+ */
+public interface DeviceImpowerDetailsMapper extends BaseMapper<DeviceImpowerDetails> {
+
+    /**
+     * 鏌ヨ璁惧浣跨敤璇︽儏
+     * @param impowerId
+     * @return
+     */
+    List<DeviceImpowerDetailsDto> deviceImpowerDetailsList(@Param("impowerId") Integer impowerId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java
new file mode 100644
index 0000000..8fb2b91
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceImpowerMapper.java
@@ -0,0 +1,36 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.dto.DeviceTraceabilityManagementDto;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+public interface DeviceImpowerMapper extends BaseMapper<DeviceImpower> {
+
+    /**
+     * 鍒嗛〉鏌ヨ浣跨敤鎺堟潈
+     * @param page
+     * @param deviceImpowerDtoQueryWrapper
+     * @return
+     */
+    IPage<DeviceImpower> selectDeviceParameterPage(@Param("page") Page page, @Param("ew") QueryWrapper<DeviceImpowerDto> deviceImpowerDtoQueryWrapper);
+
+    /**
+     * 鏍规嵁id鏌ヨ璁惧浣跨敤鎺堟潈
+     * @param traceabilityManagementId
+     * @return
+     */
+    DeviceTraceabilityManagementDto selectDeviceTraceabilityManagementById(@Param("traceabilityManagementId") Integer traceabilityManagementId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java
new file mode 100644
index 0000000..dc8b6d6
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpower.java
@@ -0,0 +1,75 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕〃
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Getter
+@Setter
+@TableName("device_impower")
+@ApiModel(value = "DeviceImpower瀵硅薄", description = "璁惧閲忓�兼函婧愯鍒掕〃")
+public class DeviceImpower implements Serializable {
+
+    @ApiModelProperty("鎺堟潈id")
+    @TableId(value = "impower_id", type = IdType.AUTO)
+    private Integer impowerId;
+
+    @ApiModelProperty("璁″垝骞翠唤")
+    private String impowerYear;
+
+    @ApiModelProperty("缂栧埗浜篿d")
+    private Integer compilerId;
+
+    @ApiModelProperty("缂栧埗浜�")
+    private String compiler;
+
+    @ApiModelProperty("缂栧埗鏃堕棿")
+    private LocalDateTime datePreparation;
+
+    @ApiModelProperty("瀹℃牳鐘舵�侊紝0鏈鏍革紝1瀹℃牳")
+    private Integer status;
+
+    @ApiModelProperty("鎺堟潈id")
+    private Integer auditId;
+
+    @ApiModelProperty("鎺堟潈浜�")
+    private String audit;
+
+    @ApiModelProperty("鎺堟潈鏃ユ湡")
+    private LocalDateTime auditDate;
+
+    @ApiModelProperty("鎺堟潈淇℃伅")
+    private String auditRemark;
+
+    @ApiModelProperty("鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java
new file mode 100644
index 0000000..239db65
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceImpowerDetails.java
@@ -0,0 +1,61 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:39
+ */
+@Getter
+@Setter
+@TableName("device_impower_details")
+@ApiModel(value = "DeviceImpowerDetails瀵硅薄", description = "璁惧閲忓�兼函婧愯鍒掕鎯呰〃")
+public class DeviceImpowerDetails implements Serializable {
+
+
+    @ApiModelProperty("璁惧閲忓�兼函婧愯鍒掕鎯卛d")
+    @TableId(value = "impower_detail_id", type = IdType.AUTO)
+    private Integer impowerDetailId;
+
+    @ApiModelProperty("璁惧閲忓�兼函婧愯鍒抜d")
+    private Integer impowerId;
+
+    @ApiModelProperty("璁惧id")
+    private Integer deviceId;
+
+    @ApiModelProperty("妫�娴嬮」鐩�")
+    private String inspectionItem;
+
+    @ApiModelProperty("琚巿鏉冧汉")
+    private String delegatedUser;
+
+    @ApiModelProperty("鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java
new file mode 100644
index 0000000..a19e5df
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17 03:23:39
+ */
+public interface DeviceImpowerDetailsService extends IService<DeviceImpowerDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java
new file mode 100644
index 0000000..d18475a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceImpowerService.java
@@ -0,0 +1,71 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceImpower;
+import org.apache.ibatis.annotations.Param;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧浣跨敤鎺堟潈琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+public interface DeviceImpowerService extends IService<DeviceImpower> {
+
+    /**
+     * 鍒嗛〉鏌ヨ浣跨敤鎺堟潈
+     * @param page 鍒嗛〉鍙傛暟
+     * @param itemParameter 浣跨敤鎺堟潈
+     * @return
+     */
+    Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(@Param("page") Page page, @Param("itemParameter") DeviceImpowerDto itemParameter);
+
+    /**
+     * 鏂板浣跨敤鎺堟潈
+     * @param deviceImpowerDto 浣跨敤鎺堟潈
+     */
+    Result addImpower(DeviceImpowerDto deviceImpowerDto);
+
+    /**
+     * 淇敼浣跨敤鎺堟潈
+     * @param deviceImpowerDto 浣跨敤鎺堟潈
+     */
+    Result updateImpower(DeviceImpowerDto deviceImpowerDto);
+
+    /**
+     * 鍒犻櫎浣跨敤鎺堟潈
+     * @param deviceImpowerDto 浣跨敤鎺堟潈
+     */
+    Result deleteImpower(DeviceImpowerDto deviceImpowerDto);
+
+    /**
+     * 鏌ヨ浣跨敤鎺堟潈璇︽儏
+     */
+    Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId);
+
+    /**
+     * 鎻愪氦鎵瑰噯
+     * @param deviceImpowerDto
+     * @return
+     */
+    Result submitReviewImpowerStatus(DeviceImpowerDto deviceImpowerDto);
+
+    /**
+     * 浣跨敤鎺堟潈瀹℃牳
+     */
+    Result reviewImpowerStatus(DeviceImpowerDto deviceImpowerDto);
+
+    /**
+     * 浣跨敤鎺堟潈瀵煎嚭
+     */
+    Result exportDeviceImpowerDto(Integer impowerId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java
new file mode 100644
index 0000000..6ce1670
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.ruoyi.device.mapper.DeviceImpowerDetailsMapper;
+import com.ruoyi.device.service.DeviceImpowerDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧閲忓�兼函婧愯鍒掕鎯呰〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17 03:23:39
+ */
+@Service
+public class DeviceImpowerDetailsServiceImpl extends ServiceImpl<DeviceImpowerDetailsMapper, DeviceImpowerDetails> implements DeviceImpowerDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
new file mode 100644
index 0000000..6ce3e62
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
@@ -0,0 +1,294 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceImpowerDetailsDto;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.mapper.DeviceImpowerDetailsMapper;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.mapper.DeviceImpowerMapper;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.ruoyi.device.service.DeviceImpowerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.service.DeviceImpowerDetailsService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁惧浣跨敤琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceImpowerServiceImpl extends ServiceImpl<DeviceImpowerMapper, DeviceImpower> implements DeviceImpowerService {
+
+
+    @Resource
+    private DeviceImpowerDetailsService deviceImpowerDetailsService;
+
+    @Resource
+    private DeviceImpowerDetailsMapper deviceImpowerDetailsMapper;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+
+    @Resource
+    private UserMapper userMapper;
+
+    /**
+     * 鍒嗛〉鏌ヨ璁惧浣跨敤
+     *
+     * @param page
+     * @return
+     */
+    @Override
+    public Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(Page page, DeviceImpowerDto deviceImpowerDto) {
+        IPage<DeviceImpower> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceImpowerDto));
+        return Result.success(iPage);
+    }
+
+
+    /**
+     * 鏂板璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result addImpower(DeviceImpowerDto deviceImpowerDto) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        deviceImpowerDto.setCompilerId(userId);
+        deviceImpowerDto.setCompiler(user.getName());
+        deviceImpowerDto.setDatePreparation(LocalDateTime.now());
+
+        // 鏌ヨ瀹℃牳浜篿d
+        if (deviceImpowerDto.getAuditId() != null) {
+            User auditUser = userMapper.selectById(deviceImpowerDto.getAuditId());
+            deviceImpowerDto.setAudit(auditUser.getName());
+        }
+        this.saveOrUpdate(deviceImpowerDto);
+
+        // 璇︽儏璧嬪�煎苟淇濆瓨
+        List<DeviceImpowerDetailsDto> deviceImpowerDetails = deviceImpowerDto.getDeviceImpowerDetails();
+        if (CollectionUtils.isNotEmpty(deviceImpowerDetails)) { // 璇︽儏涓嶄负绌�
+            List<DeviceImpowerDetails> collect = deviceImpowerDetails.stream().map(detailsDto -> {
+                detailsDto.setImpowerId(deviceImpowerDto.getImpowerId()); // 浣跨敤ID
+                DeviceImpowerDetails details = new DeviceImpowerDetails();
+                BeanUtils.copyProperties(detailsDto, details);
+                return details;
+            }).collect(Collectors.toList());
+            deviceImpowerDetailsService.saveBatch(collect);
+        }
+
+        return Result.success();
+    }
+
+    /**
+     * 淇敼璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result updateImpower(DeviceImpowerDto deviceImpowerDto) {
+        // 鏌ヨ瀹℃牳浜篿d
+        if (deviceImpowerDto.getAuditId() != null) {
+            User auditUser = userMapper.selectById(deviceImpowerDto.getAuditId());
+            deviceImpowerDto.setAudit(auditUser.getName());
+        }
+        this.saveOrUpdate(deviceImpowerDto);
+
+        // 鍒犻櫎鍘熸湰鐨勮鎯�
+        deviceImpowerDetailsService.remove(Wrappers.<DeviceImpowerDetails>lambdaQuery().eq(DeviceImpowerDetails::getImpowerId, deviceImpowerDto.getImpowerId()));
+        // 璇︽儏璧嬪�煎苟淇濆瓨
+        List<DeviceImpowerDetailsDto> deviceImpowerDetails = deviceImpowerDto.getDeviceImpowerDetails();
+        if (CollectionUtils.isNotEmpty(deviceImpowerDetails)) { // 璇︽儏涓嶄负绌�
+            List<DeviceImpowerDetails> collect = deviceImpowerDetails.stream().map(detailsDto -> {
+                detailsDto.setImpowerId(deviceImpowerDto.getImpowerId()); // 浣跨敤ID
+                DeviceImpowerDetails details = new DeviceImpowerDetails();
+                BeanUtils.copyProperties(detailsDto, details);
+                return details;
+            }).collect(Collectors.toList());
+            deviceImpowerDetailsService.saveBatch(collect);
+        }
+        return Result.success();
+    }
+
+    /**
+     * 鍒犻櫎璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result deleteImpower(DeviceImpowerDto deviceImpowerDto) {
+        this.removeById(deviceImpowerDto);
+        deviceImpowerDetailsService.remove(Wrappers.<DeviceImpowerDetails>lambdaQuery().eq(DeviceImpowerDetails::getImpowerId, deviceImpowerDto.getImpowerId()));
+        return Result.success();
+    }
+
+    /**
+     * 鏌ヨ璁惧浣跨敤璇︽儏
+     *
+     * @param impowerId 璁惧浣跨敤id
+     */
+    @Override
+    public Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId) {
+        // 鏌ヨ璁惧浣跨敤
+        DeviceImpower deviceImpower = baseMapper.selectById(impowerId);
+        // 鏌ヨ璇︽儏
+        DeviceImpowerDto deviceImpowerDto = new DeviceImpowerDto();
+        BeanUtils.copyProperties(deviceImpower, deviceImpowerDto);
+        deviceImpowerDto.setDeviceImpowerDetails(deviceImpowerDetailsMapper.deviceImpowerDetailsList(impowerId));
+        return Result.success(deviceImpowerDto);
+    }
+
+    /**
+     * 鎻愪氦鎵瑰噯
+     * @param deviceImpowerDto
+     * @return
+     */
+    @Override
+    public Result submitReviewImpowerStatus(DeviceImpowerDto deviceImpowerDto) {
+//        User audit = userMapper.selectById(deviceImpowerDto.getAuditId());
+//        this.update(Wrappers.<DeviceImpower>lambdaUpdate()
+//                .eq(DeviceImpower::getImpowerId, deviceImpowerDto.getImpowerId())
+//                .set(DeviceImpower::getAuditId, audit.getId())
+//                .set(DeviceImpower::getAudit, audit.getName())
+//                .set(DeviceImpower::getAuditDate, null)
+//                .set(DeviceImpower::getStatus, null)
+//                .set(DeviceImpower::getAuditRemark, null));
+//
+//        DeviceImpower deviceImpower = baseMapper.selectById(deviceImpowerDto.getImpowerId());
+//
+//        // 鍙戦�佹秷鎭�
+//        Integer userId = SecurityUtils.getUserId().intValue();
+//        User user = userMapper.selectById(userId);
+//        // 娑堟伅鍙戦��
+//        InformationNotification info = new InformationNotification();
+//        // 鍙戦�佷汉
+//        info.setCreateUser(user.getName());
+//        info.setMessageType("6");
+//        info.setTheme("CNAS璁惧浣跨敤鎵瑰噯閫氱煡");
+//        info.setContent(deviceImpower.getPlanYear() + "骞寸殑璁惧浣跨敤寰呮壒鍑�");
+//        info.setSenderId(userId);
+//        // 鎺ユ敹浜�
+//        info.setConsigneeId(audit.getId());
+//        info.setJumpPath(MenuJumpPathConstants.DEVICE);
+//        informationNotificationService.addInformationNotification(info);
+//
+//        // 鍙戦�佷紒涓氬井淇¢�氱煡
+//        threadPoolTaskExecutor.execute(() -> {
+//            String message = "";
+//            message += "CNAS璁惧浣跨敤鏍搁�氱煡";
+//            message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧浣跨敤濉啓";
+//            message += "\n" + deviceImpower.getPlanYear() + "骞寸殑璁惧浣跨敤寰呮壒鍑�";
+//            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+//            try {
+//                WxCpUtils.inform(audit.getAccount(), message, null);
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//        });
+        return Result.success();
+    }
+
+    /**
+     * 瀹℃牳璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result reviewImpowerStatus(DeviceImpowerDto deviceImpowerDto) {
+        LambdaUpdateWrapper<DeviceImpower> wrapper = Wrappers.<DeviceImpower>lambdaUpdate()
+                .eq(DeviceImpower::getImpowerId, deviceImpowerDto.getImpowerId())
+                .set(DeviceImpower::getAuditDate, LocalDateTime.now())
+                .set(DeviceImpower::getStatus, deviceImpowerDto.getStatus())        // 瀹℃牳鐘舵��
+                .set(DeviceImpower::getAuditRemark, deviceImpowerDto.getAuditRemark());// 瀹℃牳澶囨敞
+
+        this.update(wrapper); // 鏇存柊
+        return Result.success();
+    }
+
+    /**
+     * 瀵煎嚭璁惧浣跨敤
+     *
+     * @param ImpowerId 璁惧浣跨敤id
+     */
+    @Override
+    public Result exportDeviceImpowerDto(Integer ImpowerId, HttpServletResponse response) {
+//        // 鏌ヨ璁惧淇濆吇璁″垝
+//        DeviceImpowerDto deviceImpower = baseMapper.selectDeviceImpowerById(ImpowerId);
+//
+//        // 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+//        List<DeviceImpowerDetailsDto> deviceImpowerDetailsDtoList = deviceImpowerDetailsMapper.deviceImpowerDetailsList(ImpowerId);
+//        // 璁剧疆搴忓彿
+//        deviceImpowerDetailsDtoList.forEach(deviceImpowerDetails -> {
+//            deviceImpowerDetails.setIndex(deviceImpowerDetailsDtoList.indexOf(deviceImpowerDetails) + 1);
+//        });
+//
+//        // 鑾峰彇璺緞
+//        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/traceability-management-details.docx");
+//        Configure configure = Configure.builder()
+//                .bind("deviceImpowerDetailsDtoList", new HackLoopTableRenderPolicy())
+//                .build();
+//        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+//                new HashMap<String, Object>() {{
+//                    put("deviceImpower", deviceImpower);
+//                    put("deviceImpowerDetailsDtoList", deviceImpowerDetailsDtoList);
+//                    // 缂栧埗浜虹鍚嶅湴鍧�
+//                    put("compilerUrl", UserUtils.getFinalUserSignatureUrl(deviceImpower.getCompilerId()));
+//                    // 瀹℃牳浜虹鍚嶅湴鍧�
+//                    put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceImpower.getAuditId()));
+//                }});
+//
+//        try {
+//            response.setContentType("application/msword");
+//            String finalFileName = deviceImpower.getFileName() == null ? "" : deviceImpower.getFileName() + "_";
+//            String fileName = URLEncoder.encode(
+//                    finalFileName+ "璁惧浣跨敤", "UTF-8");
+//            response.setHeader("Content-disposition",
+//                    "attachment;filename=" + fileName + ".docx");
+//            OutputStream os = response.getOutputStream();
+//            template.write(os);
+//            os.flush();
+//            os.close();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            throw new RuntimeException("瀵煎嚭澶辫触");
+//        }
+        return Result.success();
+    }
+}
diff --git a/cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml b/cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml
new file mode 100644
index 0000000..6e41e20
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceImpowerDetailsMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceImpowerDetailsMapper">
+
+    <!-- 鏌ヨ璁惧浣跨敤璇︽儏 -->
+    <select id="deviceImpowerDetailsList" resultType="com.ruoyi.device.dto.DeviceImpowerDetailsDto">
+        select
+            did.*,
+            d.device_name,
+            d.device_name,
+            d.specification_model,
+            d.management_number
+        from device_impower_details did
+                 left join device d on did.device_id = d.id
+        where did.traceability_management_id = #{traceabilityManagementId}
+    </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml b/cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml
new file mode 100644
index 0000000..dc9a454
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceImpowerMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceImpowerMapper">
+
+
+    <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceImpower">
+        select
+        *
+        from device_impower
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+</mapper>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java b/ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java
index f12e883..fa4d0dc 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java
@@ -20,8 +20,8 @@
     public static String database_username = "root";
     public static String database_password= "123456";
     public static String author = "";
-    public static String model_name = "/inspect-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
-    public static String setParent = "com.ruoyi.inspect"; // 鍖呰矾寰�
+    public static String model_name = "/cnas-device"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
+    public static String setParent = "com.ruoyi.device"; // 鍖呰矾寰�
     public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
     public static void main(String[] args) {
         String projectPath = System.getProperty("user.dir");

--
Gitblit v1.9.3