zhuo
2025-05-07 0877a9313cfcccbf59f86215cf75d922e4f786d7
添加监督质量评审功能
已修改3个文件
已添加7个文件
379 ■■■■■ 文件已修改
cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseManagementReviewController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseManagementReviewMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseManagementReview.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualitySuperviseManagementReviewService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseManagementReviewServiceImpl.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseManagementReviewMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/report-deal.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/static/supervise-management-eview.docx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/QualitySuperviseManagementReviewController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.ruoyi.process.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.process.pojo.QualitySupervise;
import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
import com.ruoyi.process.service.QualitySuperviseManagementReviewService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è´¨é‡ç›‘督管理评审输入材料 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author
 * @since 2025-05-07 10:46:11
 */
@RestController
@RequestMapping("/managementReview")
@Api(tags = "质量监督管理评审输入材料")
@AllArgsConstructor
public class QualitySuperviseManagementReviewController {
    private QualitySuperviseManagementReviewService qualitySuperviseManagementReviewService;
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @return
     */
    @ApiOperation(value = "分页查询")
    @GetMapping("/pageManagementReview")
    public Result<IPage<QualitySuperviseManagementReview>> pageManagementReview(QualitySuperviseManagementReview managementReview, Page page) {
        return Result.success(qualitySuperviseManagementReviewService.pageManagementReview(page, managementReview));
    }
    /**
     * æ–°å¢žæˆ–修改
     * @return
     */
    @ApiOperation(value = "新增或修改")
    @PostMapping("/saveOrUpdateManagementReview")
    public Result saveOrUpdateManagementReview(@RequestBody QualitySuperviseManagementReview managementReview) {
        return Result.success(qualitySuperviseManagementReviewService.saveOrUpdate(managementReview));
    }
    /**
     * åˆ é™¤
     * @return
     */
    @ApiOperation(value = "删除")
    @DeleteMapping("/deleteManagementReview")
    public Result deleteManagementReview(Integer managementReviewId) {
        return Result.success(qualitySuperviseManagementReviewService.removeById(managementReviewId));
    }
    /**
     * å¯¼å‡º
     * @return
     */
    @ApiOperation(value = "导出")
    @GetMapping("/exportManagementReview")
    public void exportManagementReview(Integer managementReviewId,HttpServletResponse response) {
        qualitySuperviseManagementReviewService.exportManagementReview(managementReviewId, response);
    }
}
cnas-process/src/main/java/com/ruoyi/process/mapper/QualitySuperviseManagementReviewMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è´¨é‡ç›‘督管理评审输入材料 Mapper æŽ¥å£
 * </p>
 *
 * @author
 * @since 2025-05-07 10:46:11
 */
public interface QualitySuperviseManagementReviewMapper extends BaseMapper<QualitySuperviseManagementReview> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @return
     */
    IPage<QualitySuperviseManagementReview> pageManagementReview(@Param("page") Page page, @Param("ew") QueryWrapper<QualitySuperviseManagementReview> ew);
}
cnas-process/src/main/java/com/ruoyi/process/pojo/QualitySuperviseManagementReview.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
 * <p>
 * è´¨é‡ç›‘督管理评审输入材料
 * </p>
 *
 * @author
 * @since 2025-05-07 10:46:11
 */
@Getter
@Setter
@TableName("cnas_quality_supervise_management_review")
@ApiModel(value = "QualitySuperviseManagementReview对象", description = "质量监督管理评审输入材料")
public class QualitySuperviseManagementReview implements Serializable {
    @TableId(value = "management_review_id", type = IdType.AUTO)
    private Integer managementReviewId;
    @ApiModelProperty("文件名称")
    private String fileName;
    @ApiModelProperty("计划内容")
    private String implementationContent;
    @ApiModelProperty("动态内容")
    private String dynamicContent;
    @ApiModelProperty("监督人")
    private String supervisor;
    @ApiModelProperty("质量评审日期")
    private LocalDate superviseDate;
    @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-process/src/main/java/com/ruoyi/process/service/QualitySuperviseManagementReviewService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.process.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è´¨é‡ç›‘督管理评审输入材料 æœåŠ¡ç±»
 * </p>
 *
 * @author
 * @since 2025-05-07 10:46:11
 */
public interface QualitySuperviseManagementReviewService extends IService<QualitySuperviseManagementReview> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param managementReview
     * @return
     */
    IPage<QualitySuperviseManagementReview> pageManagementReview(Page page, QualitySuperviseManagementReview managementReview);
    /**
     * å¯¼å‡º
     * @param managementReviewId
     * @param response
     */
    void exportManagementReview(Integer managementReviewId, HttpServletResponse response);
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseManagementReviewServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package com.ruoyi.process.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.process.dto.QualitySuperviseDetailsCorrectDto;
import com.ruoyi.process.pojo.QualitySuperviseDetailsCorrect;
import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
import com.ruoyi.process.mapper.QualitySuperviseManagementReviewMapper;
import com.ruoyi.process.service.QualitySuperviseManagementReviewService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
/**
 * <p>
 * è´¨é‡ç›‘督管理评审输入材料 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author
 * @since 2025-05-07 10:46:11
 */
@Service
public class QualitySuperviseManagementReviewServiceImpl extends ServiceImpl<QualitySuperviseManagementReviewMapper, QualitySuperviseManagementReview> implements QualitySuperviseManagementReviewService {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param managementReview
     * @return
     */
    @Override
    public IPage<QualitySuperviseManagementReview> pageManagementReview(Page page, QualitySuperviseManagementReview managementReview) {
        return baseMapper.pageManagementReview(page, QueryWrappers.queryWrappers(managementReview));
    }
    /**
     * å¯¼å‡º
     * @param managementReviewId
     * @param response
     */
    @Override
    public void exportManagementReview(Integer managementReviewId, HttpServletResponse response) {
        QualitySuperviseManagementReview managementReview = baseMapper.selectById(managementReviewId);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervise-management-eview.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("managementReview", managementReview);
                    put("superviseDateStr", managementReview.getSuperviseDate() == null ? null : managementReview.getSuperviseDate().format(formatter));
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    managementReview.getFileName(), "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-process/src/main/java/com/ruoyi/process/task/QualitySuperviseSchedule.java
@@ -1,23 +1,33 @@
package com.ruoyi.process.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.process.mapper.QualitySuperviseDetailsMapper;
import com.ruoyi.process.mapper.QualitySuperviseDetailsRecordMapper;
import com.ruoyi.process.mapper.QualitySuperviseManagementReviewMapper;
import com.ruoyi.process.pojo.QualitySuperviseDetails;
import com.ruoyi.process.pojo.QualitySuperviseDetailsRecord;
import com.ruoyi.process.pojo.QualitySuperviseManagementReview;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * åŸ¹è®­è®¡åˆ’使用提醒记录提醒
 * è´¨é‡ç›‘督填写提醒
 */
@Component
public class QualitySuperviseSchedule {
@@ -27,9 +37,13 @@
    private UserMapper userMapper;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Resource
    private QualitySuperviseManagementReviewMapper qualitySuperviseManagementReviewMapper;
    @Resource
    private QualitySuperviseDetailsRecordMapper qualitySuperviseDetailsRecordMapper;
    /**
     * æé†’填写设备使用记录
     * è´¨é‡ç›‘督填写提醒
     */
//    @Scheduled(cron = "0/5 * * * * *")
    @Scheduled(cron = "0 0 9 1 * *") // æ¯æœˆ1号执行
@@ -63,4 +77,66 @@
        }
    }
    /**
     * æ¯æœˆ28号自动生成质量监督总结
     */
//    @Scheduled(cron = "0/5 * * * * *")
    @Scheduled(cron = "0 0 9 28 * *") // æ¯æœˆ28号执行
    public void task2() {
        LocalDateTime now = LocalDateTime.now();
        // æŸ¥è¯¢å½“月监督计划
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
        String format = now.format(formatter);
        List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery()
                .eq(QualitySuperviseDetails::getSuperviseTime, format));
        // æ ¹æ®å®šæœŸç›‘督和动态监督区分
        Map<String, List<QualitySuperviseDetails>> superviseReasonMap = qualitySuperviseDetails.stream().collect(Collectors.groupingBy(QualitySuperviseDetails::getSuperviseReason));
        // èŽ·å–å½“æœˆæ—¥æœŸ
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyyå¹´MM月");
        String format2 = now.format(formatter2);
        // èŽ·å–è®¡åˆ’å†…å®¹
        String implementationSupervisee = "";
                List<QualitySuperviseDetails> implementationList = superviseReasonMap.get("定期监督");
        if (CollectionUtils.isNotEmpty(implementationList)) {
            // èŽ·å–å®šæœŸç›‘ç£äººå‘˜ä¿¡æ¯
            List<String> collect = implementationList.stream().map(QualitySuperviseDetails::getSupervisee).collect(Collectors.toList());
            implementationSupervisee = CollUtil.join(collect, ",");
        }
        String implementationContent = "工作中严格按照年度质量监督工作计划进行执行。{}对{}进行一次定期监督。在监督过程中,没有发现不符合的现象。检验员能熟练的按照规定的要求进行设备的操作,对于标准能熟记,所使用的设备均在校准周期内,能清楚完整的的记录原始数据并出具报告;在试验环境方面,能够严格的按照标准执行。";
        String formatImplementationContent = StrUtil.format(implementationContent, format2, implementationSupervisee);
        //获取动态内容
        String dynamicSupervisee = "";
        List<QualitySuperviseDetails> dynamicList = superviseReasonMap.get("动态监督");
        if (CollectionUtils.isNotEmpty(dynamicList)) {
            List<String> collect = dynamicList.stream()
                    .map(details ->  StrUtil.format("对{}动态监督1次在监督过程中", details.getSupervisee())).collect(Collectors.toList());
            dynamicSupervisee = CollUtil.join(collect, ";");
        }
        String dynamicContent = "在保证质量监督计划的同时,也坚持按照领导要求加强不定期监督动作。{}份{},没有发现不符合的现象。检验员能熟练的按照规定的要求进行设备的操作,对于标准能熟记,所使用的设备均在校准周期内,能清楚完整的的记录原始数据并出具报告;在试验环境方面,能够严格的按照标准执行。";
        String formatdynamicContent = StrUtil.format(dynamicContent, format2, dynamicSupervisee);
        // èŽ·å–ç›‘ç£å‘˜ä¿¡æ¯
        QualitySuperviseDetails superviseDetails = qualitySuperviseDetails.get(0);
        QualitySuperviseDetailsRecord detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetails.getSuperviseDetailsId())
                .last("limit 1"));
        String supervisor = detailsRecord.getSupervisor();
        // åˆ›å»ºè¯„审对象
        QualitySuperviseManagementReview managementReview = new QualitySuperviseManagementReview();
        String yearDate = now.format(DateTimeFormatter.ofPattern("yyyyå¹´"));
        String monthDate = now.format(DateTimeFormatter.ofPattern("MM月"));
        managementReview.setFileName(StrUtil.format("{}管理评审输入材料({})_{}", yearDate, supervisor, monthDate));
        managementReview.setImplementationContent(formatImplementationContent);
        managementReview.setDynamicContent(formatdynamicContent);
        managementReview.setSupervisor(supervisor);
        managementReview.setSuperviseDate(LocalDate.now());
        qualitySuperviseManagementReviewMapper.insert(managementReview);
    }
}
cnas-process/src/main/resources/mapper/QualitySuperviseManagementReviewMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.process.mapper.QualitySuperviseManagementReviewMapper">
    <select id="pageManagementReview" resultType="com.ruoyi.process.pojo.QualitySuperviseManagementReview">
        select *
        from cnas_quality_supervise_management_review
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
cnas-process/src/main/resources/static/report-deal.docx
Binary files differ
cnas-process/src/main/resources/static/supervise-management-eview.docx
Binary files differ
ruoyi-admin/src/main/java/com/ruoyi/CodeGenerator.java
@@ -20,9 +20,9 @@
    public static String database_username = "root";
    public static String database_password= "123456";
    public static String author = "";
    public static String model_name = "/cnas-device"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.ruoyi.device"; // åŒ…路径
    public static String tablePrefix = ""; // è®¾ç½®è¿‡æ»¤è¡¨å‰ç¼€
    public static String model_name = "/cnas-process"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.ruoyi.process"; // åŒ…路径
    public static String tablePrefix = "cnas_"; // è®¾ç½®è¿‡æ»¤è¡¨å‰ç¼€
    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
        FastAutoGenerator.create(database_url, database_username, database_password)