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 < #{endDate} + </if> </where> order by create_time desc ) a -- Gitblit v1.9.3