zhuo
2025-02-22 d726f4b74afd197b6a8ba0f2afb65abcd6c234c7
移植设备核查计划
已添加39个文件
2608 ■■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExaminePlanController.java 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDetailsDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDto.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDetailsDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDto.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanDetailsMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanMapper.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastDetailsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordDetailMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExternalApplyMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlan.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlanDetails.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecord.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrast.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrastDetails.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordDetail.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExternalApply.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanService.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastService.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExternalApplyService.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanDetailsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java 346 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastDetailsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceExaminePlanDetailsMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceExaminePlanMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceExamineRecordContrastMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceExamineRecordMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceExternalApplyMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceExaminePlanController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,273 @@
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.DeviceExaminePlanDto;
import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
import com.ruoyi.device.dto.DeviceExamineRecordDto;
import com.ruoyi.device.pojo.DeviceExaminePlan;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import com.ruoyi.device.service.DeviceExaminePlanDetailsService;
import com.ruoyi.device.service.DeviceExaminePlanService;
import com.ruoyi.device.service.DeviceExamineRecordContrastService;
import com.ruoyi.device.service.DeviceExamineRecordService;
import com.ruoyi.framework.exception.ErrorException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’主表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:04
 */
@Api(tags = "设备核查计划")
@AllArgsConstructor
@RestController
@RequestMapping("/deviceExaminePlan")
public class DeviceExaminePlanController {
    private DeviceExaminePlanService deviceExaminePlanService;
    private DeviceExaminePlanDetailsService deviceExaminePlanDetailsService;
    private DeviceExamineRecordService deviceExamineRecordService;
    private DeviceExamineRecordContrastService deviceExamineRecordContrastService;
    /**
     * æ–°å¢žè®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @return
     */
    @ApiOperation(value = "新增设备核查计划")
    @PostMapping("/addDeviceExaminePlan")
    public Result addDeviceExaminePlan(@RequestBody DeviceExaminePlanDto examinePlanDto){
        return Result.success(deviceExaminePlanService.addDeviceExaminePlan(examinePlanDto));
    }
    /**
     * ä¿®æ”¹è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param examinePlanDto è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     */
    @ApiOperation("批量修改设备核查计划")
    @PostMapping("/updateDeviceExaminePlan")
    public Result updateDeviceExaminePlan(@RequestBody DeviceExaminePlanDto examinePlanDto) {
        return Result.success(deviceExaminePlanService.updateDeviceExaminePlan(examinePlanDto));
    }
    /**
     * æŸ¥è¯¢è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     */
    @ApiOperation("查询设备核查计划详情")
    @GetMapping("/getDeviceExaminePlan")
    public Result<DeviceExaminePlanDto> getDeviceExaminePlan(Integer planId) {
        return Result.success(deviceExaminePlanService.getDeviceExaminePlan(planId));
    }
    /**
     * å¯¼å…¥è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @return
     */
    @ApiOperation(value = "导入设备核查计划")
    @PostMapping("/importDeviceExaminePlan")
    public Result importDeviceExaminePlan(MultipartFile file){
        return Result.success(deviceExaminePlanService.importDeviceExaminePlan(file));
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’删除
     * @return
     */
    @ApiOperation(value = "设备核查计划删除")
    @GetMapping("/delQualitySupervise")
    public Result delQualitySupervise(Integer planId){
        return Result.success(deviceExaminePlanService.removeById(planId));
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’批准
     * @return
     */
    @ApiOperation(value = "提交批准")
    @PostMapping("/submitRatifyDeviceExaminePlan")
    public Result submitRatifyDeviceExaminePlan(@RequestBody DeviceExaminePlan DeviceExaminePlan){
        return Result.success(deviceExaminePlanService.submitRatifyDeviceExaminePlan(DeviceExaminePlan));
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’批准
     * @return
     */
    @ApiOperation(value = "设备核查计划批准")
    @PostMapping("/ratifyDeviceExaminePlan")
    public Result ratifyDeviceExaminePlan(@RequestBody DeviceExaminePlan DeviceExaminePlan){
        return Result.success(deviceExaminePlanService.ratifyDeviceExaminePlan(DeviceExaminePlan));
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’列表
     * @return
     */
    @ApiOperation(value = "设备核查计划列表")
    @PostMapping("/pageDeviceExaminePlan")
    public Result<IPage<DeviceExaminePlanDto>> pageDeviceExaminePlan(Page page, DeviceExaminePlan DeviceExaminePlan) {
        return Result.success(deviceExaminePlanService.pageDeviceExaminePlan(page, DeviceExaminePlan));
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情列表
     * @return
     */
    @ApiOperation(value = "设备核查计划详情列表")
    @PostMapping("/pageDeviceExaminePlanDetail")
    public Result<IPage<DeviceExaminePlanDetails>> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails deviceExaminePlanDetails) {
        return Result.success(deviceExaminePlanService.pageDeviceExaminePlanDetail(page, deviceExaminePlanDetails));
    }
    /**
     * æ–°å¢žè®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     * @return
     */
    @ApiOperation(value = "新增设备核查计划详情")
    @PostMapping("/addDeviceExaminePlanDetail")
    public Result addDeviceExaminePlanDetail(@RequestBody DeviceExaminePlanDetails deviceExaminePlanDetail){
        if (deviceExaminePlanDetail.getPlanId() == null) {
            throw new ErrorException("缺少设备核查计划主表id");
        }
        return Result.success(deviceExaminePlanDetailsService.save(deviceExaminePlanDetail));
    }
    /**
     * ä¿®æ”¹è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     * @return
     */
    @ApiOperation(value = "修改设备核查计划详情")
    @PostMapping("/updateDeviceExaminePlanDetail")
    public Result updateDeviceExaminePlanDetail(@RequestBody DeviceExaminePlanDetails deviceExaminePlanDetail){
        return Result.success(deviceExaminePlanDetailsService.updateById(deviceExaminePlanDetail));
    }
    /**
     * åˆ é™¤è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     * @return
     */
    @ApiOperation(value = "删除设备核查计划详情")
    @GetMapping("/delDeviceExaminePlanDetail")
    public Result delDeviceExaminePlanDetail(Integer planDetailsId){
        return Result.success(deviceExaminePlanDetailsService.removeById(planDetailsId));
    }
    /**
     * å¯¼å‡ºè®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param planId è®¾å¤‡æ ¸æŸ¥è®¡åˆ’id
     * @return
     */
    @ApiOperation(value = "导出设备核查计划")
    @GetMapping("/exportDeviceExaminePlanDetail")
    public void exportDeviceExaminePlanDetail(Integer planId, HttpServletResponse response){
        deviceExaminePlanService.exportDeviceExaminePlanDetail(planId, response);
    }
    /*********************************************** æŠ¥å‘Š **************************************************/
    /**
     * æŸ¥è¯¢æ ¸æŸ¥è®°å½•
     * @return
     */
    @ApiOperation(value = "查询核查记录")
    @GetMapping("/getExamineRecord")
    public Result<DeviceExamineRecordDto> getExamineRecord(Integer planDetailsId){
        return Result.success(deviceExamineRecordService.getExamineRecord(planDetailsId));
    }
    /**
     * æ–°å¢žæ ¸æŸ¥è®°å½•
     * @return
     */
    @ApiOperation(value = "新增核查记录")
    @PostMapping("/addExamineRecord")
    public Result addExamineRecord(@RequestBody DeviceExamineRecordDto deviceExamineRecordDto){
        return Result.success(deviceExamineRecordService.addExamineRecord(deviceExamineRecordDto));
    }
    /**
     * å¤æ ¸æ ¸æŸ¥è®°å½•
     * @return
     */
    @ApiOperation(value = "复核核查记录")
    @PostMapping("/reviewExamineRecord")
    public Result reviewExamineRecord(@RequestBody DeviceExamineRecordDto deviceExamineRecordDto){
        return Result.success(deviceExamineRecordService.reviewExamineRecord(deviceExamineRecordDto));
    }
    /**
     * å¯¼å‡ºå¤æ ¸æ ¸æŸ¥è®°å½•
     * @param planDetailsId
     * @return
     */
    @ApiOperation(value = "导出复核核查记录")
    @GetMapping("/exportReviewExamineRecordDetail")
    public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response){
        deviceExamineRecordService.exportReviewExamineRecordDetail(planDetailsId, response);
    }
    /*********************************************** æŠ¥å‘Šå¯¹æ¯” **************************************************/
    /**
     * æŸ¥è¯¢æ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    @ApiOperation(value = "查询核查对比记录")
    @GetMapping("/getExamineRecordContrast")
    public Result<DeviceExamineRecordContrastDto> getExamineRecordContrast(Integer planDetailsId){
        return Result.success(deviceExamineRecordContrastService.getExamineRecordContrast(planDetailsId));
    }
    /**
     * æ–°å¢žæ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    @ApiOperation(value = "新增核查对比记录")
    @PostMapping("/addExamineRecordContrast")
    public Result addExamineRecordContrast(@RequestBody DeviceExamineRecordContrastDto deviceExamineRecordContrastDto){
        return Result.success(deviceExamineRecordContrastService.addExamineRecordContrast(deviceExamineRecordContrastDto));
    }
    /**
     * å®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    @ApiOperation(value = "审核核查对比记录")
    @PostMapping("/reviewExamineRecordContrast")
    public Result reviewExamineRecordContrast(@RequestBody DeviceExamineRecordContrastDto deviceExamineRecordContrastDto){
        return Result.success(deviceExamineRecordContrastService.reviewExamineRecordContrast(deviceExamineRecordContrastDto));
    }
    /**
     * å¯¼å‡ºå®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录
     * @param planDetailsId
     * @return
     */
    @ApiOperation(value = "导出审核核查对比记录")
    @GetMapping("/exportReviewExamineRecordContrast")
    public Result exportReviewExamineRecordContrast(Integer planDetailsId, HttpServletResponse response){
        deviceExamineRecordContrastService.exportReviewExamineRecordContrast(planDetailsId, response);
        return Result.success();
    }
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDetailsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-17 æ˜ŸæœŸäºŒ 15:34:44
 * Description:
 */
@Data
public class DeviceExaminePlanDetailsDto extends DeviceExaminePlanDetails {
    @ApiModelProperty("序号")
    private Integer index;
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExaminePlanDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceExaminePlan;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/12/16
 */
@Data
public class DeviceExaminePlanDto extends DeviceExaminePlan {
    @ApiModelProperty("编制人")
    private String writeName;
    @ApiModelProperty("批准人")
    private String ratifyName;
    @ApiModelProperty("编制时间")
    private String writeTimeStr;
    @ApiModelProperty("批准时间")
    private String ratifyTimeStr;
    @ApiModelProperty("年度")
    private String year;
    private List<DeviceExaminePlanDetails> examinePlanDetailsList;
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDetailsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-17 æ˜ŸæœŸäºŒ 13:59:37
 * Description:
 */
@Data
public class DeviceExamineRecordContrastDetailsDto extends DeviceExamineRecordContrastDetails {
    @ApiModelProperty("序号")
    private Integer index;
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordContrastDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/12/16
 */
@Data
public class DeviceExamineRecordContrastDto extends DeviceExamineRecordContrast {
    @ApiModelProperty("核查记录对比详情")
    private List<DeviceExamineRecordContrastDetails> recordContrastDetailsList;
    @ApiModelProperty("A设备名称")
    private String aDeviceName;
    @ApiModelProperty("A设备编号")
    private String aDeviceNumber;
    @ApiModelProperty("b设备名称")
    private String bDeviceName;
    @ApiModelProperty("b设备编号")
    private String bDeviceNumber;
    @ApiModelProperty("c设备名称")
    private String cDeviceName;
    @ApiModelProperty("c设备编号")
    private String cDeviceNumber;
    @ApiModelProperty("核查日期")
    private String checkerTimeStr;
    @ApiModelProperty("审核日期")
    private String reviewTimeStr;
    @ApiModelProperty("实验室")
    private String labName;
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExamineRecordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceExamineRecord;
import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/12/16
 */
@Data
public class DeviceExamineRecordDto extends DeviceExamineRecord {
    @ApiModelProperty("核查记录详情")
    private List<DeviceExamineRecordDetail> recordDetailList;
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("设备编号")
    private String deviceNumber;
    @ApiModelProperty("最后一次修改日期")
    private String updateTimeStr;
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanDetailsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:16
 */
public interface DeviceExaminePlanDetailsMapper extends BaseMapper<DeviceExaminePlanDetails> {
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情列表
     * @param page
     * @param ew
     * @return
     */
    IPage<DeviceExaminePlanDetails> pageDeviceExaminePlanDetail(Page page, @Param("ew") QueryWrapper<DeviceExaminePlanDetails> ew);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExaminePlanMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceExaminePlanDto;
import com.ruoyi.device.pojo.DeviceExaminePlan;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’主表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:04
 */
public interface DeviceExaminePlanMapper extends BaseMapper<DeviceExaminePlan> {
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’列表
     * @param page
     * @param ew
     * @return
     */
    IPage<DeviceExaminePlanDto> deviceExaminePlanDetailsMapper(Page page, @Param("ew") QueryWrapper<DeviceExaminePlan> ew);
    /**
     * æŸ¥è¯¢è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     * @param deviceExaminePlanId è®¾å¤‡æ ¸æŸ¥è®¡åˆ’id
     * @return
     */
    DeviceExaminePlanDto selectExamineExaminePlanDto(@Param("deviceExaminePlanId") Integer deviceExaminePlanId);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastDetailsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比详情表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:57
 */
public interface DeviceExamineRecordContrastDetailsMapper extends BaseMapper<DeviceExamineRecordContrastDetails> {
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordContrastMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:43
 */
public interface DeviceExamineRecordContrastMapper extends BaseMapper<DeviceExamineRecordContrast> {
    /**
     * æŸ¥è¯¢æ ¸æŸ¥å¯¹æ¯”记录
     * @param planDetailsId
     * @return
     */
    DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId);
    /**
     * æŸ¥è¯¢å¯¹æ¯”记录用于导出
     * @param planDetailsId
     * @return
     */
    DeviceExamineRecordContrastDto selectExamineRecordContrastDto(@Param("planDetailsId") Integer planDetailsId);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordDetailMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•详情表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:15:11
 */
public interface DeviceExamineRecordDetailMapper extends BaseMapper<DeviceExamineRecordDetail> {
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExamineRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.dto.DeviceExamineRecordDto;
import com.ruoyi.device.pojo.DeviceExamineRecord;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:28
 */
public interface DeviceExamineRecordMapper extends BaseMapper<DeviceExamineRecord> {
    /**
     * æŸ¥è¯¢è®¾å¤‡æ ¸æŸ¥è®°å½•
     * @param planDetailsId
     * @return
     */
    DeviceExamineRecordDto getExamineRecord(Integer planDetailsId);
    /**
     * å¤æ ¸æ ¸æŸ¥è®°å½•
     * @param planDetailsId å¤æ ¸æ ¸æŸ¥è®°å½•id
     * @return
     */
    DeviceExamineRecordDto selectReviewExamineRecordDto(@Param("planDetailsId") Integer planDetailsId);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceExternalApplyMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.pojo.DeviceExternalApply;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * åˆ©ç”¨å¤–部设备申请表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 10:28:43
 */
public interface DeviceExternalApplyMapper extends BaseMapper<DeviceExternalApply> {
    /**
     * åˆ©ç”¨å¤–部设备申请列表
     * @param page
     * @param ew
     * @return
     */
    IPage<DeviceExternalApply> pageDeviceExternalApply(Page page, @Param("ew") QueryWrapper<DeviceExternalApply> ew);
    /**
     * å¯¼å‡ºæŸ¥è¯¢åˆ©ç”¨å¤–部设备申请
     * @param externalApplyId å¤–部设备申请表id
     * @return
     */
    DeviceExternalApply selectDeviceExternalById(@Param("externalApplyId") Integer externalApplyId);
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlan.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’主表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:04
 */
@Getter
@Setter
@TableName("device_examine_plan")
@ApiModel(value = "DeviceExaminePlan对象", description = "设备核查计划主表")
public class DeviceExaminePlan{
    @TableId(value = "plan_id", type = IdType.AUTO)
    private Integer planId;
    @ApiModelProperty("计划名称")
    private String planName;
    @ApiModelProperty("计划名称")
    private String planYear;
    @ApiModelProperty("编制人")
    private Integer writeUserId;
    @ApiModelProperty("编制时间")
    private LocalDateTime writeTime;
    @ApiModelProperty("批准人")
    private Integer ratifyUserId;
    @ApiModelProperty("批准时间")
    private LocalDateTime ratifyTime;
    @ApiModelProperty("批准状态,0 ä¸é€šè¿‡, 1 é€šè¿‡")
    private Integer ratifyStatus;
    @ApiModelProperty("批准信息")
    private String ratifyRemark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExaminePlanDetails.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:16
 */
@Getter
@Setter
@TableName("device_examine_plan_details")
@ApiModel(value = "DeviceExaminePlanDetails对象", description = "设备核查计划详情表")
public class DeviceExaminePlanDetails {
    @TableId(value = "plan_details_id", type = IdType.AUTO)
    private Integer planDetailsId;
    @ApiModelProperty("主表id")
    private Integer planId;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("设备编号")
    private String deviceNumber;
    @ApiModelProperty("计划名称")
    private String deviceName;
    @ApiModelProperty("核查时间")
    private String checkTime;
    @ApiModelProperty("核查指标")
    private String checkIndex;
    @ApiModelProperty("核查方法")
    private String checkMethod;
    @ApiModelProperty("结果如何判定")
    private String howResults;
    @ApiModelProperty("核查责任人id")
    private Integer checkChargerUserId;
    @ApiModelProperty("核查责任人")
    private String checkChargerUser;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,139 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:28
 */
@Getter
@Setter
@TableName("device_examine_record")
@ApiModel(value = "DeviceExamineRecord对象", description = "设备核查记录表")
public class DeviceExamineRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "record_id", type = IdType.AUTO)
    private Integer recordId;
    @ApiModelProperty("设备核查详情id")
    private Integer planDetailsId;
    @ApiModelProperty("精度等级")
    private String accuracyGrade;
    @ApiModelProperty("使用物质名称")
    private String materialName;
    @ApiModelProperty("使用物质管理编号")
    private String materialNumber;
    @ApiModelProperty("使用物质精度/不确定度")
    private String materialAccuracyUncertainty;
    @ApiModelProperty("使用物质规格型号")
    private String materialModel;
    @ApiModelProperty("使用物质核查方式")
    private String materialCheckMethod;
    @ApiModelProperty("使用物质核查项目")
    private String materialCheckItems;
    @ApiModelProperty("温度")
    private String temperature;
    @ApiModelProperty("湿度")
    private String humidity;
    @ApiModelProperty("判定")
    private String determine;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("核查人id")
    private Integer checkerUserId;
    @ApiModelProperty("核查人")
    private String checkerUser;
    @ApiModelProperty("复核人id")
    private Integer reviewUserId;
    @ApiModelProperty("复核人")
    private String reviewUser;
    @ApiModelProperty("审核状态0,不通过, 1通过")
    private Integer reviewStatus;
    @ApiModelProperty("审核备注")
    private String reviewRemark;
    @ApiModelProperty("测试点1")
    private String dataValue1;
    @ApiModelProperty("测试点2")
    private String dataValue2;
    @ApiModelProperty("测试点3")
    private String dataValue3;
    @ApiModelProperty("测试点4")
    private String dataValue4;
    @ApiModelProperty("测试点5")
    private String dataValue5;
    @ApiModelProperty("测试点6")
    private String dataValue6;
    @ApiModelProperty("最大偏差1")
    private String maximun1;
    @ApiModelProperty("最大偏差2")
    private String maximun2;
    @ApiModelProperty("最大偏差3")
    private String maximun3;
    @ApiModelProperty("最大偏差4")
    private String maximun4;
    @ApiModelProperty("最大偏差5")
    private String maximun5;
    @ApiModelProperty("最大偏差6")
    private String maximun6;
    @ApiModelProperty("相对偏差1")
    private String relative1;
    @ApiModelProperty("相对偏差2")
    private String relative2;
    @ApiModelProperty("相对偏差3")
    private String relative3;
    @ApiModelProperty("相对偏差4")
    private String relative4;
    @ApiModelProperty("相对偏差5")
    private String relative5;
    @ApiModelProperty("相对偏差6")
    private String relative6;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrast.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:43
 */
@Getter
@Setter
@TableName("device_examine_record_contrast")
@ApiModel(value = "DeviceExamineRecordContrast对象", description = "设备核查记录对比表")
public class DeviceExamineRecordContrast implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "record_contrast_id", type = IdType.AUTO)
    private Integer recordContrastId;
    @ApiModelProperty("核查方式")
    private String checkMethod;
    @ApiModelProperty("设备核查详情id")
    private Integer planDetailsId;
    @ApiModelProperty("设备idA")
    private Integer aDeviceId;
    @ApiModelProperty("设备idb")
    private Integer bDeviceId;
    @ApiModelProperty("设备idc")
    private Integer cDeviceId;
    @ApiModelProperty("范围不确定度A")
    private String aRangeUncertainty;
    @ApiModelProperty("范围不确定度b")
    private String bRangeUncertainty;
    @ApiModelProperty("范围不确定度c")
    private String cRangeUncertainty;
    @ApiModelProperty("综合判定")
    private String judgment;
    @ApiModelProperty("核查人id")
    private Integer checkerUserId;
    @ApiModelProperty("核查人")
    private String checkerUser;
    @ApiModelProperty("核查日期")
    private LocalDateTime checkerTime;
    @ApiModelProperty("审核人id")
    private Integer reviewUserId;
    @ApiModelProperty("审核人")
    private String reviewUser;
    @ApiModelProperty("审核状态0,不通过, 1通过")
    private Integer reviewStatus;
    @ApiModelProperty("审核备注")
    private String reviewRemark;
    @ApiModelProperty("审核日期")
    private LocalDateTime reviewTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordContrastDetails.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比详情表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:57
 */
@Getter
@Setter
@TableName("device_examine_record_contrast_details")
@ApiModel(value = "DeviceExamineRecordContrastDetails对象", description = "设备核查记录对比详情表")
public class DeviceExamineRecordContrastDetails implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "record_contrast_details_id", type = IdType.AUTO)
    private Integer recordContrastDetailsId;
    @ApiModelProperty("设备核查详情id")
    private Integer recordContrastId;
    @ApiModelProperty("核查项目")
    private String checkItems;
    @ApiModelProperty("a仪器示值")
    private String indicationA;
    @ApiModelProperty("b仪器示值")
    private String indicationB;
    @ApiModelProperty("c仪器示值")
    private String indicationC;
    @ApiModelProperty("差值")
    private String dValue;
    @ApiModelProperty("偏差")
    private String deviation;
    @ApiModelProperty("判定")
    private String determine;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExamineRecordDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•详情表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:15:11
 */
@Getter
@Setter
@TableName("device_examine_record_detail")
@ApiModel(value = "DeviceExamineRecordDetail对象", description = "设备核查记录详情表")
public class DeviceExamineRecordDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "record_detail_id", type = IdType.AUTO)
    private Integer recordDetailId;
    @ApiModelProperty("设设备核查记录id")
    private Integer recordId;
    @ApiModelProperty("测试点")
    private String testPoint;
    @ApiModelProperty("内容值1")
    private String dataValue1;
    @ApiModelProperty("内容值2")
    private String dataValue2;
    @ApiModelProperty("内容值3")
    private String dataValue3;
    @ApiModelProperty("内容值4")
    private String dataValue4;
    @ApiModelProperty("内容值5")
    private String dataValue5;
    @ApiModelProperty("内容值6")
    private String dataValue6;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceExternalApply.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * åˆ©ç”¨å¤–部设备申请表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 10:28:43
 */
@Getter
@Setter
@TableName("device_external_apply")
@ApiModel(value = "DeviceExternalApply对象", description = "利用外部设备申请表")
public class DeviceExternalApply{
    @TableId(value = "external_apply_id", type = IdType.AUTO)
    private Integer externalApplyId;
    @ApiModelProperty("单位名称")
    private String unitName;
    @ApiModelProperty("地址")
    private String address;
    @ApiModelProperty("仪器名称")
    private String deviceName;
    @ApiModelProperty("仪器型号")
    private String deviceModel;
    @ApiModelProperty("配件")
    private String parts;
    @ApiModelProperty("对方仪器编号")
    private String instrumentNumber;
    @ApiModelProperty("技术指标")
    private String technicalIndex;
    @ApiModelProperty("技术要求")
    private String technicalRequirements;
    @ApiModelProperty("利用原因")
    private String useReason;
    @ApiModelProperty("0申请人id")
    private Integer applicantUserId;
    @ApiModelProperty("0申请人")
    private String applicantUser;
    @ApiModelProperty("0申请时间")
    private LocalDate applicantDate;
    @ApiModelProperty("1部门负责人意见")
    private String departmentHeadOpinion;
    @ApiModelProperty("1部门负责人id")
    private Integer departmentHeadUserId;
    @ApiModelProperty("1部门负责人")
    private String departmentHeadUser;
    @ApiModelProperty("1部门负责人填写时间")
    private LocalDate departmentHeadDate;
    @ApiModelProperty("2计量室意见")
    private String meteringRoomOpinion;
    @ApiModelProperty("2计量室人id")
    private Integer meteringRoomUserId;
    @ApiModelProperty("2计量室人")
    private String meteringRoomUser;
    @ApiModelProperty("2计量室人填写时间")
    private LocalDate meteringRoomDate;
    @ApiModelProperty("3批准人意见")
    private String approverOpinion;
    @ApiModelProperty("3批准人id")
    private Integer approverUserId;
    @ApiModelProperty("3批准人")
    private String approverUser;
    @ApiModelProperty("3批准人填写时间")
    private LocalDate approverDate;
    @ApiModelProperty("是否结束,0: æœªç»“束, 1:结束")
    private Integer isFinish;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false,select = false)
    @ApiModelProperty("流程, 0:申请, 1申请部门负责人意见, 2:计量室意见, 3:批准人")
    private Integer flowType;
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanDetailsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:16
 */
public interface DeviceExaminePlanDetailsService extends IService<DeviceExaminePlanDetails> {
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExaminePlanService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceExaminePlanDto;
import com.ruoyi.device.pojo.DeviceExaminePlan;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’主表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:04
 */
public interface DeviceExaminePlanService extends IService<DeviceExaminePlan> {
    /**
     * æ–°å¢žè®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param examinePlanDto
     * @return
     */
    boolean addDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto);
    /**
     * å¯¼å…¥è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param file
     * @return
     */
    boolean importDeviceExaminePlan(MultipartFile file);
    /**
     * æäº¤æ‰¹å‡†
     * @param deviceExaminePlan
     * @return
     */
    boolean submitRatifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan);
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’批准
     * @param DeviceExaminePlan
     * @return
     */
    boolean ratifyDeviceExaminePlan(DeviceExaminePlan DeviceExaminePlan);
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’列表
     * @param page
     * @param DeviceExaminePlan
     * @return
     */
    IPage<DeviceExaminePlanDto> pageDeviceExaminePlan(Page page, DeviceExaminePlan DeviceExaminePlan);
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情列表
     * @param page
     * @param DeviceExaminePlanDetails
     * @return
     */
    IPage<DeviceExaminePlanDetails> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails DeviceExaminePlanDetails);
    /**
     * å¯¼å‡ºè®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param deviceExaminePlanId è®¾å¤‡æ ¸æŸ¥è®¡åˆ’id
     * @param response å“åº”
     */
    void exportDeviceExaminePlanDetail(Integer deviceExaminePlanId, HttpServletResponse response);
    /**
     * æ‰¹é‡ä¿®æ”¹è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param examinePlanDto
     * @return
     */
    boolean updateDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto);
    /**
     * æŸ¥è¯¢è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     * @param planId
     * @return
     */
    DeviceExaminePlanDto getDeviceExaminePlan(Integer planId);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastDetailsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比详情表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:57
 */
public interface DeviceExamineRecordContrastDetailsService extends IService<DeviceExamineRecordContrastDetails> {
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordContrastService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:43
 */
public interface DeviceExamineRecordContrastService extends IService<DeviceExamineRecordContrast> {
    /**
     * æŸ¥è¯¢æ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId);
    /**
     * æ–°å¢žæ ¸æŸ¥å¯¹æ¯”记录
     * @return
     *
     */
    boolean addExamineRecordContrast(DeviceExamineRecordContrastDto deviceExamineRecordContrastDto);
    /**
     * å®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    boolean reviewExamineRecordContrast(DeviceExamineRecordContrastDto deviceExamineRecordContrastDto);
    /**
     * å¯¼å‡ºå®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录
     *
     * @param recordId å®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录id
     * @param response
     * @return
     */
    void exportReviewExamineRecordContrast(Integer recordId, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordDetailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•详情表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:15:11
 */
public interface DeviceExamineRecordDetailService extends IService<DeviceExamineRecordDetail> {
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExamineRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceExamineRecordDto;
import com.ruoyi.device.pojo.DeviceExamineRecord;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:28
 */
public interface DeviceExamineRecordService extends IService<DeviceExamineRecord> {
    /**
     * æŸ¥è¯¢æ ¸æŸ¥è®°å½•
     * @return
     */
    DeviceExamineRecordDto getExamineRecord(Integer planDetailsId);
    /**
     * æ–°å¢žæ ¸æŸ¥è®°å½•
     * @return
     */
    boolean addExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto);
    /**
     * å¤æ ¸æ ¸æŸ¥è®°å½•
     * @return
     */
    boolean reviewExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto);
    /**
     * å¯¼å‡ºå¤æ ¸æ ¸æŸ¥è®°å½•
     * @param planDetailsId
     * @param response å“åº”
     */
    void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceExternalApplyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceExternalApply;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * åˆ©ç”¨å¤–部设备申请表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 10:28:43
 */
public interface DeviceExternalApplyService extends IService<DeviceExternalApply> {
    /**
     * åˆ©ç”¨å¤–部设备申请列表
     * @param page
     * @param deviceExternalApply
     * @return
     */
    IPage<DeviceExternalApply> pageDeviceExternalApply(Page page, DeviceExternalApply deviceExternalApply);
    /**
     * æ–°å¢žåˆ©ç”¨å¤–部设备申请
     * @param deviceExternalApply
     * @return
     */
    boolean addDeviceExternalApply(DeviceExternalApply deviceExternalApply);
    /**
     * å¯¼å‡ºåˆ©ç”¨å¤–部设备申请
     *
     * @param externalApplyId å¤–部设备申请id
     * @param response
     */
    void exportDeviceExternalApply(Integer externalApplyId, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanDetailsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import com.ruoyi.device.service.DeviceExaminePlanDetailsService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:16
 */
@Service
public class DeviceExaminePlanDetailsServiceImpl extends ServiceImpl<DeviceExaminePlanDetailsMapper, DeviceExaminePlanDetails> implements DeviceExaminePlanDetailsService {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,346 @@
package com.ruoyi.device.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
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.DeviceExaminePlanDetailsDto;
import com.ruoyi.device.dto.DeviceExaminePlanDto;
import com.ruoyi.device.excel.upload.DeviceExaminePlanUpload;
import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
import com.ruoyi.device.mapper.DeviceExaminePlanMapper;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.pojo.DeviceExaminePlan;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import com.ruoyi.device.service.DeviceExaminePlanDetailsService;
import com.ruoyi.device.service.DeviceExaminePlanService;
import com.ruoyi.framework.exception.ErrorException;
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.springframework.beans.BeanUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’主表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:04
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class DeviceExaminePlanServiceImpl extends ServiceImpl<DeviceExaminePlanMapper, DeviceExaminePlan> implements DeviceExaminePlanService {
    @Resource
    private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
    @Resource
    private DeviceExaminePlanDetailsService deviceExaminePlanDetailsService;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private DeviceMapper deviceMapper;
    @Resource
    private UserMapper userMapper;
    /**
     * æ–°å¢žè®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param examinePlanDto
     * @return
     */
    @Override
    public boolean addDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto) {
        // å½“前登录用户
        Integer userId = SecurityUtils.getUserId().intValue();
        // æ–‡ä»¶åç§°
        examinePlanDto.setWriteUserId(userId);
        examinePlanDto.setWriteTime(LocalDateTime.now());
        baseMapper.insert(examinePlanDto);
        // æ·»åŠ è¯¦æƒ…
        if (CollectionUtils.isNotEmpty(examinePlanDto.getExaminePlanDetailsList())) {
            for (DeviceExaminePlanDetails deviceExaminePlanDetails : examinePlanDto.getExaminePlanDetailsList()) {
                deviceExaminePlanDetails.setPlanId(examinePlanDto.getPlanId());
            }
            deviceExaminePlanDetailsService.saveBatch(examinePlanDto.getExaminePlanDetailsList());
        }
        return true;
    }
    /**
     * å¯¼å…¥è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param file
     * @return
     */
    @Override
    public boolean importDeviceExaminePlan(MultipartFile file) {
        // å½“前登录用户
        Integer userId = SecurityUtils.getUserId().intValue();
        // æ–‡ä»¶åç§°
        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
        DeviceExaminePlan examinePlan = new DeviceExaminePlan();
        examinePlan.setPlanName(fileName);
        examinePlan.setWriteUserId(userId);
        examinePlan.setWriteTime(LocalDateTime.now());
        baseMapper.insert(examinePlan);
        List<DeviceExaminePlanDetails> examinePlanDetails = new ArrayList<>();
        // å¯¼å…¥é™„件内容
        try {
            // excel解析
            EasyExcel.read(file.getInputStream(), DeviceExaminePlanUpload.class, new AnalysisEventListener<DeviceExaminePlanUpload>() {
                @Override
                public void invoke(DeviceExaminePlanUpload detailsUpload, AnalysisContext analysisContext) {
                    // åˆ¤æ–­æ˜¯å¦ä¸ºç©º
                    if (StringUtils.isNotBlank(detailsUpload.getDeviceName()) &&
                            StringUtils.isNotBlank(detailsUpload.getDeviceNumber())) {
                        // å¯¹è±¡å¤åˆ¶
                        DeviceExaminePlanDetails planDetails = new DeviceExaminePlanDetails();
                        BeanUtils.copyProperties(detailsUpload, planDetails);
                        planDetails.setPlanId(examinePlan.getPlanId());
                        examinePlanDetails.add(planDetails);
                    }
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                }
            }).sheet().doRead();
            for (DeviceExaminePlanDetails examinePlanDetail : examinePlanDetails) {
                Device device = deviceMapper.selectOne(Wrappers.<Device>lambdaQuery()
                        .eq(Device::getManagementNumber, examinePlanDetail.getDeviceNumber().trim()));
                if (device == null) {
                    throw new ErrorException("设备编号" + examinePlanDetail.getDeviceNumber() + "未查询到设备, è¯·é‡æ–°å¯¼å…¥");
                }
                User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                        .eq(User::getName, examinePlanDetail.getCheckChargerUser()));
                if (user == null) {
                    throw new ErrorException("设备编号" + examinePlanDetail.getDeviceNumber() + "未查询到核查人");
                }
                examinePlanDetail.setDeviceId(device.getId());
                examinePlanDetail.setCheckChargerUserId(user.getId());
            }
            deviceExaminePlanDetailsService.saveBatch(examinePlanDetails);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return true;
    }
    /**
     * æäº¤æ‰¹å‡†
     * @param deviceExaminePlan
     * @return
     */
    @Override
    public boolean submitRatifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan) {
        baseMapper.update(null, Wrappers.<DeviceExaminePlan>lambdaUpdate()
                .eq(DeviceExaminePlan::getPlanId, deviceExaminePlan.getPlanId())
                .set(DeviceExaminePlan::getRatifyUserId, deviceExaminePlan.getRatifyUserId())
                .set(DeviceExaminePlan::getRatifyRemark, null)
                .set(DeviceExaminePlan::getRatifyStatus, null)
                .set(DeviceExaminePlan::getRatifyTime, null)
        );
        DeviceExaminePlan examinePlan = baseMapper.selectById(deviceExaminePlan.getPlanId());
        // å‘送消息
        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(examinePlan.getPlanName() + "的设备核查计划待批准");
        info.setSenderId(userId);
        // æŽ¥æ”¶äºº
        info.setConsigneeId(examinePlan.getRatifyUserId());
        info.setJumpPath("a6-device");
        informationNotificationService.addInformationNotification(info);
        // å‘送企业微信通知
        threadPoolTaskExecutor.execute(() -> {
            // æŸ¥è¯¢æŽ¥æ”¶äºº
            User personnel = userMapper.selectById(examinePlan.getRatifyUserId());
            String message = "";
            message += "CNAS设备核查计划批准通知";
            message += "\n请去资源管理-设备一层目录-设备核查计划填写";
            message += "\n" + examinePlan.getPlanName() + "的校准核查划待批准";
            //发送企业微信消息通知
            try {
                WxCpUtils.inform(personnel.getAccount(), message, null);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
        return false;
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’批准
     * @param deviceExaminePlan
     * @return
     */
    @Override
    public boolean ratifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan) {
        // å½“前登录用户
        baseMapper.update(null, Wrappers.<DeviceExaminePlan>lambdaUpdate()
                .eq(DeviceExaminePlan::getPlanId, deviceExaminePlan.getPlanId())
                .set(DeviceExaminePlan::getRatifyRemark, deviceExaminePlan.getRatifyRemark())
                .set(DeviceExaminePlan::getRatifyStatus, deviceExaminePlan.getRatifyStatus())
                .set(DeviceExaminePlan::getRatifyTime, LocalDateTime.now())
        );
        return true;
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’列表
     * @param page
     * @param deviceExaminePlan
     * @return
     */
    @Override
    public IPage<DeviceExaminePlanDto> pageDeviceExaminePlan(Page page, DeviceExaminePlan deviceExaminePlan) {
        return baseMapper.deviceExaminePlanDetailsMapper(page, QueryWrappers.queryWrappers(deviceExaminePlan));
    }
    /**
     * è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情列表
     * @param page
     * @param deviceExaminePlanDetails
     * @return
     */
    @Override
    public IPage<DeviceExaminePlanDetails> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails deviceExaminePlanDetails) {
        if (deviceExaminePlanDetails.getPlanId() == null) {
            return new Page();
        }
        return deviceExaminePlanDetailsMapper.pageDeviceExaminePlanDetail(page, QueryWrappers.queryWrappers(deviceExaminePlanDetails));
    }
    /**
     * å¯¼å‡ºè®¾å¤‡æ ¸æŸ¥è®¡åˆ’
     * @param deviceExaminePlanId è®¾å¤‡æ ¸æŸ¥è®¡åˆ’id
     * @param response å“åº”体
     */
    @Override
    public void exportDeviceExaminePlanDetail(Integer deviceExaminePlanId, HttpServletResponse response) {
        // æŸ¥è¯¢è®¾å¤‡æ ¸æŸ¥è®¡åˆ’
        DeviceExaminePlanDto deviceExaminePlanDto = baseMapper.selectExamineExaminePlanDto(deviceExaminePlanId);
        // æŸ¥è¯¢è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
        List<DeviceExaminePlanDetails> deviceExaminePlanDetailsList = deviceExaminePlanDetailsMapper.selectList(Wrappers.<DeviceExaminePlanDetails>lambdaQuery().eq(DeviceExaminePlanDetails::getPlanId, deviceExaminePlanId));
        // è®¾ç½®åºå·
        ArrayList<DeviceExaminePlanDetailsDto> deviceExaminePlanDetailsDtoList = new ArrayList<>();
        deviceExaminePlanDetailsList.forEach(deviceExamineRecordContrastDetail -> {
            DeviceExaminePlanDetailsDto deviceExaminePlanDetailsDto = new DeviceExaminePlanDetailsDto();
            BeanUtils.copyProperties(deviceExamineRecordContrastDetail, deviceExaminePlanDetailsDto);
            deviceExaminePlanDetailsDto.setIndex(deviceExaminePlanDetailsList.indexOf(deviceExamineRecordContrastDetail) + 1);
            deviceExaminePlanDetailsDtoList.add(deviceExaminePlanDetailsDto);
        });
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-plan-detail.docx");
        Configure configure = Configure.builder()
                .bind("deviceExaminePlanDetailsDtoList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceExaminePlan", deviceExaminePlanDto);
                    put("deviceExaminePlanDetailsDtoList", deviceExaminePlanDetailsDtoList);
                    //获取核查人的签名地址
                    put("writeUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getWriteUserId()));
                    //获取审查人的签名地址
                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getRatifyUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "设备核查计划", "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("导出失败");
        }
    }
    @Override
    public boolean updateDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto) {
        // å½“前登录用户
        Integer userId = SecurityUtils.getUserId().intValue();
        // æ–‡ä»¶åç§°
        examinePlanDto.setWriteUserId(userId);
        examinePlanDto.setWriteTime(LocalDateTime.now());
        baseMapper.updateById(examinePlanDto);
        deviceExaminePlanDetailsService.remove(Wrappers.<DeviceExaminePlanDetails>lambdaQuery()
                .eq(DeviceExaminePlanDetails::getPlanId, examinePlanDto.getPlanId()));
        // æ·»åŠ è¯¦æƒ…
        if (CollectionUtils.isNotEmpty(examinePlanDto.getExaminePlanDetailsList())) {
            for (DeviceExaminePlanDetails deviceExaminePlanDetails : examinePlanDto.getExaminePlanDetailsList()) {
                deviceExaminePlanDetails.setPlanId(examinePlanDto.getPlanId());
            }
            deviceExaminePlanDetailsService.saveBatch(examinePlanDto.getExaminePlanDetailsList());
        }
        return true;
    }
    @Override
    public DeviceExaminePlanDto getDeviceExaminePlan(Integer planId) {
        DeviceExaminePlan examinePlan = baseMapper.selectById(planId);
        DeviceExaminePlanDto deviceExaminePlanDto = new DeviceExaminePlanDto();
        BeanUtils.copyProperties(examinePlan, deviceExaminePlanDto);
        // æŸ¥è¯¢è¯¦æƒ…
        List<DeviceExaminePlanDetails> list = deviceExaminePlanDetailsService.list(Wrappers.<DeviceExaminePlanDetails>lambdaQuery()
                .eq(DeviceExaminePlanDetails::getPlanId, planId)
                .orderByAsc(DeviceExaminePlanDetails::getCheckTime));
        deviceExaminePlanDto.setExaminePlanDetailsList(list);
        return deviceExaminePlanDto;
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastDetailsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceExamineRecordContrastDetailsMapper;
import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
import com.ruoyi.device.service.DeviceExamineRecordContrastDetailsService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比详情表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:57
 */
@Service
public class DeviceExamineRecordContrastDetailsServiceImpl extends ServiceImpl<DeviceExamineRecordContrastDetailsMapper, DeviceExamineRecordContrastDetails> implements DeviceExamineRecordContrastDetailsService {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,193 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.dto.DeviceExamineRecordContrastDetailsDto;
import com.ruoyi.device.dto.DeviceExamineRecordContrastDto;
import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
import com.ruoyi.device.mapper.DeviceExamineRecordContrastMapper;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import com.ruoyi.device.pojo.DeviceExamineRecordContrast;
import com.ruoyi.device.pojo.DeviceExamineRecordContrastDetails;
import com.ruoyi.device.service.DeviceExamineRecordContrastDetailsService;
import com.ruoyi.device.service.DeviceExamineRecordContrastService;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.BeanUtils;
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.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•对比表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:43
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class DeviceExamineRecordContrastServiceImpl extends ServiceImpl<DeviceExamineRecordContrastMapper, DeviceExamineRecordContrast> implements DeviceExamineRecordContrastService {
    @Resource
    private DeviceExamineRecordContrastDetailsService deviceExamineRecordContrastDetailsService;
    @Resource
    private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
    @Resource
    private UserMapper userMapper;
    /**
     * æŸ¥è¯¢æ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    @Override
    public DeviceExamineRecordContrastDto getExamineRecordContrast(Integer planDetailsId) {
        DeviceExamineRecordContrastDto contrastDto = baseMapper.getExamineRecordContrast(planDetailsId);
        // åˆ¤æ–­æ˜¯å¦ä¸ºç©º
        if (contrastDto == null) {
            contrastDto = new DeviceExamineRecordContrastDto();
            // æŸ¥è¯¢è®¾å¤‡è¯¦æƒ…
            DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId);
            contrastDto.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId());
        } else {
            // æŸ¥è¯¢è¯¦æƒ…
            List<DeviceExamineRecordContrastDetails> list = deviceExamineRecordContrastDetailsService.list(Wrappers.<DeviceExamineRecordContrastDetails>lambdaQuery()
                    .eq(DeviceExamineRecordContrastDetails::getRecordContrastId, contrastDto.getRecordContrastId()));
            contrastDto.setRecordContrastDetailsList(list);
        }
        return contrastDto;
    }
    /**
     * æ–°å¢žæ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    @Override
    public boolean addExamineRecordContrast(DeviceExamineRecordContrastDto dto) {
        if (dto.getPlanDetailsId() == null) {
            throw new ErrorException("缺少计划详细信息id");
        }
        if (dto.getRecordContrastId() == null) {
            Integer userId = SecurityUtils.getUserId().intValue();
            User user = userMapper.selectById(userId);
            dto.setCheckerUserId(userId);
            dto.setCheckerUser(user.getName());
            // æŸ¥è¯¢å®¡æŸ¥äººid
            if (dto.getReviewUserId() != null) {
                User reviewUser = userMapper.selectById(dto.getReviewUserId());
                dto.setReviewUser(reviewUser.getName());
            }
        }
        this.saveOrUpdate(dto);
        // åˆ é™¤å…¨éƒ¨è¯¦æƒ…
        deviceExamineRecordContrastDetailsService.remove(Wrappers.<DeviceExamineRecordContrastDetails>lambdaQuery()
                .eq(DeviceExamineRecordContrastDetails::getRecordContrastId, dto.getRecordContrastId()));
        //添加详情
        if (CollectionUtils.isNotEmpty(dto.getRecordContrastDetailsList())) {
            for (DeviceExamineRecordContrastDetails details : dto.getRecordContrastDetailsList()) {
                details.setRecordContrastId(dto.getRecordContrastId());
            }
            deviceExamineRecordContrastDetailsService.saveBatch(dto.getRecordContrastDetailsList());
        }
        return false;
    }
    /**
     * å®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录
     * @return
     */
    @Override
    public boolean reviewExamineRecordContrast(DeviceExamineRecordContrastDto dto) {
        if (dto.getPlanDetailsId() == null) {
            throw new ErrorException("缺少计划详细信息id");
        }
        LambdaUpdateWrapper<DeviceExamineRecordContrast> wrapper = Wrappers.<DeviceExamineRecordContrast>lambdaUpdate()
                .eq(DeviceExamineRecordContrast::getPlanDetailsId, dto.getPlanDetailsId())
                .set(DeviceExamineRecordContrast::getReviewStatus, dto.getReviewStatus())
                .set(DeviceExamineRecordContrast::getReviewRemark, dto.getReviewRemark())
                .set(DeviceExamineRecordContrast::getReviewTime, LocalDateTime.now());
        // ä¸º0清除审核人
        if (dto.getReviewStatus().equals(0)) {
            wrapper.set(DeviceExamineRecordContrast::getReviewUserId, null)
                    .set(DeviceExamineRecordContrast::getReviewUser, null);
        }
        this.update(wrapper);
        return true;
    }
    /**
     * å¯¼å‡ºå®¡æ ¸æ ¸æŸ¥å¯¹æ¯”记录
     *
     * @param planDetailsId è¯¦æƒ…id
     * @param response
     */
    @Override
    public void exportReviewExamineRecordContrast(Integer planDetailsId, HttpServletResponse response) {
        // æŸ¥è¯¢å¯¹æ¯”记录
        DeviceExamineRecordContrastDto deviceExamineRecordContrast = baseMapper.selectExamineRecordContrastDto(planDetailsId);
        // æŸ¥è¯¢å¯¹æ¯”记录详情
        List<DeviceExamineRecordContrastDetails> deviceExamineRecordContrastDetailList = deviceExamineRecordContrastDetailsService.list(Wrappers.<DeviceExamineRecordContrastDetails>lambdaQuery().eq(DeviceExamineRecordContrastDetails::getRecordContrastId, deviceExamineRecordContrast.getRecordContrastId()));
        // è®¾ç½®åºå·
        ArrayList<DeviceExamineRecordContrastDetailsDto> deviceExamineRecordContrastDetailsDtoList = new ArrayList<>();
        deviceExamineRecordContrastDetailList.forEach(deviceExamineRecordContrastDetail -> {
            DeviceExamineRecordContrastDetailsDto deviceExamineRecordContrastDetailsDto = new DeviceExamineRecordContrastDetailsDto();
            BeanUtils.copyProperties(deviceExamineRecordContrastDetail, deviceExamineRecordContrastDetailsDto);
            deviceExamineRecordContrastDetailsDto.setIndex(deviceExamineRecordContrastDetailList.indexOf(deviceExamineRecordContrastDetail) + 1);
            deviceExamineRecordContrastDetailsDtoList.add(deviceExamineRecordContrastDetailsDto);
        });
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/review-examine-record-contrast.docx");
        Configure configure = Configure.builder()
                .bind("deviceExamineRecordContrastDetailsDtoList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceExamineRecordContrast", deviceExamineRecordContrast);
                    put("deviceExamineRecordContrastDetailsDtoList", deviceExamineRecordContrastDetailsDtoList);
                    //获取核查人的签名地址
                    put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getCheckerUserId()));
                    //获取审查人的签名地址
                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getReviewUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "审核核查对比记录", "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("导出失败");
        }
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordDetailServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceExamineRecordDetailMapper;
import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
import com.ruoyi.device.service.DeviceExamineRecordDetailService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•详情表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:15:11
 */
@Service
public class DeviceExamineRecordDetailServiceImpl extends ServiceImpl<DeviceExamineRecordDetailMapper, DeviceExamineRecordDetail> implements DeviceExamineRecordDetailService {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.dto.DeviceExamineRecordDto;
import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
import com.ruoyi.device.mapper.DeviceExamineRecordMapper;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
import com.ruoyi.device.pojo.DeviceExamineRecord;
import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
import com.ruoyi.device.service.DeviceExamineRecordDetailService;
import com.ruoyi.device.service.DeviceExamineRecordService;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.system.mapper.UserMapper;
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.util.HashMap;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡æ ¸æŸ¥è®°å½•表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-16 07:14:28
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class DeviceExamineRecordServiceImpl extends ServiceImpl<DeviceExamineRecordMapper, DeviceExamineRecord> implements DeviceExamineRecordService {
    @Resource
    private DeviceExamineRecordDetailService deviceExamineRecordDetailService;
    @Resource
    private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
    @Resource
    private DeviceMapper deviceMapper;
    @Resource
    private UserMapper userMapper;
    /**
     * æŸ¥è¯¢æ ¸æŸ¥è®°å½•
     *
     * @return
     */
    @Override
    public DeviceExamineRecordDto getExamineRecord(Integer planDetailsId) {
        DeviceExamineRecordDto deviceExamineRecord = baseMapper.getExamineRecord(planDetailsId);
        // åˆ¤æ–­æ˜¯å¦ä¸ºç©º
        if (deviceExamineRecord == null) {
            deviceExamineRecord = new DeviceExamineRecordDto();
            // æŸ¥è¯¢è®¾å¤‡è¯¦æƒ…
            DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId);
            Device device = deviceMapper.selectById(deviceExaminePlanDetails.getDeviceId());
            if (device != null) {
                deviceExamineRecord.setDeviceName(device.getDeviceName());
                deviceExamineRecord.setDeviceNumber(device.getManagementNumber());
                deviceExamineRecord.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId());
            }
        } else {
            // æŸ¥è¯¢è¯¦æƒ…
            List<DeviceExamineRecordDetail> list = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery()
                    .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecord.getRecordId()));
            deviceExamineRecord.setRecordDetailList(list);
        }
        return deviceExamineRecord;
    }
    /**
     * æ–°å¢žæ ¸æŸ¥è®°å½•
     *
     * @return
     */
    @Override
    public boolean addExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto) {
        if (deviceExamineRecordDto.getPlanDetailsId() == null) {
            throw new ErrorException("缺少计划详细信息id");
        }
        if (deviceExamineRecordDto.getRecordId() == null) {
            Integer userId = SecurityUtils.getUserId().intValue();
            User user = userMapper.selectById(SecurityUtils.getUserId());
            deviceExamineRecordDto.setCheckerUserId(userId);
            deviceExamineRecordDto.setCheckerUser(user.getName());
            // æŸ¥è¯¢å®¡æŸ¥äººid
            if (deviceExamineRecordDto.getReviewUserId() != null) {
                User reviewUser = userMapper.selectById(deviceExamineRecordDto.getReviewUserId());
                deviceExamineRecordDto.setReviewUser(reviewUser.getName());
            }
        }
        this.saveOrUpdate(deviceExamineRecordDto);
        // åˆ é™¤å…¨éƒ¨è¯¦æƒ…
        deviceExamineRecordDetailService.remove(Wrappers.<DeviceExamineRecordDetail>lambdaQuery()
                .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
        //添加详情
        if (CollectionUtils.isNotEmpty(deviceExamineRecordDto.getRecordDetailList())) {
            for (DeviceExamineRecordDetail deviceExamineRecordDetail : deviceExamineRecordDto.getRecordDetailList()) {
                deviceExamineRecordDetail.setRecordId(deviceExamineRecordDto.getRecordId());
            }
            deviceExamineRecordDetailService.saveBatch(deviceExamineRecordDto.getRecordDetailList());
        }
        return true;
    }
    /**
     * å¤æ ¸æ ¸æŸ¥è®°å½•
     *
     * @return
     */
    @Override
    public boolean reviewExamineRecord(DeviceExamineRecordDto dto) {
        if (dto.getPlanDetailsId() == null) {
            throw new ErrorException("缺少计划详细信息id");
        }
        LambdaUpdateWrapper<DeviceExamineRecord> wrapper = Wrappers.<DeviceExamineRecord>lambdaUpdate()
                .eq(DeviceExamineRecord::getPlanDetailsId, dto.getPlanDetailsId())
                .set(DeviceExamineRecord::getReviewStatus, dto.getReviewStatus())
                .set(DeviceExamineRecord::getReviewRemark, dto.getReviewRemark());
        // ä¸º0清除审核人
        if (dto.getReviewStatus().equals(0)) {
            wrapper.set(DeviceExamineRecord::getReviewUserId, null)
                    .set(DeviceExamineRecord::getReviewUser, null);
        }
        this.update(wrapper);
        return true;
    }
    /**
     * å¯¼å‡ºå¤æ ¸æ ¸æŸ¥è®°å½•
     *
     * @param planDetailsId å¤æ ¸æ ¸æŸ¥è®°å½•id
     * @return
     */
    @Override
    public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response) {
        // æŸ¥è¯¢å¤æ ¸æ ¸æŸ¥è®°å½•
        DeviceExamineRecordDto deviceExamineRecordDto = baseMapper.selectReviewExamineRecordDto(planDetailsId);
        // æŸ¥è¯¢å¤æ ¸æ ¸æŸ¥è®°å½•详情
        List<DeviceExamineRecordDetail> deviceExamineRecordDetailList = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery().eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-record.docx");
        Configure configure = Configure.builder()
                .bind("deviceExamineRecordDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceExamineRecordDto", deviceExamineRecordDto);
                    put("deviceExamineRecordDetailList", deviceExamineRecordDetailList);
                    //获取核查人的签名地址
                    put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getCheckerUserId()));
                    //获取审查人的签名地址
                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getReviewUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String deviceName = StringUtils.isNotEmpty(deviceExamineRecordDto.getDeviceName()) ? deviceExamineRecordDto.getDeviceName() : "";
            String fileName = URLEncoder.encode(
                    deviceName+ "核查记录", "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("导出失败");
        }
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,161 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.mapper.DeviceExternalApplyMapper;
import com.ruoyi.device.pojo.DeviceExternalApply;
import com.ruoyi.device.service.DeviceExternalApplyService;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.HashMap;
/**
 * <p>
 * åˆ©ç”¨å¤–部设备申请表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 10:28:43
 */
@Service
public class DeviceExternalApplyServiceImpl extends ServiceImpl<DeviceExternalApplyMapper, DeviceExternalApply> implements DeviceExternalApplyService {
    @Resource
    private UserMapper userMapper;
    /**
     * åˆ©ç”¨å¤–部设备申请列表
     * @param page
     * @param deviceExternalApply
     * @return
     */
    @Override
    public IPage<DeviceExternalApply> pageDeviceExternalApply(Page page, DeviceExternalApply deviceExternalApply) {
        return baseMapper.pageDeviceExternalApply(page, QueryWrappers.queryWrappers(deviceExternalApply));
    }
    /**
     * æ–°å¢žåˆ©ç”¨å¤–部设备申请
     * @param deviceExternalApply
     * @return
     */
    @Override
    public boolean addDeviceExternalApply(DeviceExternalApply deviceExternalApply) {
        DeviceExternalApply apply = new DeviceExternalApply();
        // å½“前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        switch (deviceExternalApply.getFlowType()) {
            case 0:
                BeanUtils.copyProperties(deviceExternalApply, apply);
                // ç”³è¯·
                apply.setUseReason(deviceExternalApply.getUseReason());
                apply.setApplicantUserId(user.getId());
                apply.setApplicantUser(user.getName());
                apply.setApplicantDate(LocalDate.now());
                // å¤„理人信息
                User departmentHeadUser = userMapper.selectById(deviceExternalApply.getDepartmentHeadUserId());
                apply.setApplicantUserId(departmentHeadUser.getId());
                apply.setApplicantUser(departmentHeadUser.getName());
                baseMapper.insert(apply);
                break;
            case 1:
                apply.setExternalApplyId(deviceExternalApply.getExternalApplyId());
                // ç”³è¯·éƒ¨é—¨è´Ÿè´£äººæ„è§
                apply.setDepartmentHeadOpinion(deviceExternalApply.getDepartmentHeadOpinion());
                apply.setDepartmentHeadDate(LocalDate.now());
                // è®¡é‡å®¤ä¿¡æ¯
                User meteringRoomUser = userMapper.selectById(deviceExternalApply.getMeteringRoomUserId());
                apply.setMeteringRoomUserId(meteringRoomUser.getId());
                apply.setMeteringRoomUser(meteringRoomUser.getName());
                baseMapper.updateById(apply);
                break;
            case 2:
                apply.setExternalApplyId(deviceExternalApply.getExternalApplyId());
                // è®¡é‡å®¤æ„è§
                apply.setMeteringRoomOpinion(deviceExternalApply.getMeteringRoomOpinion());
                apply.setMeteringRoomDate(LocalDate.now());
                // æ‰¹å‡†äººä¿¡æ¯
                User approverUser = userMapper.selectById(deviceExternalApply.getApproverUserId());
                apply.setApproverUserId(approverUser.getId());
                apply.setApproverUser(approverUser.getName());
                baseMapper.updateById(apply);
                break;
            case 3:
                apply.setExternalApplyId(deviceExternalApply.getExternalApplyId());
                //批准人
                apply.setApproverOpinion(deviceExternalApply.getApproverOpinion());
                apply.setApproverDate(LocalDate.now());
                apply.setIsFinish(1);
                baseMapper.updateById(apply);
                break;
        }
        return true;
    }
    /**
     * å¯¼å‡ºåˆ©ç”¨å¤–部设备申请
     *
     * @param externalApplyId å¤–部设备申请id
     * @param response
     */
    @Override
    public void exportDeviceExternalApply(Integer externalApplyId, HttpServletResponse response) {
        // æŸ¥è¯¢å¤–部设备申请
        DeviceExternalApply deviceAccidentReport = baseMapper.selectDeviceExternalById(externalApplyId);
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-external-apply.docx");
        Configure configure = Configure.builder()
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceAccidentReport", deviceAccidentReport);
                    // ç”³è¯·äººç­¾å
                    put("applicantUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getApplicantUserId()));
                    // éƒ¨é—¨è´Ÿè´£äººç­¾å
                    put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
                    // è®¡é‡å®¤äººç­¾å
                    put("meteringRoomUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getMeteringRoomUserId()));
                    // æ‰¹å‡†äººç­¾å
                    put("approverUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getApproverUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "利用外部设备申请", "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("导出失败");
        }
    }
}
cnas-device/src/main/resources/mapper/DeviceExaminePlanDetailsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
<?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.DeviceExaminePlanDetailsMapper">
    <!--设备核查计划详情列表-->
    <select id="pageDeviceExaminePlanDetail" resultType="com.ruoyi.device.pojo.DeviceExaminePlanDetails">
        select * from (
        select *
        from device_examine_plan_details
        order by check_time asc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
cnas-device/src/main/resources/mapper/DeviceExaminePlanMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
<?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.DeviceExaminePlanMapper">
    <!-- è®¾å¤‡æ ¸æŸ¥è®¡åˆ’列表 -->
    <select id="deviceExaminePlanDetailsMapper" resultType="com.ruoyi.device.dto.DeviceExaminePlanDto">
        select *
        from (select cqm.*,
        u1.name write_name,
        u3.name ratify_name
        from device_examine_plan cqm
        left join user u1 on u1.id = cqm.write_user_id
        left join user u3 on u3.id = cqm.ratify_user_id
        order by cqm.create_time desc) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectExamineExaminePlanDto" resultType="com.ruoyi.device.dto.DeviceExaminePlanDto">
        select
            cqm.*,
            date_format(cqm.write_time, '%Y-%m-%d') writeTimeStr,
            date_format(cqm.ratify_time, '%Y-%m-%d') ratifyTimeStr,
            date_format(cqm.create_time, '%Y') year,
            u1.name write_name,
            u3.name ratify_name
        from device_examine_plan cqm
        left join user u1 on u1.id = cqm.write_user_id
        left join user u3 on u3.id = cqm.ratify_user_id
        where cqm.plan_id = #{deviceExaminePlanId}
    </select>
</mapper>
cnas-device/src/main/resources/mapper/DeviceExamineRecordContrastMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
<?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.DeviceExamineRecordContrastMapper">
    <!-- æŸ¥è¯¢æ ¸æŸ¥å¯¹æ¯”记录 -->
    <select id="getExamineRecordContrast" resultType="com.ruoyi.device.dto.DeviceExamineRecordContrastDto">
        select derc.*,
               d1.device_name aDeviceName,
               d1.management_number aDeviceNumber,
               d2.device_name bDeviceName,
               d2.management_number bDeviceNumber,
               d3.device_name cDeviceName,
               d3.management_number cDeviceNumber
        from device_examine_record_contrast derc
                 left join device d1 on d1.id = derc.a_device_id
                 left join device d2 on d2.id = derc.a_device_id
                 left join device d3 on d3.id = derc.a_device_id
        where derc.plan_details_id = #{planDetailsId}
    </select>
    <select id="selectExamineRecordContrastDto"
            resultType="com.ruoyi.device.dto.DeviceExamineRecordContrastDto">
        select derc.*,
               d1.device_name aDeviceName,
               d1.management_number aDeviceNumber,
               d2.device_name bDeviceName,
               d2.management_number bDeviceNumber,
               d3.device_name cDeviceName,
               d3.management_number cDeviceNumber,
               DATE_FORMAT(derc.create_time, '%Y-%m-%d') checkerTimeStr,
               DATE_FORMAT(derc.review_time, '%Y-%m-%d') reviewTimeStr,
               d1.storage_point labName
        from device_examine_record_contrast derc
                 left join device d1 on d1.id = derc.a_device_id
                 left join device d2 on d2.id = derc.a_device_id
                 left join device d3 on d3.id = derc.a_device_id
        where derc.plan_details_id = #{planDetailsId}
    </select>
</mapper>
cnas-device/src/main/resources/mapper/DeviceExamineRecordMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<?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.DeviceExamineRecordMapper">
    <select id="getExamineRecord" resultType="com.ruoyi.device.dto.DeviceExamineRecordDto">
        select der.*,
               d.device_name,
               d.management_number deviceNumber
        from device_examine_record der
                 left join device_examine_plan_details depd on depd.plan_details_id = der.plan_details_id
                 left join device d on d.id = depd.device_id
        where der.plan_details_id = #{planDetailsId}
    </select>
    <select id="selectReviewExamineRecordDto" resultType="com.ruoyi.device.dto.DeviceExamineRecordDto">
        select der.*,
               Date_Format(der.update_time, '%Y-%m-%d') updateTimeStr,
               d.device_name,
               d.management_number deviceNumber
        from device_examine_record der
                 left join device_examine_plan_details depd on depd.plan_details_id = der.plan_details_id
                 left join device d on d.id = depd.device_id
        where der.plan_details_id = #{planDetailsId}
    </select>
</mapper>
cnas-device/src/main/resources/mapper/DeviceExternalApplyMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<?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.DeviceExternalApplyMapper">
    <!--利用外部设备申请列表-->
    <select id="pageDeviceExternalApply" resultType="com.ruoyi.device.pojo.DeviceExternalApply">
        select * from (
        select *
        from device_external_apply
        order by create_time desc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectDeviceExternalById" resultType="com.ruoyi.device.pojo.DeviceExternalApply">
        select
            dea.*
        from device_external_apply dea
        where dea.external_apply_id = #{externalApplyId}
    </select>
</mapper>