From 9f7b6d77d36daff5b88beccc37b4468906e61059 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 26 Sep 2025 20:45:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SubConstructionUserServiceImpl.java | 19 +- .../impl/SubUserSalaryDetailServiceImpl.java | 22 ++ .../impl/DesVolumeFileServiceImpl.java | 228 ++++++++++++------ .../vo/attendance/AttendanceCountVo.java | 4 + .../impl/BusAttendanceServiceImpl.java | 28 +++ 5 files changed, 226 insertions(+), 75 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java index 836618d5..7a16d4b0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java @@ -49,6 +49,7 @@ import org.dromara.project.domain.*; import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum; import org.dromara.project.domain.enums.BusAttendanceCommuterEnum; import org.dromara.project.domain.enums.BusConstructionUserAttendanceStatusEnum; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.service.*; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserRole; @@ -172,8 +173,24 @@ public class SubConstructionUserServiceImpl extends ServiceImpl queryPageList(SubConstructionUserQueryReq req, PageQuery pageQuery) { + Long userId = LoginHelper.getUserId(); + SysUserVo sysUserVo = userService.selectUserById(userId); + String appUserType = sysUserVo.getAppUserType(); + List list1 = new ArrayList<>(); + if ("2".equals(appUserType)) { + List byUserId = projectTeamService.getByUserId(userId, req.getProjectId()); + + if(CollectionUtil.isEmpty(byUserId)){ + return new TableDataInfo<>(); + } + list1 = byUserId.stream().map(BusProjectTeamAppVo::getId).toList(); + } + // 查询数据库 - Page result = this.page(pageQuery.build(), this.buildQueryWrapper(req)); + LambdaQueryWrapper wrapper = this.buildQueryWrapper(req); + wrapper.in(req.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId,list1); + wrapper.eq(SubConstructionUser::getUserRole, "0"); + Page result = this.page(pageQuery.build(), wrapper); return TableDataInfo.build(getVoPage(result)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubUserSalaryDetailServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubUserSalaryDetailServiceImpl.java index 3e5e84e2..cf22cce0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubUserSalaryDetailServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubUserSalaryDetailServiceImpl.java @@ -52,11 +52,14 @@ import org.dromara.project.domain.BusAttendance; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.BusWorkWage; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.service.IBusAttendanceService; import org.dromara.project.service.IBusProjectService; import org.dromara.project.service.IBusProjectTeamService; import org.dromara.project.service.IBusWorkWageService; import org.dromara.project.service.impl.BusProjectTeamServiceImpl; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; @@ -110,6 +113,10 @@ public class SubUserSalaryDetailServiceImpl extends ServiceImpl list1 = new ArrayList<>(); + if ("2".equals(appUserType)) { + List byUserId = projectTeamService.getByUserId(userId, dto.getProjectId()); + + if(CollectionUtil.isEmpty(byUserId)){ + return new TableDataInfo<>(); + } + list1 = byUserId.stream().map(BusProjectTeamAppVo::getId).toList(); + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("user_id","max(team_id) as teamId","max(create_by) as createBy", "SUM(work_hour) as workHour", "SUM(total_salary) as totalSalary","max(create_time) as createTime") .eq("project_id", dto.getProjectId()) .between("report_date", start, end) + .in(dto.getTeamId()==null && "2".equals(appUserType),"team_id", list1) .eq(dto.getTeamId()!=null,"team_id", dto.getTeamId()) .like(StringUtils.isNotBlank(dto.getUserName()),"user_name", dto.getUserName()) .groupBy("user_id"); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java index 13b93dd9..67e70d5d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java @@ -83,6 +83,7 @@ public class DesVolumeFileServiceImpl extends ServiceImpl existingFiles = baseMapper.selectList(new LambdaQueryWrapper() .eq(DesVolumeFile::getVolumeCatalogId, desVolumeFile.getVolumeCatalogId()) .eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) .orderByDesc(DesVolumeFile::getVersion)); - if(CollectionUtil.isNotEmpty(existingFiles)){ + if (CollectionUtil.isNotEmpty(existingFiles)) { DesVolumeFile desVolumeFile1 = existingFiles.getFirst(); - if(!desVolumeFile1.getId().equals(id)){ + if (!desVolumeFile1.getId().equals(id)) { SysOssVo ossVo = ossService.getById(desVolumeFile1.getFileId()); desVolumeFileCodeVo.setFileUrl(ossVo.getUrl()); - }else { + } else { desVolumeFileCodeVo.setIsLatest(true); } } @@ -162,7 +163,7 @@ public class DesVolumeFileServiceImpl extends ServiceImpl"+"的蓝图已上传"); + contentDto.setContent("<" + volumeCatalog.getDocumentName() + ">" + "的蓝图已上传"); dto.setMessage(JSONUtil.toJsonStr(contentDto)); dto.setUserIds(req.getUserIds()); SseMessageUtils.publishMessage(dto); @@ -297,9 +298,126 @@ public class DesVolumeFileServiceImpl extends ServiceImpl fileIds, String type, List desVolumeFiles) { +// // 用于记录同一批次中已处理的文件名及对应的版本号 +// Map batchFileVersionMap = new HashMap<>(); +// +// for (Long fileId : fileIds) { +// SysOssVo ossVo = ossService.getById(fileId); +// if (ossVo == null) { +// throw new ServiceException("对应文件不存在", HttpStatus.NOT_FOUND); +// } +// +// DesVolumeFile file = new DesVolumeFile(); +// BeanUtils.copyProperties(req, file); +// file.setFileId(fileId); +// +// String fileName = ossVo.getOriginalName(); +// +// // 根据文件类型和文件名判断是否存在文件,存在则版本号往上增 +// List existingFiles = baseMapper.selectList(new LambdaQueryWrapper() +// .eq(DesVolumeFile.PROCESS.equals(type),DesVolumeFile::getType, type) +// .in(DesVolumeFile.BLUEPRINT.equals(type),DesVolumeFile::getType, Arrays.asList(DesVolumeFile.BLUEPRINT, DesVolumeFile.WASTE)) +// .eq(DesVolumeFile::getVolumeCatalogId, file.getVolumeCatalogId()) +//// .eq(DesVolumeFile::getFileName, fileName) +// .orderByDesc(DesVolumeFile::getVersion)); +// +// String versionStr = "1.0"; // 默认版本号 +// +// if (DesVolumeFile.BLUEPRINT.equals(type)) { +// // 蓝图文件:1.0, 2.0, 3.0... +// if (CollectionUtil.isNotEmpty(existingFiles)) { +// String lastVersion = existingFiles.getFirst().getVersion(); +// int majorVersion = (int) Math.floor(Double.parseDouble(lastVersion)) + 1; +// versionStr = majorVersion + ".0"; +// } +// } else if (DesVolumeFile.PROCESS.equals(type)) { +// // 过程图纸:基于蓝图版本号,如蓝图是1.0,则过程图为1.1, 1.2...1.9, 1.10 +// // 先查找对应的蓝图文件最新版本 +// List blueprintFiles = baseMapper.selectList(new LambdaQueryWrapper() +// .in(DesVolumeFile::getType, Arrays.asList(DesVolumeFile.BLUEPRINT, DesVolumeFile.WASTE)) // 蓝图类型 +// .eq(DesVolumeFile::getVolumeCatalogId, file.getVolumeCatalogId()) +//// .eq(DesVolumeFile::getFileName, fileName) +// .orderByDesc(DesVolumeFile::getVersion)); +// +// String blueprintVersion = "0.0"; // 默认蓝图版本 +// if (CollectionUtil.isNotEmpty(blueprintFiles)) { +// blueprintVersion = blueprintFiles.getFirst().getVersion(); +// } +// +// // 解析蓝图版本号 +// String[] blueprintParts = blueprintVersion.split("\\."); +// int blueprintMajor = Integer.parseInt(blueprintParts[0]); +// +// if (CollectionUtil.isNotEmpty(existingFiles)) { +// // 已存在过程图纸,需要递增次版本号 +// String lastVersion = existingFiles.getFirst().getVersion(); +// String[] parts = lastVersion.split("\\."); +// int major = Integer.parseInt(parts[0]); +// int minor = Integer.parseInt(parts[1]); +// +// if (major == blueprintMajor) { +// // 同一主版本,次版本号递增 +// minor++; +// versionStr = major + "." + minor; +// } else { +// // 不同主版本,使用蓝图的主版本并从1开始 +// versionStr = blueprintMajor + ".1"; +// } +// } else { +// // 不存在过程图纸,从蓝图版本的.1开始 +// versionStr = blueprintMajor + ".1"; +// } +// } +// +// // 检查同一批次中是否已存在同名文件 +// if (batchFileVersionMap.containsKey(fileName)) { +// String lastBatchVersion = String.valueOf(batchFileVersionMap.get(fileName)); +// if ( DesVolumeFile.BLUEPRINT.equals(type)) { +// // 蓝图文件批次处理 +// int lastMajor = (int) Math.floor(Double.parseDouble(lastBatchVersion)); +// versionStr = (lastMajor + 1) + ".0"; +// } else if (DesVolumeFile.PROCESS.equals(type)) { +// // 过程图纸批次处理 +// String[] currentParts = versionStr.split("\\."); +// String[] batchParts = lastBatchVersion.split("\\."); +// +// int currentMajor = Integer.parseInt(currentParts[0]); +// int currentMinor = Integer.parseInt(currentParts[1]); +// int batchMajor = Integer.parseInt(batchParts[0]); +// int batchMinor = Integer.parseInt(batchParts[1]); +// +// if (currentMajor == batchMajor) { +// // 同一主版本,取较大的次版本号+1 +// int newMinor = Math.max(currentMinor, batchMinor) + 1; +// versionStr = currentMajor + "." + newMinor; +// } +// } +// } +// +// // 更新批次文件版本映射(存储为字符串形式) +// batchFileVersionMap.put(fileName, versionStr); +// +// file.setVersion(versionStr); +// file.setFileName(fileName); +// desVolumeFiles.add(file); +// } +// } private void processFiles(DesVolumeFileCreateReq req, List fileIds, String type, List desVolumeFiles) { - // 用于记录同一批次中已处理的文件名及对应的版本号 - Map batchFileVersionMap = new HashMap<>(); + // 用于记录同一批次中的索引 + int fileIndex = 0; + + // 先找出数据库中已存在的最高版本号 + List existingFilesInDB = baseMapper.selectList(new LambdaQueryWrapper() + .eq(DesVolumeFile.PROCESS.equals(type), DesVolumeFile::getType, type) + .in(DesVolumeFile.BLUEPRINT.equals(type), DesVolumeFile::getType, Arrays.asList(DesVolumeFile.BLUEPRINT, DesVolumeFile.WASTE)) + .eq(DesVolumeFile::getVolumeCatalogId, req.getVolumeCatalogId()) + .orderByDesc(DesVolumeFile::getVersion)); + + double maxBatchVersion = 0.0; + if (CollectionUtil.isNotEmpty(existingFilesInDB)) { + maxBatchVersion = Double.parseDouble(existingFilesInDB.getFirst().getVersion()); + } for (Long fileId : fileIds) { SysOssVo ossVo = ossService.getById(fileId); @@ -313,97 +431,59 @@ public class DesVolumeFileServiceImpl extends ServiceImpl existingFiles = baseMapper.selectList(new LambdaQueryWrapper() - .eq(DesVolumeFile.PROCESS.equals(type),DesVolumeFile::getType, type) - .in(DesVolumeFile.BLUEPRINT.equals(type),DesVolumeFile::getType, Arrays.asList(DesVolumeFile.BLUEPRINT, DesVolumeFile.WASTE)) - .eq(DesVolumeFile::getVolumeCatalogId, file.getVolumeCatalogId()) -// .eq(DesVolumeFile::getFileName, fileName) - .orderByDesc(DesVolumeFile::getVersion)); - String versionStr = "1.0"; // 默认版本号 if (DesVolumeFile.BLUEPRINT.equals(type)) { // 蓝图文件:1.0, 2.0, 3.0... - if (CollectionUtil.isNotEmpty(existingFiles)) { - String lastVersion = existingFiles.getFirst().getVersion(); - int majorVersion = (int) Math.floor(Double.parseDouble(lastVersion)) + 1; - versionStr = majorVersion + ".0"; - } + // 每个文件递增主版本号 + int majorVersion = (int) maxBatchVersion + fileIndex + 1; + versionStr = majorVersion + ".0"; } else if (DesVolumeFile.PROCESS.equals(type)) { - // 过程图纸:基于蓝图版本号,如蓝图是1.0,则过程图为1.1, 1.2...1.9, 1.10 - // 先查找对应的蓝图文件最新版本 + // 过程图纸:基于蓝图版本号 List blueprintFiles = baseMapper.selectList(new LambdaQueryWrapper() - .in(DesVolumeFile::getType, Arrays.asList(DesVolumeFile.BLUEPRINT, DesVolumeFile.WASTE)) // 蓝图类型 - .eq(DesVolumeFile::getVolumeCatalogId, file.getVolumeCatalogId()) -// .eq(DesVolumeFile::getFileName, fileName) + .in(DesVolumeFile::getType, Arrays.asList(DesVolumeFile.BLUEPRINT, DesVolumeFile.WASTE)) + .eq(DesVolumeFile::getVolumeCatalogId, req.getVolumeCatalogId()) .orderByDesc(DesVolumeFile::getVersion)); - String blueprintVersion = "0.0"; // 默认蓝图版本 + String blueprintVersion = "0.0"; if (CollectionUtil.isNotEmpty(blueprintFiles)) { blueprintVersion = blueprintFiles.getFirst().getVersion(); } - // 解析蓝图版本号 String[] blueprintParts = blueprintVersion.split("\\."); int blueprintMajor = Integer.parseInt(blueprintParts[0]); - if (CollectionUtil.isNotEmpty(existingFiles)) { - // 已存在过程图纸,需要递增次版本号 - String lastVersion = existingFiles.getFirst().getVersion(); - String[] parts = lastVersion.split("\\."); - int major = Integer.parseInt(parts[0]); - int minor = Integer.parseInt(parts[1]); + // 对于过程图纸,需要基于数据库中已存在的最高版本号来计算 + if (CollectionUtil.isNotEmpty(existingFilesInDB) && existingFilesInDB.getFirst().getType().equals(DesVolumeFile.PROCESS)) { + // 如果数据库中已存在过程图纸,则基于最高版本号递增 + String lastProcessVersion = existingFilesInDB.getFirst().getVersion(); + String[] lastParts = lastProcessVersion.split("\\."); + int lastMajor = Integer.parseInt(lastParts[0]); + int lastMinor = Integer.parseInt(lastParts[1]); - if (major == blueprintMajor) { - // 同一主版本,次版本号递增 - minor++; - versionStr = major + "." + minor; + // 如果主版本号相同,则次版本号递增;否则使用蓝图主版本号,次版本号从1开始 + if (lastMajor == blueprintMajor) { + int minorVersion = lastMinor + fileIndex + 1; + versionStr = lastMajor + "." + minorVersion; } else { - // 不同主版本,使用蓝图的主版本并从1开始 - versionStr = blueprintMajor + ".1"; + int minorVersion = fileIndex + 1; + versionStr = blueprintMajor + "." + minorVersion; } } else { - // 不存在过程图纸,从蓝图版本的.1开始 - versionStr = blueprintMajor + ".1"; + // 数据库中没有过程图纸,从蓝图版本的.1开始 + int minorVersion = fileIndex + 1; + versionStr = blueprintMajor + "." + minorVersion; } } - // 检查同一批次中是否已存在同名文件 - if (batchFileVersionMap.containsKey(fileName)) { - String lastBatchVersion = String.valueOf(batchFileVersionMap.get(fileName)); - if ( DesVolumeFile.BLUEPRINT.equals(type)) { - // 蓝图文件批次处理 - int lastMajor = (int) Math.floor(Double.parseDouble(lastBatchVersion)); - versionStr = (lastMajor + 1) + ".0"; - } else if (DesVolumeFile.PROCESS.equals(type)) { - // 过程图纸批次处理 - String[] currentParts = versionStr.split("\\."); - String[] batchParts = lastBatchVersion.split("\\."); - - int currentMajor = Integer.parseInt(currentParts[0]); - int currentMinor = Integer.parseInt(currentParts[1]); - int batchMajor = Integer.parseInt(batchParts[0]); - int batchMinor = Integer.parseInt(batchParts[1]); - - if (currentMajor == batchMajor) { - // 同一主版本,取较大的次版本号+1 - int newMinor = Math.max(currentMinor, batchMinor) + 1; - versionStr = currentMajor + "." + newMinor; - } - } - } - - // 更新批次文件版本映射(存储为字符串形式) - batchFileVersionMap.put(fileName, versionStr); - file.setVersion(versionStr); file.setFileName(fileName); desVolumeFiles.add(file); + + fileIndex++; } } - /** * 批量删除卷册文件信息 * @@ -432,7 +512,7 @@ public class DesVolumeFileServiceImpl extends ServiceImpl list2 = new ArrayList<>(); + if ("2".equals(appUserType)) { + List byUserId = projectTeamService.getByUserId(userId, dto.getProjectId()); + + if(CollectionUtil.isEmpty(byUserId)){ + return new AttendanceCountVo(0,0); + } + list2 = byUserId.stream().map(BusProjectTeamAppVo::getId).toList(); + } + AttendanceCountVo attendanceCountVo = new AttendanceCountVo(); //先查询人员有那些 List list = constructionUserService.list(Wrappers.lambdaQuery(SubConstructionUser.class) .eq(SubConstructionUser::getProjectId, dto.getProjectId()) .eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId()) + .in(dto.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId, list2) .eq(StringUtils.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork()) ); attendanceCountVo.setTotalCount(list.size()); @@ -901,6 +916,18 @@ public class BusAttendanceServiceImpl extends ServiceImpl getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery) { //查询今天打卡人员 + Long userId = LoginHelper.getUserId(); + SysUserVo sysUser = userService.selectUserById(userId); + String appUserType = sysUser.getAppUserType(); + List list1 = new ArrayList<>(); + if ("2".equals(appUserType)) { + List byUserId = projectTeamService.getByUserId(userId, dto.getProjectId()); + + if(CollectionUtil.isEmpty(byUserId)){ + return new TableDataInfo<>(); + } + list1 = byUserId.stream().map(BusProjectTeamAppVo::getId).toList(); + } List attendanceList = baseMapper.selectList(Wrappers.lambdaQuery() .eq(BusAttendance::getProjectId, dto.getProjectId()) @@ -925,6 +952,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl result = constructionUserService.page(pageQuery.build(), wrapper); List records = result.getRecords();