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.docxBinary files differ
cnas-process/src/main/resources/static/supervise-management-eview.docxBinary 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)