diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java index f7ab97de..949d8afe 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java @@ -142,7 +142,9 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { ProjectPeopleVo vo = new ProjectPeopleVo(); // 获取施工人员总数 Long count = constructionUserService.lambdaQuery() - .eq(SubConstructionUser::getProjectId, projectId).count(); + .eq(SubConstructionUser::getProjectId, projectId) + .isNotNull(SubConstructionUser::getTeamId) + .count(); BigDecimal countDec = BigDecimal.valueOf(count); vo.setPeopleCount(countDec); // 获取考勤数据 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 d07ad2b8..08f81a75 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 @@ -76,6 +76,8 @@ import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; +import static org.dromara.project.domain.enums.BusAttendanceClockStatusEnum.ATTENDANCE_LIST; + /** * 施工人员Service业务层处理 * @@ -180,7 +182,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl byUserId = projectTeamService.getByUserId(userId, req.getProjectId()); - if(CollectionUtil.isEmpty(byUserId)){ + if (CollectionUtil.isEmpty(byUserId)) { return new TableDataInfo<>(); } list1 = byUserId.stream().map(BusProjectTeamAppVo::getId).toList(); @@ -188,7 +190,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl wrapper = this.buildQueryWrapper(req); - wrapper.in(req.getTeamId() == null && "2".equals(appUserType), SubConstructionUser::getTeamId,list1); + 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)); @@ -230,14 +232,14 @@ public class SubConstructionUserServiceImpl extends ServiceImpl0; + return i > 0; } /** @@ -853,7 +855,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl getAttendanceTotalVoPage(SubConstructionUserAttendanceQueryReq req, PageQuery pageQuery) { + String clockMonth = req.getClockDate(); + if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) { + throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST); + } + // 解析月份 + YearMonth yearMonth = YearMonth.parse(clockMonth); + // 判断是否大于当前月份 + if (yearMonth.isAfter(YearMonth.now())) { + throw new ServiceException("不能查看大于当前月份的记录", HttpStatus.BAD_REQUEST); + } + // 计算当月第一天 / 最后一天 + LocalDate start = yearMonth.atDay(1); + LocalDate end = yearMonth.atEndOfMonth(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); // 从对象中取值 String userName = req.getUserName(); Long projectId = req.getProjectId(); Long teamId = req.getTeamId(); String typeOfWork = req.getTypeOfWork(); - String clockMonth = req.getClockDate(); + // 联表查询 LambdaQueryWrapper attendanceLqw = Wrappers.lambdaQuery(BusAttendance.class) .eq(BusAttendance::getProjectId, projectId); - if (ObjectUtils.isNotEmpty(clockMonth)) { - // 校验月份格式 - if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) { - throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST); - } - // 解析月份 - YearMonth yearMonth = YearMonth.parse(clockMonth); - // 判断是否大于当前月份 - if (yearMonth.isAfter(YearMonth.now())) { - throw new ServiceException("不能查看大于当前月份的记录", HttpStatus.BAD_REQUEST); - } - // 计算当月第一天 / 最后一天 - LocalDate start = yearMonth.atDay(1); - LocalDate end = yearMonth.atEndOfMonth(); - attendanceLqw.between(BusAttendance::getClockDate, start, end); - List userIdList = attendanceService.list(attendanceLqw) - .stream().map(BusAttendance::getUserId).toList(); - if (CollUtil.isNotEmpty(userIdList)) { - lqw.in(SubConstructionUser::getSysUserId, userIdList); - } - } +// if (ObjectUtils.isNotEmpty(clockMonth)) { +// // 校验月份格式 +// if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) { +// throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST); +// } +// // 解析月份 +// YearMonth yearMonth = YearMonth.parse(clockMonth); +// // 判断是否大于当前月份 +// if (yearMonth.isAfter(YearMonth.now())) { +// throw new ServiceException("不能查看大于当前月份的记录", HttpStatus.BAD_REQUEST); +// } +// // 计算当月第一天 / 最后一天 +// LocalDate start = yearMonth.atDay(1); +// LocalDate end = yearMonth.atEndOfMonth(); +// attendanceLqw.between(BusAttendance::getClockDate, start, end); +// List userIdList = attendanceService.list(attendanceLqw) +// .stream().map(BusAttendance::getUserId).toList(); +// if (CollUtil.isNotEmpty(userIdList)) { +// lqw.in(SubConstructionUser::getSysUserId, userIdList); +// } +// } // 模糊查询 lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName); // 精确查询 @@ -1129,6 +1145,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl constructionUserPage = this.page(pageQuery.build(), lqw); List constructionUserList = constructionUserPage.getRecords(); @@ -1143,6 +1160,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl userIdList = constructionUserList.stream().map(SubConstructionUser::getSysUserId).toList(); // 关联查询施工人员考勤列表 attendanceLqw.in(BusAttendance::getUserId, userIdList); + attendanceLqw.between(BusAttendance::getClockDate, start, end); Map> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw) .stream().collect(Collectors.groupingBy(BusAttendance::getUserId)); // 填充信息 @@ -1194,8 +1212,12 @@ public class SubConstructionUserServiceImpl extends ServiceImpl result = this.page(pageQuery.build(), lqw); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java index b7cd3f9c..569ba927 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java @@ -148,7 +148,8 @@ public class AttendanceJob { busAttendance.setClockDate(date); busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue()); busAttendance.setRuleTime(rule.getClockInTime()); - if (leaveService.isLeave(date, sysUserId)) { + LocalDateTime localDateTime = date.atTime(clockInTime); + if (leaveService.isLeave(localDateTime, sysUserId)) { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue()); } else { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue()); @@ -268,7 +269,8 @@ public class AttendanceJob { busAttendance.setClockDate(date); busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue()); busAttendance.setRuleTime(rule.getClockOutTime()); - if (leaveService.isLeave(date, sysUserId)) { + LocalDateTime localDateTime = date.atTime(clockOutTime); + if (leaveService.isLeave(localDateTime, sysUserId)) { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue()); } else { busAttendance.setClockStatus(BusAttendanceClockStatusEnum.UNCLOCK.getValue()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java index b9dd35ab..daf3be56 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java @@ -7,7 +7,10 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.dromara.project.domain.dto.attendance.*; +import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.vo.attendance.*; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; +import org.dromara.project.service.IBusProjectTeamService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -38,6 +41,8 @@ public class BusAttendanceController extends BaseController { private final IBusAttendanceService busAttendanceService; + private final IBusProjectTeamService projectTeamService; + /** * 查询考勤列表 */ @@ -114,10 +119,19 @@ public class BusAttendanceController extends BaseController { return toAjax(busAttendanceService.deleteWithValidByIds(List.of(ids), true)); } - + /** + * 查询项目施工人员前14天考勤状况 + */ @GetMapping("/list/clockDate/twoWeek") - public R> getClockDateForTwoWeekList(Long projectId) { - return R.ok(busAttendanceService.getClockDateForTwoWeekList(projectId)); + public R> getClockDateForTwoWeekList(TwoWeekDto dto) { + return R.ok(busAttendanceService.getClockDateForTwoWeekList(dto)); + } + /** + * 查询项目施工人员当天考勤状况 + */ + @GetMapping("/list/clockDate/today") + public R getTodayAttendanceData(TwoWeekDto dto) { + return R.ok(busAttendanceService.getTodayAttendanceData(dto)); } @PostMapping("/exportList") @@ -125,4 +139,13 @@ public class BusAttendanceController extends BaseController { busAttendanceService.getExportList(dto, response); } + + @GetMapping("/listByProject/{projectid}") + public R> listByProject(@NotNull(message = "项目id不能为空") + @PathVariable Long projectid) { + BusProjectTeamQueryReq busProjectTeamQueryReq = new BusProjectTeamQueryReq(); + busProjectTeamQueryReq.setProjectId(projectid); + return R.ok(projectTeamService.queryList(busProjectTeamQueryReq)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java index 5164cbb1..3be7f38b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java @@ -14,6 +14,9 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.contractor.domain.dto.contractor.SubContractorQueryReq; +import org.dromara.contractor.domain.vo.contractor.SubContractorVo; +import org.dromara.contractor.service.ISubContractorService; import org.dromara.project.domain.bo.BusProjectPunchrangeBo; import org.dromara.project.domain.dto.projectteam.BusProjectTeamCreateReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; @@ -48,6 +51,8 @@ public class BusProjectTeamController extends BaseController { private final IBusProjectPunchrangeService busProjectPunchrangeService; private final ISysUserService userService; + + private final ISubContractorService contractorService; /** * 查询项目班组列表 */ @@ -138,8 +143,8 @@ public class BusProjectTeamController extends BaseController { * 获取所有分包管理人员 */ @GetMapping("/listSubContractor") - public R> listSubContractor(Long projectId) { - return R.ok(userService.selectUserListByAppUserType("2",projectId)); + public R> listSubContractor(Long projectId,Long contractorId) { + return R.ok(userService.selectUserListByAppUserType("2",projectId,contractorId)); } /** @@ -160,4 +165,12 @@ public class BusProjectTeamController extends BaseController { return R.ok(busProjectTeamService.deleteUserId(id,userId)); } + /** + * 查询分包单位列表 + */ + @GetMapping("/contractorList") + public R> contractorList(SubContractorQueryReq req) { + return R.ok(contractorService.queryList(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java index f090ea73..c91b7679 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java @@ -108,4 +108,9 @@ public class BusAttendance extends BaseEntity { * 薪水 */ private BigDecimal salary; + + /** + * 代打卡人员Id + */ + private Long replaceId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusLeave.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusLeave.java index 798cffc6..a94e2f42 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusLeave.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusLeave.java @@ -140,4 +140,13 @@ public class BusLeave extends BaseEntity { */ private String auditStatus; + /** + * 时间类型 1-天 2-小时 + */ + private String timeType; + + /** + * 时间段类型 1-上午 2-下午 + */ + private String periodType; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProjectTeam.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProjectTeam.java index 7e756c5d..cc1983bd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProjectTeam.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProjectTeam.java @@ -57,4 +57,9 @@ public class BusProjectTeam extends BaseEntity { * 管理员Id */ private String userId; + + /** + * 分包公司Id + */ + private Long contractorId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java index 92969171..16870af1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java @@ -36,4 +36,9 @@ public class BusAttendancePunchCardByFaceReq implements Serializable { */ private Long projectId; + /** + * 用户Id + */ + private Long userId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/TwoWeekDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/TwoWeekDto.java new file mode 100644 index 00000000..bf18423a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/TwoWeekDto.java @@ -0,0 +1,27 @@ +package org.dromara.project.domain.dto.attendance; + +import lombok.Data; + +@Data +public class TwoWeekDto { + + /** + * 人员姓名 + */ + private String userName; + + /** + * 班组id + */ + private Long teamId; + + /** + * 工种 + */ + private String typeOfWork; + + /** + * 项目id + */ + private Long projectId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamCreateReq.java index 1c009ca8..2a8a75e9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamCreateReq.java @@ -51,4 +51,9 @@ public class BusProjectTeamCreateReq implements Serializable { * 管理员Id */ private String userId; + + /** + * 分包公司Id + */ + private Long contractorId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamUpdateReq.java index 098cd2df..0d7020b7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamUpdateReq.java @@ -52,4 +52,9 @@ public class BusProjectTeamUpdateReq implements Serializable { * 管理员Id */ private String userId; + + /** + * 分包公司Id + */ + private Long contractorId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamVo.java index d767049f..a3f76053 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamVo.java @@ -88,4 +88,11 @@ public class BusProjectTeamVo implements Serializable { * 打卡范围 */ List punchRangeList; + + /** + * 分包公司Id + */ + private Long contractorId; + + private String contractorName; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java index 0ad92bc2..ef67b94d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java @@ -76,4 +76,9 @@ public class BusProjectTeamMemberVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 头像 + */ + private String avatar; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java index f045b7fb..13983982 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java @@ -1,8 +1,8 @@ package org.dromara.project.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; -import org.dromara.common.core.domain.R; import org.dromara.project.domain.dto.attendance.*; import org.dromara.project.domain.vo.BusAttendanceVo; import org.dromara.project.domain.bo.BusAttendanceBo; @@ -13,12 +13,9 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.project.domain.vo.BusMonthAttendanceVo; import org.dromara.project.domain.vo.attendance.*; -import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; -import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -132,9 +129,9 @@ public interface IBusAttendanceService extends IService{ List getMonthAttendance(Long projectId, String month); /** - * 获取用户指定月份的打卡记录 + * 获取用户打卡异常记录 */ - List getAbnormalAttendance(@NotNull @PathVariable("projectId") Long projectId); + TableDataInfo getAbnormalAttendance(@NotNull @PathVariable("projectId") Long projectId, PageQuery pageQuery); /** * 统计指定日期的打卡人员 @@ -165,7 +162,12 @@ public interface IBusAttendanceService extends IService{ /** * 近两周打卡统计 */ - List getClockDateForTwoWeekList(Long projectId); + List getClockDateForTwoWeekList(TwoWeekDto dto); + + /** + * 获取项目当天的考勤数据 + */ + BusAttendanceClockDateForTwoWeekVo getTodayAttendanceData(TwoWeekDto dto); /** * 获取导出的考勤数据 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusLeaveService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusLeaveService.java index 0bff419b..d3b27fb9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusLeaveService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusLeaveService.java @@ -13,6 +13,7 @@ import org.dromara.project.domain.dto.leave.BusLeaveQueryReq; import org.dromara.project.domain.vo.leave.BusLeaveVo; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -101,7 +102,7 @@ public interface IBusLeaveService extends IService { /** * 查询是否请假 */ - Boolean isLeave(LocalDate date,Long userId); + Boolean isLeave(LocalDateTime clockTime, Long userId); /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index cbff7503..719ec9fa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -64,6 +65,8 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import static org.dromara.project.domain.enums.BusAttendanceClockStatusEnum.ATTENDANCE_LIST; + /** * 考勤Service业务层处理 * @@ -316,25 +319,37 @@ public class BusAttendanceServiceImpl extends ServiceImpl attendances = this.lambdaQuery() @@ -390,24 +400,37 @@ public class BusAttendanceServiceImpl extends ServiceImpl { try { - chatServerHandler.sendSystemMessageToUser(userId, "打卡成功", "1"); + chatServerHandler.sendSystemMessageToUser(finalUserId, "打卡成功", "1"); } catch (Exception e) { - log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, "打卡成功", e); + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", finalUserId, "打卡成功", e); } }); //计算工资 @@ -431,6 +454,11 @@ public class BusAttendanceServiceImpl extends ServiceImpl { try { - chatServerHandler.sendSystemMessageToUser(userId, "打卡成功", "1"); + chatServerHandler.sendSystemMessageToUser(finalUserId1, "打卡成功", "1"); } catch (Exception e) { - log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, "打卡成功", e); + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", finalUserId1, "打卡成功", e); } }); //计算工资 @@ -589,6 +628,8 @@ public class BusAttendanceServiceImpl extends ServiceImpl rangeIds = new ArrayList<>(); if (isConstruct) { BusProjectTeamMember one = projectTeamMemberService.getOne(Wrappers.lambdaQuery(BusProjectTeamMember.class) @@ -636,7 +677,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl matchingRange = JSTUtil.findMatchingRange(req.getLat(), req.getLng(), punchRangeList); return matchingRange != null; @@ -707,7 +748,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl getAbnormalAttendance(Long projectId) { + public TableDataInfo getAbnormalAttendance(Long projectId, PageQuery pageQuery) { List abnormalList = Arrays.asList(BusAttendanceClockStatusEnum.LATE.getValue(), BusAttendanceClockStatusEnum.LEAVEEARLY.getValue(), @@ -722,16 +763,18 @@ public class BusAttendanceServiceImpl extends ServiceImpl "1".equals(relevancy.getUserType())); - List busAttendanceVos = baseMapper.selectVoList(Wrappers.lambdaQuery(BusAttendance.class) + IPage busAttendanceVoIPage = baseMapper.selectVoPage(pageQuery.build(), Wrappers.lambdaQuery(BusAttendance.class) .eq(BusAttendance::getUserId, userId) .eq(b, BusAttendance::getProjectId, projectId) .in(BusAttendance::getClockStatus, abnormalList) + .orderByDesc(BusAttendance::getClockDate) + .orderByDesc(BusAttendance::getRuleTime) ); //转换星期几 - for (BusAttendanceVo busAttendanceVo : busAttendanceVos) { + for (BusAttendanceVo busAttendanceVo : busAttendanceVoIPage.getRecords()) { busAttendanceVo.setWeek(busAttendanceVo.getClockDate().getDayOfWeek().getValue()); } - return busAttendanceVos; + return TableDataInfo.build(busAttendanceVoIPage); } /** @@ -1145,28 +1188,37 @@ public class BusAttendanceServiceImpl extends ServiceImpl getClockDateForTwoWeekList(Long projectId) { + public List getClockDateForTwoWeekList(TwoWeekDto dto) { LocalDate now = LocalDate.now(); //查询所有管理员和分包人员 排除 - List excludeUserIds = constructionUserService.list(Wrappers.lambdaQuery() - .ne(SubConstructionUser::getUserRole, "0") - ).stream().map(SubConstructionUser::getSysUserId).toList(); +// List excludeUserIds = constructionUserService.list(Wrappers.lambdaQuery() +// .ne(SubConstructionUser::getUserRole, "0") +// ).stream().map(SubConstructionUser::getSysUserId).toList(); List allUserIds = constructionUserService.list(Wrappers.lambdaQuery() .eq(SubConstructionUser::getUserRole, "0") - .eq(SubConstructionUser::getProjectId,projectId) + .eq(SubConstructionUser::getProjectId,dto.getProjectId()) + .eq(dto.getTeamId()!=null,SubConstructionUser::getTeamId,dto.getTeamId()) + .eq(StrUtil.isNotBlank(dto.getTypeOfWork()),SubConstructionUser::getTypeOfWork,dto.getTypeOfWork()) + .like(StrUtil.isNotBlank(dto.getUserName()),SubConstructionUser::getUserName,dto.getUserName()) + .isNotNull(SubConstructionUser::getTeamId) ).stream().map(SubConstructionUser::getSysUserId).toList(); // 往前14天,包含今天 LocalDate startDate = now.minusDays(14); - List list = list(Wrappers.lambdaQuery() - .eq(BusAttendance::getProjectId, projectId) - .notIn(CollectionUtil.isNotEmpty(excludeUserIds),BusAttendance::getUserId, excludeUserIds) - .between(BusAttendance::getClockDate, startDate, now) - .orderByAsc(BusAttendance::getClockDate) - ); + LocalDate endDate = now.minusDays(1); + List list; + if(CollectionUtil.isEmpty(allUserIds)){ + list = new ArrayList<>(); + }else { + list = list(Wrappers.lambdaQuery() + .in(BusAttendance::getUserId, allUserIds) + .between(BusAttendance::getClockDate, startDate, endDate) + .orderByAsc(BusAttendance::getClockDate) + ); + } // 按日期分组 Map> groupedByDate = list.stream() @@ -1183,10 +1235,9 @@ public class BusAttendanceServiceImpl extends ServiceImpl result = new ArrayList<>(); - List validStatusList = Arrays.asList("1", "2", "3", "5"); LocalDate currentDate = startDate; - while (!currentDate.isAfter(now)) { + while (!currentDate.isAfter(endDate)) { Map> userAttendanceMap = dateUserMap.getOrDefault(currentDate, new HashMap<>()); int full = 0, half = 0, absent = 0; @@ -1196,13 +1247,11 @@ public class BusAttendanceServiceImpl extends ServiceImpl= 2) { + if (validCount >= 1) { full++; - } else if (validCount == 1) { - half++; } else { absent++; } @@ -1213,14 +1262,6 @@ public class BusAttendanceServiceImpl extends ServiceImpl excludeUserIds = constructionUserService.list(Wrappers.lambdaQuery() +// .ne(SubConstructionUser::getUserRole, "0") +// ).stream().map(SubConstructionUser::getSysUserId).toList(); + + List allUserIds = constructionUserService.list(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getUserRole, "0") + .eq(SubConstructionUser::getProjectId,dto.getProjectId()) + .eq(dto.getTeamId()!=null,SubConstructionUser::getTeamId,dto.getTeamId()) + .eq(StrUtil.isNotBlank(dto.getTypeOfWork()),SubConstructionUser::getTypeOfWork,dto.getTypeOfWork()) + .like(StrUtil.isNotBlank(dto.getUserName()),SubConstructionUser::getUserName,dto.getUserName()) + .isNotNull(SubConstructionUser::getTeamId) + ).stream().map(SubConstructionUser::getSysUserId).toList(); + + //当天请假人数 + String todayStr = now.format(DateTimeFormatter.ISO_LOCAL_DATE); // 结果:"2024-10-10" + + // 2. 拼接 SQL 时添加单引号,确保语法正确 + int count = (int)leaveService.count(Wrappers.lambdaQuery() + .eq(BusLeave::getTimeType, "2") + // 关键:给日期字符串加单引号,避免 SQL 语法错误 + .apply("DATE(start_time) <= {0}", todayStr) + .apply("DATE(end_time) >= {0}", todayStr) + ); + + List list; + if(CollectionUtil.isEmpty(allUserIds)){ + list = new ArrayList<>(); + }else { + list = list(Wrappers.lambdaQuery() + .in(CollectionUtil.isNotEmpty(allUserIds),BusAttendance::getUserId, allUserIds) + .eq(BusAttendance::getClockDate, now) + .orderByAsc(BusAttendance::getClockDate) + ); + } + + Map> collect = list.stream().collect(Collectors.groupingBy(BusAttendance::getUserId)); + + int full = 0, half = 0, absent = 0; + + for (Map.Entry> userEntry : collect.entrySet()) { + List records = userEntry.getValue(); + + long validCount = records.stream() + .map(BusAttendance::getClockStatus) + .filter(ATTENDANCE_LIST::contains) + .count(); + + if (validCount >= 2) { + full++; + } else if (validCount == 1) { + half++; + } else { + absent++; + } + } + + BusAttendanceClockDateForTwoWeekVo vo = new BusAttendanceClockDateForTwoWeekVo(); + vo.setClockDate(now); + vo.setAttendance(full); + vo.setHalfAttendance(half); + vo.setAbsenteeism(absent); + //计算考勤率 + vo.setAllUserNum(allUserIds.size()- count); + vo.setClockNum(full+half); + vo.setAttendanceRate(BigDecimalUtil.toPercentage(new BigDecimal(full+half), + new BigDecimal(vo.getAllUserNum()))); + return vo; + } + @Override public void getExportList(AttendanceExportDto dto, HttpServletResponse response) { try (OutputStream outputStream = response.getOutputStream()) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusLeaveServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusLeaveServiceImpl.java index 4b6dfd4e..b888e88c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusLeaveServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusLeaveServiceImpl.java @@ -371,15 +371,13 @@ public class BusLeaveServiceImpl extends ServiceImpl @Override - public Boolean isLeave(LocalDate date, Long userId) { - LocalDateTime dateStart = LocalDateTime.of(date, LocalTime.MIN); - LocalDateTime dateEnd = LocalDateTime.of(date, LocalTime.MAX); + public Boolean isLeave(LocalDateTime clockTime, Long userId) { LambdaQueryWrapper wrappers = new LambdaQueryWrapper<>(); wrappers.eq(BusLeave::getUserId, userId) .eq(BusLeave::getAuditStatus, BusinessStatusEnum.FINISH.getStatus()) - .le(BusLeave::getStartTime, dateEnd) // 请假开始时间 <= 当天结束时间 - .ge(BusLeave::getEndTime, dateStart); // 请假结束时间 >= 当天开始时间 + .le(BusLeave::getStartTime, clockTime) // 请假开始时间 <= 当天打卡时间 + .ge(BusLeave::getEndTime, clockTime); // 请假结束时间 >= 当天打卡时间 return count(wrappers) > 0; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java index 70c90ac3..8c688d67 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java @@ -33,8 +33,10 @@ import org.dromara.project.mapper.BusProjectTeamMemberMapper; import org.dromara.project.service.*; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserRole; +import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.SysUserRoleMapper; +import org.dromara.system.service.ISysOssService; import org.dromara.system.service.ISysRoleService; import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; @@ -84,6 +86,9 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl sysUserVos = userService.selectUserByIds(userIdList, null); Map collect = sysUserVos.stream().collect(Collectors.toMap(SysUserVo::getUserId, SysUserVo::getNickName)); - + List list1 = projectTeamList.stream().map(BusProjectTeam::getContractorId).toList(); + List subContractors = contractorService.listByIds(list1); + Map contractorMap = subContractors.stream().collect(Collectors.toMap(SubContractor::getId, SubContractor::getName)); // 对象列表 => 封装对象列表 List projectTeamVoList = projectTeamList.stream().map(projectTeam -> { @@ -449,6 +465,7 @@ public class BusProjectTeamServiceImpl extends ServiceImpl collect.getOrDefault(Long.valueOf(s.trim()), "")).collect(Collectors.joining(","))); } + projectTeamVo.setContractorName(contractorMap.getOrDefault(projectTeam.getContractorId(), "")); return projectTeamVo; }).toList(); projectTeamVoPage.setRecords(projectTeamVoList); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java index 7206efea..04cd1466 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java @@ -17,6 +17,7 @@ import org.dromara.common.web.core.BaseController; import org.dromara.system.domain.SysMenu; import org.dromara.system.domain.bo.SysMenuBo; import org.dromara.system.domain.vo.MenuTreeSelectVo; +import org.dromara.system.domain.vo.MetaVo; import org.dromara.system.domain.vo.RouterVo; import org.dromara.system.domain.vo.SysMenuVo; import org.dromara.system.service.ISysMenuService; @@ -56,6 +57,17 @@ public class SysMenuController extends BaseController { return R.ok(menuService.buildMenus(menus)); } + @GetMapping("/getAppRouters/{projectId}") + public R> getRoutersList(@NotNull(message = "项目主键不能为空") + @PathVariable Long projectId) { + Long userId = LoginHelper.getUserId(); + SysMenuBo sysMenuBo = new SysMenuBo(); + sysMenuBo.setMenuSource("2"); + sysMenuBo.setProjectId(projectId); + List menus = menuService.selectMenuList(sysMenuBo, userId); + return R.ok(menus); + } + /** * 获取菜单列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 2f9afa93..61ee644f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -387,7 +387,7 @@ public class SysUserController extends BaseController { * 获取分包单位列表 */ @SaCheckPermission("system:user:updateFb") - @PutMapping("/{projectId}") + @GetMapping("/fb/{projectId}") public R> getFbList(@PathVariable("projectId") Long projectId) { List list = contractorService.list(Wrappers.lambdaQuery() .select(SubContractor::getId, SubContractor::getName) @@ -400,7 +400,7 @@ public class SysUserController extends BaseController { * 修改分包单位 */ @SaCheckPermission("system:user:updateFb") - @PutMapping("/{userId}/{contractorId}") + @PutMapping("/fb/{userId}/{contractorId}") public R updateFb(@PathVariable("userId") Long userId, @PathVariable("contractorId") Long contractorId) { return R.ok(userService.updateFb(userId, contractorId)); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMenuBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMenuBo.java index d1b6cb5c..4144623e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMenuBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMenuBo.java @@ -113,4 +113,7 @@ public class SysMenuBo extends BaseEntity { */ private String menuSource; + + private Long projectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index 45234c33..8719e448 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -136,5 +136,5 @@ public interface SysUserMapper extends BaseMapperPlus { - List selectUserListByAppUserType(@Param("appUserType") String appUserType, @Param("projectId")Long projectId); + List selectUserListByAppUserType(@Param("appUserType") String appUserType, @Param("projectId")Long projectId, @Param("contractorId")Long contractorId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index 4826607e..310f4043 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -273,7 +273,7 @@ public interface ISysUserService { Boolean queryProjectRelevancy(Long userId); - List selectUserListByAppUserType(String appUserType,Long projectId); + List selectUserListByAppUserType(String appUserType,Long projectId,Long contractorId); Boolean updateFb(Long userId,Long contractorId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java index 9fd7851f..a4b94074 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java @@ -77,7 +77,14 @@ public class SysMenuServiceImpl implements ISysMenuService { .orderByAsc(SysMenu::getOrderNum)); } else { QueryWrapper wrapper = Wrappers.query(); - wrapper.inSql("r.role_id", "select role_id from sys_user_role where user_id = " + userId) + // 构建子查询的基础SQL + StringBuilder subSql = new StringBuilder("select role_id from sys_user_role where user_id = " + userId); + + // 如果projectId有值,追加条件 + if (menu.getProjectId() != null) { + subSql.append(" and project_id = ").append(menu.getProjectId()); + } + wrapper.inSql("r.role_id", subSql.toString()) .like(StringUtils.isNotBlank(menu.getMenuName()), "m.menu_name", menu.getMenuName()) .eq(StringUtils.isNotBlank(menu.getVisible()), "m.visible", menu.getVisible()) .eq(StringUtils.isNotBlank(menu.getStatus()), "m.status", menu.getStatus()) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 76d183f9..9dc6f652 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -960,8 +960,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } @Override - public List selectUserListByAppUserType(String appUserType,Long projectId) { - return baseMapper.selectUserListByAppUserType(appUserType,projectId); + public List selectUserListByAppUserType(String appUserType,Long projectId,Long contractorId) { + return baseMapper.selectUserListByAppUserType(appUserType,projectId,contractorId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index e9007e00..6c775a54 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -135,6 +135,7 @@ WHERE bur.project_id = #{projectId} AND su.app_user_type = #{appUserType} + AND su.contractor_id = #{contractorId} AND su.del_flag = '0' AND su.status = '0'