From 059b188fd49c5127b75a38408d12e26d2363fbab Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期二, 18 三月 2025 19:07:27 +0800
Subject: [PATCH] cans问题修复1.0

---
 cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml                             |    3 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java             |   19 +-
 cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java               |    2 
 cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java               |    2 
 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java |   20 ++
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewImport.java                  |   46 +++++
 cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java  |    3 
 cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java       |    5 
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewDto.java                     |    2 
 cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java             |    2 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java  |  124 +++++++++------
 cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewExcel.java                   |   56 +++++++
 cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java         |    2 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java    |  176 +++++++++++++--------
 14 files changed, 324 insertions(+), 138 deletions(-)

diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
index 7c598f3..e97a623 100644
--- a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
+++ b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRiskAssessmentResultsServiceImpl.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.PictureRenderData;
 import com.deepoove.poi.data.Pictures;
 import com.ruoyi.common.utils.DateImageUtil;
 import com.ruoyi.framework.exception.ErrorException;
@@ -21,6 +22,7 @@
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
@@ -86,10 +88,24 @@
             detailedDto.setIndex(index);
             index++;
         }
-        // 鑾峰彇璺緞
-        InputStream inputStream = this.getClass().getResourceAsStream("/static/risk-factor-identification-risk.docx");
+
         String finalExamineUrl = examineUrl;
         String finalRatifyUrl = ratifyUrl;
+        File file = new File(imgUrl + File.separator + writeUrl);
+        File examine = new File(imgUrl + File.separator + finalExamineUrl);
+        File ratify = new File(imgUrl + File.separator + finalRatifyUrl);
+        if(!file.exists()){
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+        if(!examine.exists()){
+            throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+        }
+        if(!ratify.exists()){
+            throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/risk-factor-identification-risk.docx");
         Configure configure = Configure.builder()
                 .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
                 .build();
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
index ec097a3..c5c29bc 100644
--- a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
@@ -27,6 +27,7 @@
 import com.ruoyi.personnel.service.PersonTrainingDetailedService;
 import com.ruoyi.personnel.service.PersonTrainingRecordService;
 import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -214,7 +215,7 @@
 
     @Override
     public void outOfFocusPreservation(PersonTrainingRecord personTrainingRecord) {
-        int userId = SecurityUtils.getUserId().intValue();
+        int userId = Integer.parseInt(SecurityUtils.getUserId().toString());
         // 鍩硅閫氳繃浜嗭紝鍩硅璇炬椂璁″叆鍒板綋澶╃殑杈呭姪宸ユ椂 (杈呭姪宸ユ椂 浠ュ強 鏍稿噯宸ユ椂閮芥坊鍔�)
         baseMapper.updateById(personTrainingRecord);
         PersonTrainingDetailed personTrainingDetailed = personTrainingDetailedMapper.selectById(personTrainingRecord.getCourseId());
@@ -224,71 +225,94 @@
             if(StringUtils.isEmpty(trainingDateTwo)) {
                 throw new ErrorException("娌℃湁璁剧疆鍩硅鏃ユ湡鏃犳硶娣诲姞杈呭姪宸ユ椂");
             }
+            AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay = auxiliaryWorkingHoursDayService.selectAuxiliaryWorkingHoursByNumber("401");
             // 鏄惁浠ュ強娣诲姞杩囦簡
             List<AuxiliaryWorkingHoursDay> auxiliaryWorkingHoursDays = auxiliaryWorkingHoursDayMapper.selectList(new LambdaQueryWrapper<AuxiliaryWorkingHoursDay>()
                     .eq(AuxiliaryWorkingHoursDay::getNameUser, personTrainingRecord.getUserId())
-                    .eq(AuxiliaryWorkingHoursDay::getAuxiliaryProject, personTrainingDetailed.getTrainingContent())
-                    .eq(AuxiliaryWorkingHoursDay::getCreateUser, userId)
+                    .eq(AuxiliaryWorkingHoursDay::getAuxiliaryProject,auxiliaryWorkingHoursDay.getAuxiliaryProject())
                     .eq(AuxiliaryWorkingHoursDay::getDateTime, trainingDateTwo + " 00:00:00"));
             // 濡傛灉鏈夋暟鎹� 鍚堟牸灏变笉鍋氬鐞�   涓嶅悎鏍煎氨鍒犻櫎
             if(CollectionUtils.isNotEmpty(auxiliaryWorkingHoursDays)) {
                 if(personTrainingRecord.getExaminationResults().equals("涓嶅悎鏍�")) {
                     auxiliaryWorkingHoursDayMapper.delete(new LambdaQueryWrapper<AuxiliaryWorkingHoursDay>()
                             .eq(AuxiliaryWorkingHoursDay::getNameUser, personTrainingRecord.getUserId())
-                            .eq(AuxiliaryWorkingHoursDay::getAuxiliaryProject, personTrainingDetailed.getTrainingContent())
-                            .eq(AuxiliaryWorkingHoursDay::getCreateUser, userId)
+                            .eq(AuxiliaryWorkingHoursDay::getAuxiliaryProject, auxiliaryWorkingHoursDay.getAuxiliaryProject())
                             .eq(AuxiliaryWorkingHoursDay::getDateTime, trainingDateTwo + " 00:00:00"));
                 }
             }
+            // 濡傛灉鏄娴嬪姙鐨勪汉灏变笉鐢ㄥ姞
+            User user = userMapper.selectById(personTrainingRecord.getUserId());
+            if(user.getDepartLimsId().contains("22")) {
+                return;
+            }
+            // 涓�鑺傝45鍒嗛挓 宸ユ椂60鍒嗛挓
+            BigDecimal minute = BigDecimal.valueOf(classHour).multiply(new BigDecimal("45")); // 鍏蜂綋鍒嗛挓
+            BigDecimal divide = minute.divide(new BigDecimal("60"),4, RoundingMode.HALF_UP); // 宸ユ椂
+            // 娣诲姞鏁版嵁
+            AuxiliaryWorkingHoursDay a = new AuxiliaryWorkingHoursDay();
+            a.setNameUser(personTrainingRecord.getUserId()); // 濮撳悕id
+            // 椤圭洰鍚嶇О
+            a.setRemarks(personTrainingDetailed.getTrainingContent()); //  杈呭姪璇存槑
+            a.setNumber("401"); // 缂栧彿
+
+            a.setAuxiliaryProject(auxiliaryWorkingHoursDay.getAuxiliaryProject()); // 杈呭姪椤圭洰鍚嶇О
+            a.setNonproductiveTime(Double.parseDouble(divide.toString())); // 杈呭姪宸ユ椂
+            a.setApprovedWorkingHour(auxiliaryWorkingHoursDay.getApprovedWorkingHour()); // 鏍稿噯宸ユ椂
+            a.setAmount(Double.parseDouble(divide.toString())); // 鏁伴噺
+            String year = trainingDateTwo.split("-")[0];
+            a.setYear(year); // 骞�
+            a.setCreateTime(LocalDateTime.now());
+            a.setUpdateTime(LocalDateTime.now());
+            a.setCreateUser(userId); // 鍒涘缓浜篿d
+            a.setUpdateUser(userId); // 淇敼浜篿d
+            a.setState("宸叉彁浜�"); // 鐘舵��
+            a.setDateTime(trainingDateTwo + " 00:00:00"); // 鏃ユ湡
+            // 鑾峰彇褰撳墠鏃ユ湡
+            LocalDate today = LocalDate.now();
+            // 鑾峰彇褰撳墠鏃ユ湡鐨勫懆娆★紙涓�骞翠腑鐨勭鍑犲懆锛�
+            TemporalField weekOfYear = WeekFields.of(Locale.getDefault()).weekOfYear();
+            int weekNumber = today.get(weekOfYear);
+            // 鑾峰彇褰撳墠鏃ユ湡鐨勬槦鏈燂紙涓�鍛ㄤ腑鐨勭鍑犲ぉ锛�
+            DayOfWeek dayOfWeek = today.getDayOfWeek();
+            int dayOfWeekNumber = dayOfWeek.getValue();
+            LocalDate now = LocalDate.now();
+            LocalTime parse = LocalTime.parse("00:00:00");
+            LocalDateTime of = LocalDateTime.of(now, parse);
+            PerformanceShift performanceShift = shiftMapper.selectOne(new LambdaQueryWrapper<PerformanceShift>().eq(PerformanceShift::getWorkTime, of)
+                    .eq(PerformanceShift::getUserId, personTrainingRecord.getUserId()));
+            if(Objects.nonNull(performanceShift)) {
+                a.setShift(performanceShift.getShift()); // 鐝
+            }
+            a.setWeek(weekNumber+""); // 鍛ㄦ
+            a.setWeekDay(dayOfWeekNumber == 7 ? 0+"" : dayOfWeekNumber+""); // 鏄熸湡
             // 鏄惁閫氳繃
             if(personTrainingRecord.getExaminationResults().equals("鍚堟牸") && CollectionUtils.isEmpty(auxiliaryWorkingHoursDays)) {
-                // 濡傛灉鏄娴嬪姙鐨勪汉灏变笉鐢ㄥ姞
-                User user = userMapper.selectById(personTrainingRecord.getUserId());
-                if(user.getDepartLimsId().contains("22")) {
-                    return;
-                }
-                // 涓�鑺傝45鍒嗛挓 宸ユ椂60鍒嗛挓
-                BigDecimal minute = BigDecimal.valueOf(classHour).multiply(new BigDecimal("45")); // 鍏蜂綋鍒嗛挓
-                BigDecimal divide = minute.divide(new BigDecimal("60"),4, RoundingMode.HALF_UP); // 宸ユ椂
-                // 娣诲姞鏁版嵁
-                AuxiliaryWorkingHoursDay a = new AuxiliaryWorkingHoursDay();
-                a.setNameUser(personTrainingRecord.getUserId()); // 濮撳悕id
-                // 椤圭洰鍚嶇О
-                a.setRemarks(personTrainingDetailed.getTrainingContent()); //  杈呭姪璇存槑
-                a.setNumber("401"); // 缂栧彿
-                AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay = auxiliaryWorkingHoursDayService.selectAuxiliaryWorkingHoursByNumber("401");
-                a.setAuxiliaryProject(auxiliaryWorkingHoursDay.getAuxiliaryProject()); // 杈呭姪椤圭洰鍚嶇О
-                a.setNonproductiveTime(Double.parseDouble(divide.toString())); // 杈呭姪宸ユ椂
-                a.setApprovedWorkingHour(auxiliaryWorkingHoursDay.getApprovedWorkingHour()); // 鏍稿噯宸ユ椂
-                a.setAmount(Double.parseDouble(divide.toString())); // 鏁伴噺
-                String year = trainingDateTwo.split("-")[0];
-                a.setYear(year); // 骞�
-                a.setCreateTime(LocalDateTime.now());
-                a.setUpdateTime(LocalDateTime.now());
-                a.setCreateUser(userId); // 鍒涘缓浜篿d
-                a.setUpdateUser(userId); // 淇敼浜篿d
-                a.setState("宸叉彁浜�"); // 鐘舵��
-                a.setDateTime(trainingDateTwo + " 00:00:00"); // 鏃ユ湡
-                // 鑾峰彇褰撳墠鏃ユ湡
-                LocalDate today = LocalDate.now();
-                // 鑾峰彇褰撳墠鏃ユ湡鐨勫懆娆★紙涓�骞翠腑鐨勭鍑犲懆锛�
-                TemporalField weekOfYear = WeekFields.of(Locale.getDefault()).weekOfYear();
-                int weekNumber = today.get(weekOfYear);
-                // 鑾峰彇褰撳墠鏃ユ湡鐨勬槦鏈燂紙涓�鍛ㄤ腑鐨勭鍑犲ぉ锛�
-                DayOfWeek dayOfWeek = today.getDayOfWeek();
-                int dayOfWeekNumber = dayOfWeek.getValue();
-                LocalDate now = LocalDate.now();
-                LocalTime parse = LocalTime.parse("00:00:00");
-                LocalDateTime of = LocalDateTime.of(now, parse);
-                PerformanceShift performanceShift = shiftMapper.selectOne(new LambdaQueryWrapper<PerformanceShift>().eq(PerformanceShift::getWorkTime, of)
-                        .eq(PerformanceShift::getUserId, personTrainingRecord.getUserId()));
-                if(Objects.nonNull(performanceShift)) {
-                    a.setShift(performanceShift.getShift()); // 鐝
-                }
-                a.setWeek(weekNumber+""); // 鍛ㄦ
-                a.setWeekDay(dayOfWeekNumber == 7 ? 0+"" : dayOfWeekNumber+""); // 鏄熸湡
                 auxiliaryWorkingHoursDayMapper.insert(a);
             }
+            // 鍩硅璁插笀涔熻鍔犱笂鐩稿簲鐨勫伐鏃�
+            String trainingLecturerId = personTrainingDetailed.getTrainingLecturerId();
+            String[] split = trainingLecturerId.split(",");
+            for (String name : split) {
+                if(StringUtils.isNotEmpty(name)) {
+                    User user1 = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getName, name)).get(0);
+                    if(user1.getDepartLimsId().contains("22")) {
+                        continue;
+                    }
+                    // 娣诲姞杩囦簡灏变笉鍐嶆坊鍔�
+                    List<AuxiliaryWorkingHoursDay> list = auxiliaryWorkingHoursDayMapper.selectList(new LambdaQueryWrapper<AuxiliaryWorkingHoursDay>()
+                            .eq(AuxiliaryWorkingHoursDay::getNameUser, user1.getId())
+                            .eq(AuxiliaryWorkingHoursDay::getAuxiliaryProject, auxiliaryWorkingHoursDay.getAuxiliaryProject())
+                            .eq(AuxiliaryWorkingHoursDay::getDateTime, trainingDateTwo + " 00:00:00"));
+                    if(CollectionUtils.isNotEmpty(list)) {
+                        continue;
+                    }
+                    AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay1 = new AuxiliaryWorkingHoursDay(); // 鐢ㄤ簬娣诲姞鍩硅璁插笀
+                    BeanUtils.copyProperties(a,auxiliaryWorkingHoursDay1);
+                    auxiliaryWorkingHoursDay1.setNameUser(user1.getId());
+                    auxiliaryWorkingHoursDay1.setId(null);
+                    auxiliaryWorkingHoursDayMapper.insert(auxiliaryWorkingHoursDay1);
+                }
+            }
         }
 
     }
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
index 84ac8ca..47222a7 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
@@ -84,7 +84,8 @@
     @ApiOperation(value = "瀵煎叆鏍囧噯鏌ユ柊")
     @PostMapping("/importMethodSearchNew")
     public Result importMethodSearchNew(MultipartFile file) {
-        return Result.success(processMethodSearchNewService.importMethodSearchNew(file));
+        processMethodSearchNewService.importMethodSearchNew(file);
+        return Result.success();
     }
 
     /**
@@ -93,7 +94,7 @@
      * @return
      */
     @ApiOperation(value = "鍒犻櫎鏍囧噯鏌ユ柊")
-    @DeleteMapping("/deleteById")
+    @GetMapping("/deleteById")
     public Result deleteByMethodSearchNewId(@RequestParam("methodSearchNewId")Integer methodSearchNewId) {
         processMethodSearchNewService.removeById(methodSearchNewId);
         return Result.success("鍒犻櫎鎴愬姛");
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java
index a606db5..51dc16c 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/InconsistentDistributionProportionDto.java
@@ -40,6 +40,6 @@
     private Integer total;
 
     @ApiModelProperty("鍗犳瘮")
-    private BigDecimal proportion;
+    private String proportion;
 
 }
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewDto.java
index 20bd254..e44a2be 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewDto.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewDto.java
@@ -59,4 +59,6 @@
     @ExcelProperty(value = {"搴忓彿", "搴忓彿"}, index = 0)
     @ApiModelProperty("搴忓彿")
     private Integer index;
+
+    private Boolean isThisYear;
 }
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewExcel.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewExcel.java
new file mode 100644
index 0000000..766e711
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewExcel.java
@@ -0,0 +1,56 @@
+package com.ruoyi.process.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ProcessMethodSearchNewExcel {
+    @ExcelProperty(value = {"鏍囧噯鍚嶇О", "鏍囧噯鍚嶇О"}, index = 1)
+    private String methodName;
+
+    @ExcelProperty(value = {"鏍囧噯鍙�", "鏍囧噯鍙�"}, index = 2)
+    @ApiModelProperty("鏍囧噯鍙�")
+    private String standardNo;
+
+    @ExcelProperty(value = {"鏂囦欢缂栧彿", "鏂囦欢缂栧彿"}, index = 3)
+    @ApiModelProperty("鏂囦欢缂栧彿")
+    private String fileNo;
+
+    @ExcelProperty(value = "鏄惁鏄洿鏂版爣鍑�", index = 4)
+    @ApiModelProperty("鏄惁鏈夋洿鏂版爣鍑�")
+    private String isNewStandardString;
+
+    @ExcelProperty(value = {"鏂版爣鍑嗗悕绉�", "鏂版爣鍑嗗悕绉�"}, index = 5)
+    @ApiModelProperty("鏂版爣鍑嗗悕绉�")
+    private String newMethodName;
+
+    @ExcelProperty(value = {"鏂版爣鍑嗗彿", "鏂版爣鍑嗗彿"}, index =6)
+    @ApiModelProperty("鏂版爣鍑嗗彿")
+    private String newStandardNo;
+
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍鏉ユ簮", "鏍囧噯缃�"}, index = 7)
+    @ApiModelProperty("鏍囧噯缃�")
+    private String standardNet;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍鏉ユ簮", "濮旀墭鎯呮姤鎵�"}, index = 8)
+    @ApiModelProperty("濮旀墭鎯呮姤鎵�")
+    private String informationOffices;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍鏉ユ簮", "鏍囧噯涔﹀簵"}, index = 9)
+    @ApiModelProperty("鏍囧噯涔﹀簵")
+    private String standardBookstore;
+
+    @ExcelProperty(value = {"鏌ユ柊璁板綍鏉ユ簮", "鍏朵粬"}, index = 10)
+    @ApiModelProperty("鍏朵粬")
+    private String other;
+
+    @ExcelProperty(value = {"澶囨敞", "澶囨敞"}, index = 11)
+    @ApiModelProperty("澶囨敞")
+    private String remarkString;
+
+    @ExcelProperty(value = {"搴忓彿", "搴忓彿"}, index = 0)
+    @ApiModelProperty("搴忓彿")
+    private String index;
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewImport.java b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewImport.java
new file mode 100644
index 0000000..3679079
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/ProcessMethodSearchNewImport.java
@@ -0,0 +1,46 @@
+package com.ruoyi.process.dto;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.process.service.impl.ProcessMethodSearchNewServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+public class ProcessMethodSearchNewImport extends AnalysisEventListener<ProcessMethodSearchNewExcel> {
+
+    private static final int BATCH_COUNT = 500;
+
+    private static List<ProcessMethodSearchNewExcel> list = new ArrayList<>();
+
+    private ProcessMethodSearchNewServiceImpl service;
+
+    public ProcessMethodSearchNewImport(ProcessMethodSearchNewServiceImpl service) {
+        this.service = service;
+    }
+
+    @Override
+    public void invoke(ProcessMethodSearchNewExcel processMethodSearchNewExcel, AnalysisContext analysisContext) {
+        log.info("瑙f瀽鍒颁竴鏉℃暟鎹�:{}", processMethodSearchNewExcel);
+        if(list.size() > BATCH_COUNT) {
+            save(list);
+            list.clear();
+        } else {
+            list.add(processMethodSearchNewExcel);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒:{}鏉℃暟鎹�", list.size());
+        save(list);
+    }
+
+    public void  save(List<ProcessMethodSearchNewExcel> list) {
+        log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", list.size());
+        service.save(list);
+        log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒");
+    }
+}
diff --git a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java
index 33d00cd..77a5935 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java
@@ -28,7 +28,7 @@
      * @param endDate
      * @return
      */
-    IPage<ProcessMethodSearchNew> pageMethodSearchNew(@Param("page") Page page, @Param("ew") QueryWrapper<ProcessMethodSearchNewDto> processMethodSearchNewDtoQueryWrapper, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
+    IPage<ProcessMethodSearchNew> pageMethodSearchNew(@Param("page") Page page, @Param("ew") QueryWrapper<ProcessMethodSearchNew> processMethodSearchNewDtoQueryWrapper, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
 
     /**
      * 鏌ヨ鏍囧噯鏌ヨ
diff --git a/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
index 40bb846..22048b4 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/pojo/InconsistentDistributionDetail.java
@@ -70,5 +70,5 @@
 
     @ApiModelProperty("鍗犳瘮")
     @TableField(select = false,exist = false)
-    private BigDecimal proportion;
+    private String proportion;
 }
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
index e940d5b..919cb6f 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
@@ -44,6 +44,6 @@
      * @param file
      * @return
      */
-    boolean importMethodSearchNew(MultipartFile file);
+    void importMethodSearchNew(MultipartFile file);
 }
 
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
index 5be07ef..fd2f592 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
@@ -153,7 +153,7 @@
                     + (distributionDetail.getTesting() != null ? distributionDetail.getTesting() : 0);
             distributionDetail.setTotal(total);
             // 鍗犳瘮
-            distributionDetail.setProportion(calculatePercentage(total, sum));
+            distributionDetail.setProportion(calculatePercentage(total, sum)+"%");
         }
         // 娣诲姞鏈�鍚庝竴琛屽崰姣斿璞�
         InconsistentDistributionProportionDto proportionDto = new InconsistentDistributionProportionDto();
@@ -199,6 +199,7 @@
     public void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response) {
         InconsistentDistributionDto inconsistentDistributionOne = getInconsistentDistributionOne(distributionId);
 
+
         // 鑾峰彇璺緞
         InputStream inputStream = this.getClass().getResourceAsStream("/static/inconsistent-distribution.docx");
         Configure configure = Configure.builder()
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
index 591f9c0..ad70719 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
@@ -1,23 +1,26 @@
 package com.ruoyi.process.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
-import com.alibaba.excel.context.AnalysisContext;
-import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.util.FileUtils;
 import com.alibaba.excel.util.ListUtils;
 import com.alibaba.excel.write.metadata.WriteSheet;
 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.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.process.dto.ProcessMethodSearchNewDto;
+import com.ruoyi.process.dto.ProcessMethodSearchNewExcel;
+import com.ruoyi.process.dto.ProcessMethodSearchNewImport;
 import com.ruoyi.process.mapper.ProcessMethodSearchNewMapper;
 import com.ruoyi.process.pojo.ProcessMethodSearchNew;
 import com.ruoyi.process.service.ProcessMethodSearchNewService;
 import com.ruoyi.process.utils.UserUtils;
+import org.apache.poi.hslf.util.LocaleDateFormat;
 import org.springframework.beans.BeanUtils;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
@@ -30,10 +33,13 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -45,6 +51,7 @@
 @Service
 public class ProcessMethodSearchNewServiceImpl extends ServiceImpl<ProcessMethodSearchNewMapper, ProcessMethodSearchNew> implements ProcessMethodSearchNewService {
 
+    private final Set<String> importedFileHashes = ConcurrentHashMap.newKeySet();
     /**
      * 鏂板鏍囧噯鏌ユ柊
      *
@@ -87,7 +94,16 @@
         String endDate = processMethodSearchNew.getEndDate();
         processMethodSearchNew.setBeginDate(null);
         processMethodSearchNew.setEndDate(null);
-        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
+        // 鍘嗗彶璁板綍鐨勮瘽 灏辫鍔犳椂闂�
+        if(!processMethodSearchNew.getIsThisYear()) {
+            LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now().getYear(), 1, 1, 0, 0, 0);
+            endDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(localDateTime);
+        }
+        ProcessMethodSearchNew processMethodSearchNew1 = new ProcessMethodSearchNew();
+        BeanUtils.copyProperties(processMethodSearchNew, processMethodSearchNew1);
+
+
+        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew1), beginDate, endDate);
     }
 
     /**
@@ -139,20 +155,23 @@
                     methodSearchNew.setRemarkString("浣滃簾");
                 }
             }
-
-            switch (methodSearchNew.getSearchNewSource()) {
-                case 0:
-                    methodSearchNew.setStandardNet("鈭�");
-                    break;
-                case 1:
-                    methodSearchNew.setInformationOffices("鈭�");
-                    break;
-                case 2:
-                    methodSearchNew.setStandardBookstore("鈭�");
-                    break;
-                case 3:
-                    methodSearchNew.setOther("鈭�");
-                    break;
+            if(Objects.nonNull(methodSearchNew.getSearchNewSource())) {
+                switch (methodSearchNew.getSearchNewSource()) {
+                    case 0:
+                        methodSearchNew.setStandardNet("鈭�");
+                        break;
+                    case 1:
+                        methodSearchNew.setInformationOffices("鈭�");
+                        break;
+                    case 2:
+                        methodSearchNew.setStandardBookstore("鈭�");
+                        break;
+                    case 3:
+                        methodSearchNew.setOther("鈭�");
+                        break;
+                    default:
+                        break;
+                }
             }
             methodSearchNew.setIndex(index);
             index++;
@@ -236,63 +255,78 @@
      * @return
      */
     @Override
-    public boolean importMethodSearchNew(MultipartFile file) {
-
-        List<ProcessMethodSearchNewDto> searchNewDtoList = new ArrayList<>();
-
+    public void importMethodSearchNew(MultipartFile file) {
         try {
-            // excel瑙f瀽
-            EasyExcel.read(file.getInputStream(), ProcessMethodSearchNewDto.class, new AnalysisEventListener<ProcessMethodSearchNewDto>() {
-                @Override
-                public void invoke(ProcessMethodSearchNewDto searchNewDto, AnalysisContext analysisContext) {
-                    searchNewDtoList.add(searchNewDto);
-                }
+            // 1. 璁$畻鏂囦欢鐨� MD5 鍝堝笇鍊�
+            String fileHash = calculateFileHash(file);
 
-                @Override
-                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+            // 2. 妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鏂囦欢
+            if (!importedFileHashes.add(fileHash)) {
+                return; // 宸插瓨鍦紝鐩存帴璺宠繃
+            }
+            // 3. 璇诲彇骞跺鐞嗘枃浠�
+            try (InputStream inputStream = file.getInputStream()) {
+                EasyExcel.read(inputStream, ProcessMethodSearchNewExcel.class, new ProcessMethodSearchNewImport(this))
+                        .sheet()
+                        .doRead();
+            }
 
-                }
-            }).sheet().doRead();
-            // 鏍煎紡鍖栨煡鏂板璞�
-            List<ProcessMethodSearchNew> collect = searchNewDtoList.stream().map(searchNewDto -> {
-                ProcessMethodSearchNew searchNew = new ProcessMethodSearchNew();
-                BeanUtils.copyProperties(searchNewDto, searchNew);
-                // 鏄惁鏄洿鏂�
-                if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
-                    if (searchNewDto.getIsNewStandardString().equals("鏄�")) {
-                        searchNew.setIsNewStandard(1);
-                    } else {
-                        searchNew.setIsNewStandard(0);
-                    }
-                }
-                // 鏌ユ柊璁板綍
-                if (StringUtils.isNotBlank(searchNewDto.getStandardNet())) {
-                    searchNew.setSearchNewSource(0);
-                } else if (StringUtils.isNotBlank(searchNewDto.getInformationOffices())) {
-                    searchNew.setSearchNewSource(1);
-                } else if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
-                    searchNew.setSearchNewSource(2);
-                } else if (StringUtils.isNotBlank(searchNewDto.getOther())) {
-                    searchNew.setSearchNewSource(3);
-                }
-
-                // 澶囨敞
-                if (StringUtils.isNotBlank(searchNewDto.getRemarkString())) {
-                    if (searchNewDto.getRemarkString().equals("鏇挎崲")) {
-                        searchNew.setRemark(1);
-                    } else if (searchNewDto.getRemarkString().equals("浣滃簾")) {
-                        searchNew.setRemark(0);
-                    }
-                }
-
-                return searchNew;
-            }).collect(Collectors.toList());
-            this.saveBatch(collect);
-
-        } catch (IOException e) {
+            // 4. 璁板綍鏂囦欢鍝堝笇鍊硷紙鏍囪涓哄凡瀵煎叆锛�
+            importedFileHashes.add(fileHash);
+        } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        return true;
+    }
+
+    public void save (List<ProcessMethodSearchNewExcel> list) {
+        if(CollectionUtils.isNotEmpty(list)) {
+            for (ProcessMethodSearchNewExcel a : list) {
+                if(NumberUtil.isNumber(a.getIndex())) {
+                    ProcessMethodSearchNew processMethodSearchNew = new ProcessMethodSearchNew();
+                    BeanUtils.copyProperties(a, processMethodSearchNew);
+                    processMethodSearchNew.setIsNewStandard(a.getIsNewStandardString() == "鏄�" ? 1 : 0); // 鏄惁鏄柊鏍囧噯
+                    // 鏌ユ柊璁板綍 0 鏍囧噯缃�  1 濮旀墭鎯呮姤 2 鏍囧噯鏁�  3 鍏朵粬
+                    if(StringUtils.isNotEmpty(a.getStandardNet())) {
+                        processMethodSearchNew.setSearchNewSource(0);
+                    } else if(StringUtils.isNotEmpty(a.getInformationOffices())) {
+                        processMethodSearchNew.setSearchNewSource(1);
+                    } else if(StringUtils.isNotEmpty(a.getStandardBookstore())) {
+                        processMethodSearchNew.setSearchNewSource(2);
+                    } else if(StringUtils.isNotEmpty(a.getOther())) {
+                        processMethodSearchNew.setSearchNewSource(3);
+                    }
+                    // 缂栧埗浜�
+                    baseMapper.insert(processMethodSearchNew);
+                }
+            }
+        }
+    }
+
+    // 璁$畻鏂囦欢鐨� MD5 鍝堝笇鍊�
+    private String calculateFileHash(MultipartFile file) throws Exception {
+        try (InputStream is = file.getInputStream()) {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] buffer = new byte[8192];
+            int bytesRead;
+            while ((bytesRead = is.read(buffer)) != -1) {
+                md.update(buffer, 0, bytesRead);
+            }
+            byte[] hashBytes = md.digest();
+            // 灏嗗瓧鑺傛暟缁勮浆鎹负鍗佸叚杩涘埗瀛楃涓�
+            return bytesToHex(hashBytes);
+        }
+    }
+
+    private static String bytesToHex(byte[] bytes) {
+        StringBuilder hexString = new StringBuilder();
+        for (byte b : bytes) {
+            String hex = Integer.toHexString(0xff & b);
+            if (hex.length() == 1) {
+                hexString.append('0');
+            }
+            hexString.append(hex);
+        }
+        return hexString.toString();
     }
 }
 
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
index 0f78c44..c4e3f70 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessReportServiceImpl.java
@@ -28,10 +28,7 @@
 import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -77,9 +74,11 @@
         List<ProcessReport> processReports = processReportMapper.getIds(ids);
         for (ProcessReport processReport : processReports) {
             List<String> name = new ArrayList<>();
-            for (String s : processReport.getSignatory().split(",")) {
-                User user = userMapper.selectById(Integer.parseInt(s));
-                name.add(user.getName());
+            if(StringUtils.isNotEmpty(processReport.getSignatory())) {
+                for (String s : processReport.getSignatory().split(",")) {
+                    User user = userMapper.selectById(Integer.parseInt(s));
+                    name.add(user.getName());
+                }
             }
             String signatoryName = name.stream().collect(Collectors.joining(","));
             processReport.setSignatoryName(signatoryName);
@@ -293,7 +292,11 @@
                             }
                             else if (j == 6) {
                                 try{
-                                    textRenderData.setText(processReports.get((i-1) + (index1 - 1) * 20).getSendTime()+"");
+                                    String text = "";
+                                    if(Objects.nonNull(processReports.get((i-1) + (index1 - 1) * 20).getSendTime())) {
+                                        text = processReports.get((i-1) + (index1 - 1) * 20).getSendTime() + "";
+                                    }
+                                    textRenderData.setText(text);
                                 } catch (Exception e) {
                                     textRenderData.setText("");
                                 }
diff --git a/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml
index 3727524..4cfedee 100644
--- a/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml
+++ b/cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml
@@ -11,6 +11,9 @@
             <if test="beginDate != null and beginDate != '' and endDate != null and endDate != ''">
                 and create_time between #{beginDate} and #{endDate}
             </if>
+        <if test="endDate != '' and  endDate != null">
+            and create_time &lt; #{endDate}
+        </if>
         </where>
         order by create_time desc
         ) a

--
Gitblit v1.9.3