diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuserfile/SubConstructionUserFileTemplateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuserfile/SubConstructionUserFileTemplateReq.java index 42499afc..99258a65 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuserfile/SubConstructionUserFileTemplateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuserfile/SubConstructionUserFileTemplateReq.java @@ -53,4 +53,9 @@ public class SubConstructionUserFileTemplateReq implements Serializable { */ private List userIdList; + /** + * 用户角色 + */ + private String userRole; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java index bd3b60d4..7c28b00c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.contractor.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; @@ -17,6 +18,7 @@ import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.file.FileUtils; +import org.dromara.common.utils.IdCardEncryptorUtil; import org.dromara.contractor.constant.SubConstructionUserConstant; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.SubConstructionUserFile; @@ -32,7 +34,6 @@ import org.dromara.project.domain.BusConstructionBlacklist; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusConstructionBlacklistService; import org.dromara.project.service.IBusProjectService; -import org.dromara.safety.service.IWgzQuestionSavePdfService; import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysDictTypeService; @@ -79,7 +80,7 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl constructionUserList = constructionUserService.list(this.buildTemplateQueryWrapper(req)); // 3. 根目录名称 String randomString = project.getId() + "_" + RandomUtil.randomString(8); @@ -164,7 +166,11 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl constructionUserFileList = new ArrayList<>(); + // 获取所有身份证对应的用户信息 + List allUserList = constructionUserService.lambdaQuery() + .select(SubConstructionUser::getId, SubConstructionUser::getSysUserId, + SubConstructionUser::getUserName, SubConstructionUser::getSfzNumber) + .eq(SubConstructionUser::getProjectId, projectId) + .eq( SubConstructionUser::getUserRole, "0") + .list(); + if (CollUtil.isEmpty(allUserList)) { + throw new ServiceException("项目下无施工人员"); + } + Map userMap = allUserList.stream() + .collect(Collectors.toMap( + SubConstructionUser::getSfzNumber, + SubConstructionUser::getSysUserId, + (oldV, newV) -> newV + )); try { // 2. 创建临时文件 tempZipFile = File.createTempFile(tempZipFilePath, null); @@ -228,7 +250,7 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl userIdList = req.getUserIdList(); + String userRole = req.getUserRole(); // 模糊查询 lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName); // 精确查询 @@ -411,9 +434,8 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl blacklistUserIdList = constructionBlacklistService.lambdaQuery() .eq(BusConstructionBlacklist::getProjectId, projectId) @@ -451,28 +473,32 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl resultList) { - + public void scanUserFolders(File root, Map userMap, List resultList) { if (root == null || !root.exists()) { return; } - File[] files = root.listFiles(); if (files == null) return; - for (File file : files) { - if (file.isDirectory()) { - - // 判断是否符合 “姓名-数字ID” 格式 - if (file.getName().matches(".+-\\d+")) { - // 解析 UserId - long userId = Long.parseLong(file.getName().replaceAll(".*-", "")); - parseUserDocFolder(file, userId, resultList); - + // 判断是否为 “姓名-身份证号” 格式 + String folderName = file.getName(); + int idx = folderName.lastIndexOf("-"); + if (idx > 0) { + String idCard = folderName.substring(idx + 1); + // 校验身份证 + if (IdcardUtil.isValidCard(idCard)) { + // 根据身份证获取用户id + String encrypt = idCardEncryptorUtil.encrypt(idCard); + if (userMap.containsKey(encrypt)) { + Long userId = userMap.get(encrypt); + parseUserDocFolder(file, userId, resultList); + } else { + log.warn("未找到身份证为 {} 的施工人员", idCard); + } + } } else { - // 目录不是目标,继续递归查找 - scanUserFolders(file, resultList); + scanUserFolders(file, userMap, resultList); } } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsReportExportController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsReportExportController.java index 9b38f993..642a3823 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsReportExportController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsReportExportController.java @@ -3,10 +3,7 @@ package org.dromara.progress.controller; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.LocalDateTimeUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; @@ -14,7 +11,6 @@ import org.apache.poi.ss.util.RegionUtil; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.dromara.common.core.domain.R; import org.dromara.common.core.enums.FormatsType; -import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.web.core.BaseController; @@ -31,7 +27,6 @@ import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryDayTot import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryDetailByDayVo; import org.dromara.progress.service.IPgsProcessDailyReportService; import org.dromara.progress.service.IPgsProgressCategoryService; -import org.dromara.progress.service.IPgsProgressPlanService; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; import org.dromara.quality.domain.QltQualityInspection; @@ -40,19 +35,20 @@ import org.dromara.safety.domain.HseSafetyInspection; import org.dromara.safety.service.IHseSafetyInspectionService; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; -import org.springframework.scheduling.annotation.Async; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.net.URL; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.stream.Collectors; @Validated @@ -85,7 +81,7 @@ public class PgsReportExportController extends BaseController { @SaIgnore @GetMapping("/dayReport") public R getStreamData(ReportExportDto dto) { - String url = ""; + String url; LocalDate localDate = DateUtils.parseLocalDateTime(FormatsType.YYYY_MM_DD, dto.getDate()); PgsProcessDailyReport one = dailyReportService.lambdaQuery() .eq(PgsProcessDailyReport::getReportDate, localDate) @@ -130,7 +126,7 @@ public class PgsReportExportController extends BaseController { } } - return R.ok(url); + return R.ok("操作成功", url); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/PgsProcessDailyReportVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/PgsProcessDailyReportVo.java index 892631f5..3701c223 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/PgsProcessDailyReportVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/PgsProcessDailyReportVo.java @@ -1,22 +1,17 @@ package org.dromara.progress.domain.vo; -import java.time.LocalDate; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.progress.domain.PgsProcessDailyReport; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.progress.domain.PgsProcessDailyReport; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDate; import java.util.Date; - /** * 进度日报视图对象 pgs_process_daily_report * @@ -63,5 +58,9 @@ public class PgsProcessDailyReportVo implements Serializable { @ExcelProperty(value = "下载路径") private String url; + /** + * 创建时间 + */ + private Date createTime; }