From 054ecd92a1820f198dd81d6d516628c1dfe5a490 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Wed, 6 Aug 2025 17:40:30 +0800 Subject: [PATCH] =?UTF-8?q?[add]=20=E6=9F=A5=E8=AF=A2=E5=88=86=E5=8C=85?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=BA=BA=E5=91=98=EF=BC=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=85=B3=E8=81=94=E6=B7=BB=E5=8A=A0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E7=8F=AD=E7=BB=84=E6=89=93=E5=8D=A1=E8=8C=83?= =?UTF-8?q?=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SubContractorController.java | 2 +- .../SubConstructionUserCreateReq.java | 55 --------------- .../SubConstructionUserUpdateReq.java | 45 ------------- .../vo/contractor/SubContractorManagerVo.java | 5 -- .../service/ISubContractorService.java | 4 +- .../impl/SubConstructionUserServiceImpl.java | 10 --- .../impl/SubContractorServiceImpl.java | 31 ++++++++- .../controller/BusProjectTeamController.java | 10 ++- .../BusUserProjectRelevancyController.java | 10 ++- .../project/domain/BusProjectTeam.java | 5 ++ .../domain/BusUserProjectRelevancy.java | 5 ++ .../BusProjectBatchByProjectListReq.java | 3 +- .../projectteam/BusProjectTeamCreateReq.java | 11 +++ .../projectteam/BusProjectTeamQueryReq.java | 5 -- .../projectteam/BusProjectTeamUpdateReq.java | 8 +++ .../BusUserProjectRelevancyCreateReq.java | 10 +++ .../BusUserProjectRelevancyQueryReq.java | 10 +-- .../BusUserProjectRelevancyUpdateReq.java | 9 +++ .../BusLoginUserProjectRelevancyVo.java | 5 ++ .../BusUserProjectRelevancyVo.java | 6 ++ .../service/IBusProjectTeamService.java | 2 +- .../IBusUserProjectRelevancyService.java | 6 +- .../impl/BusProjectTeamServiceImpl.java | 67 ++++++++++++++----- .../BusUserProjectRelevancyServiceImpl.java | 23 ++++--- .../domain/enums/SysContractorRoleEnum.java | 28 ++++++++ .../system/domain/enums/SysDeptTypeEnum.java | 9 +-- .../service/impl/SysDeptServiceImpl.java | 33 +++++++-- .../service/impl/SysUserServiceImpl.java | 52 ++++++++++++-- 28 files changed, 282 insertions(+), 187 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/enums/SysContractorRoleEnum.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubContractorController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubContractorController.java index 4b0867ec..8d81dd98 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubContractorController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubContractorController.java @@ -66,7 +66,7 @@ public class SubContractorController extends BaseController { @GetMapping("/listManager/{projectId}") public R> listManager(@NotNull(message = "项目id不能为空") @PathVariable Long projectId) { - return R.ok(contractorService.queryManagerList(projectId)); + return R.ok(contractorService.queryManagerListByProjectId(projectId)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserCreateReq.java index 8d3af0ba..5cc0092d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserCreateReq.java @@ -55,66 +55,11 @@ public class SubConstructionUserCreateReq implements Serializable { */ private String nation; - /** - * 身份证正面图片 - */ - private String sfzFrontPic; - - /** - * 身份证反面图片 - */ - private String sfzBackPic; - - /** - * 身份证号码 - */ - private String sfzNumber; - - /** - * 身份证有效开始期 - */ - private String sfzStart; - - /** - * 身份证有效结束期 - */ - private String sfzEnd; - - /** - * 身份证地址 - */ - private String sfzSite; - - /** - * 身份证出生日期 - */ - private String sfzBirth; - /** * 籍贯 */ private String nativePlace; - /** - * 银行卡图片 - */ - private String yhkPic; - - /** - * 银行卡号 - */ - private String yhkNumber; - - /** - * 开户行 - */ - private String yhkOpeningBank; - - /** - * 持卡人 - */ - private String yhkCardholder; - /** * 工种(字典type_of_work) */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserUpdateReq.java index 33a77b55..ab7a8832 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserUpdateReq.java @@ -62,56 +62,11 @@ public class SubConstructionUserUpdateReq implements Serializable { */ private String nation; - /** - * 身份证正面图片 - */ - private String sfzFrontPic; - - /** - * 身份证反面图片 - */ - private String sfzBackPic; - - /** - * 身份证有效开始期 - */ - private String sfzStart; - - /** - * 身份证有效结束期 - */ - private String sfzEnd; - - /** - * 身份证地址 - */ - private String sfzSite; - - /** - * 身份证出生日期 - */ - private String sfzBirth; - /** * 籍贯 */ private String nativePlace; - /** - * 银行卡图片 - */ - private String yhkPic; - - /** - * 开户行 - */ - private String yhkOpeningBank; - - /** - * 持卡人 - */ - private String yhkCardholder; - /** * 工种(字典type_of_work) */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/contractor/SubContractorManagerVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/contractor/SubContractorManagerVo.java index f584fa98..68f5da21 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/contractor/SubContractorManagerVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/contractor/SubContractorManagerVo.java @@ -21,11 +21,6 @@ public class SubContractorManagerVo implements Serializable { */ private Long id; - /** - * 项目id - */ - private Long projectId; - /** * 公司名称 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubContractorService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubContractorService.java index 56884115..ae503778 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubContractorService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubContractorService.java @@ -106,10 +106,10 @@ public interface ISubContractorService extends IService { Page getVoPage(Page contractorPage); /** - * 获取分包公司管理员列表 + * 获取项目下分包公司管理员列表 * * @param projectId 项目id * @return 分包公司经理列表 */ - List queryManagerList(Long projectId); + List queryManagerListByProjectId(Long projectId); } 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 36c3e339..2f993bd7 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 @@ -331,9 +331,6 @@ public class SubConstructionUserServiceImpl extends ServiceImpl queryManagerList(Long projectId) { + public List queryManagerListByProjectId(Long projectId) { List contractorList = this.lambdaQuery() .eq(SubContractor::getProjectId, projectId) .list(); @@ -380,6 +382,29 @@ public class SubContractorServiceImpl extends ServiceImpl contractorIds = contractorList.stream().map(SubContractor::getId).collect(Collectors.toSet()); - return List.of(); + List adminUserList = constructionUserService.lambdaQuery() + .in(SubConstructionUser::getContractorId, contractorIds) + .eq(SubConstructionUser::getUserRole, SubConstructionUserRoleEnum.ADMIN.getValue()) + .list(); + Map> adminUserMap = adminUserList.stream() + .collect(Collectors.groupingBy(SubConstructionUser::getContractorId)); + return contractorList.stream().map(contractor -> { + SubContractorManagerVo vo = new SubContractorManagerVo(); + Long id = contractor.getId(); + if (adminUserMap.containsKey(id)) { + List users = adminUserMap.get(id); + if (users != null) { + vo.setManagerList(users.stream().map(user -> { + SubManagerVo managerVo = new SubManagerVo(); + managerVo.setManagerId(user.getSysUserId()); + managerVo.setManagerName(user.getUserName()); + return managerVo; + }).toList()); + } + } + vo.setId(id); + vo.setName(contractor.getName()); + return vo; + }).toList(); } } 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 b57129ec..a4adbb9f 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 @@ -6,8 +6,6 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; @@ -55,8 +53,8 @@ public class BusProjectTeamController extends BaseController { @SaCheckPermission("project:projectTeam:list") @GetMapping("/listForeman/{projectId}") public R> listForeman(@NotNull(message = "项目id不能为空") - @PathVariable Long projectId) { - return R.ok(busProjectTeamService.queryForemanList(projectId)); + @PathVariable Long projectId) { + return R.ok(busProjectTeamService.queryForemanListByProjectId(projectId)); } /** @@ -89,7 +87,7 @@ public class BusProjectTeamController extends BaseController { @Log(title = "项目班组", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody BusProjectTeamCreateReq req) { + public R add(@Validated @RequestBody BusProjectTeamCreateReq req) { return R.ok(busProjectTeamService.insertByBo(req)); } @@ -100,7 +98,7 @@ public class BusProjectTeamController extends BaseController { @Log(title = "项目班组", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody BusProjectTeamUpdateReq req) { + public R edit(@Validated @RequestBody BusProjectTeamUpdateReq req) { return toAjax(busProjectTeamService.updateByBo(req)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusUserProjectRelevancyController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusUserProjectRelevancyController.java index 7ee76f7c..412d977c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusUserProjectRelevancyController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusUserProjectRelevancyController.java @@ -7,8 +7,6 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; @@ -102,7 +100,7 @@ public class BusUserProjectRelevancyController extends BaseController { @Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody BusUserProjectRelevancyCreateReq req) { + public R add(@Validated @RequestBody BusUserProjectRelevancyCreateReq req) { return R.ok(userProjectRelevancyService.insertByBo(req)); } @@ -127,9 +125,9 @@ public class BusUserProjectRelevancyController extends BaseController { @DeleteMapping("/remove/project/list") public R removeBatchByProjectList(@RequestBody BusProjectBatchByProjectListReq req) { Long userId = req.getUserId(); - Long[] projectIdList = req.getProjectIdList(); + List projectIdList = req.getProjectIdList(); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("user_id", userId).in("project_id", (Object[]) projectIdList); + wrapper.eq("user_id", userId).in("project_id", projectIdList); boolean result = userProjectRelevancyService.remove(wrapper); /* List userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> { UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); @@ -149,7 +147,7 @@ public class BusUserProjectRelevancyController extends BaseController { @Log(title = "系统用户与项目关联", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody BusUserProjectRelevancyUpdateReq req) { + public R edit(@Validated @RequestBody BusUserProjectRelevancyUpdateReq req) { return toAjax(userProjectRelevancyService.updateByBo(req)); } 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 063a62ff..b707a922 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 @@ -43,6 +43,11 @@ public class BusProjectTeam extends BaseEntity { */ private String isClockIn; + /** + * 打卡范围 + */ + private String punchRange; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusUserProjectRelevancy.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusUserProjectRelevancy.java index 8472786f..d2de503b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusUserProjectRelevancy.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusUserProjectRelevancy.java @@ -36,4 +36,9 @@ public class BusUserProjectRelevancy implements Serializable { */ private Long projectId; + /** + * 用户类型(0系统管理员 1普通人员 2项目管理员) + */ + private String userType; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectBatchByProjectListReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectBatchByProjectListReq.java index dcd5b970..edfa891d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectBatchByProjectListReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectBatchByProjectListReq.java @@ -4,6 +4,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.List; /** * @author lilemy @@ -23,6 +24,6 @@ public class BusProjectBatchByProjectListReq implements Serializable { /** * 项目ID列表 */ - private Long[] projectIdList; + private List projectIdList; } 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 26a31795..8cc4acda 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 @@ -1,9 +1,12 @@ package org.dromara.project.domain.dto.projectteam; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.List; /** * @author lilemy @@ -18,18 +21,26 @@ public class BusProjectTeamCreateReq implements Serializable { /** * 项目id */ + @NotNull(message = "项目id不能为空") private Long projectId; /** * 班组名称 */ + @NotBlank(message = "班组名称不能为空") private String teamName; /** * 范围内打卡(0范围内打卡 1任何地点打卡)默认为1 */ + @NotBlank(message = "范围内打卡") private String isClockIn; + /** + * 打卡范围 + */ + private List punchRangeList; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java index 60551346..d10555ff 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java @@ -15,11 +15,6 @@ public class BusProjectTeamQueryReq implements Serializable { @Serial private static final long serialVersionUID = 3252651952758479341L; - /** - * 主键id - */ - private Long id; - /** * 项目id */ 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 b7904ebb..86df8008 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 @@ -1,9 +1,11 @@ package org.dromara.project.domain.dto.projectteam; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.List; /** * @author lilemy @@ -18,6 +20,7 @@ public class BusProjectTeamUpdateReq implements Serializable { /** * 主键id */ + @NotNull(message = "id不能为空") private Long id; /** @@ -35,6 +38,11 @@ public class BusProjectTeamUpdateReq implements Serializable { */ private String isClockIn; + /** + * 打卡范围 + */ + private List punchRangeList; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyCreateReq.java index 76928154..aeed0059 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyCreateReq.java @@ -1,5 +1,7 @@ package org.dromara.project.domain.dto.userprojectrelevancy; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; @@ -18,11 +20,19 @@ public class BusUserProjectRelevancyCreateReq implements Serializable { /** * 用户ID */ + @NotNull(message = "用户ID不能为空") private Long userId; /** * 项目ID */ + @NotNull(message = "项目ID不能为空") private Long projectId; + /** + * 用户类型(0系统管理员 1普通人员 2项目管理员) + */ + @NotBlank(message = "用户类型不能为空") + private String userType; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyQueryReq.java index 76ae87e9..41a0ead5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyQueryReq.java @@ -15,11 +15,6 @@ public class BusUserProjectRelevancyQueryReq implements Serializable { @Serial private static final long serialVersionUID = 3252651952758479341L; - /** - * 主键ID - */ - private Long id; - /** * 用户ID */ @@ -29,4 +24,9 @@ public class BusUserProjectRelevancyQueryReq implements Serializable { * 项目ID */ private Long projectId; + + /** + * 用户类型(0系统管理员 1普通人员 2项目管理员) + */ + private String userType; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyUpdateReq.java index 2560e17c..75949f0f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/userprojectrelevancy/BusUserProjectRelevancyUpdateReq.java @@ -1,5 +1,7 @@ package org.dromara.project.domain.dto.userprojectrelevancy; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; @@ -18,6 +20,7 @@ public class BusUserProjectRelevancyUpdateReq implements Serializable { /** * 主键ID */ + @NotNull(message = "主键ID不能为空") private Long id; /** @@ -30,4 +33,10 @@ public class BusUserProjectRelevancyUpdateReq implements Serializable { */ private Long projectId; + /** + * 用户类型(0系统管理员 1普通人员 2项目管理员) + */ + @NotBlank(message = "用户类型不能为空") + private String userType; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusLoginUserProjectRelevancyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusLoginUserProjectRelevancyVo.java index a1081903..8f58dd4e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusLoginUserProjectRelevancyVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusLoginUserProjectRelevancyVo.java @@ -40,6 +40,11 @@ public class BusLoginUserProjectRelevancyVo implements Serializable { */ private String shortName; + /** + * 用户类型(0系统管理员 1普通人员 2项目管理员) + */ + private String userType; + /** * go项目id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusUserProjectRelevancyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusUserProjectRelevancyVo.java index dd7dafee..7a289115 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusUserProjectRelevancyVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/userprojectrelevancy/BusUserProjectRelevancyVo.java @@ -44,6 +44,12 @@ public class BusUserProjectRelevancyVo implements Serializable { @ExcelProperty(value = "项目ID") private Long projectId; + /** + * 用户类型(0系统管理员 1普通人员 2项目管理员) + */ + @ExcelProperty(value = "用户类型(0系统管理员 1普通人员 2项目管理员)") + private String userType; + /** * 项目详情 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java index ad69c29d..a37904c9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java @@ -79,7 +79,7 @@ public interface IBusProjectTeamService extends IService { * @param projectId 项目id * @return 项目班组和班组长分页列表 */ - List queryForemanList(Long projectId); + List queryForemanListByProjectId(Long projectId); /** * 获取项目班组视图对象 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java index e4b49f52..f1cd33b4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java @@ -62,16 +62,18 @@ public interface IBusUserProjectRelevancyService extends IService userIdList); + void saveBatchByUserList(Long projectId, List userIdList, String userType); /** * 批量新增用户和项目关联 * * @param projectIdList 项目ID列表 * @param userId 用户ID + * @param userType 用户类型 */ - void saveBatchByProjectList(List projectIdList, Long userId); + void saveBatchByProjectList(List projectIdList, Long userId, String userType); /** * 修改系统用户与项目关联 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java index b95ecbfb..37313691 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.project.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -16,6 +17,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.ISubConstructionUserService; +import org.dromara.project.domain.BusProjectPunchrange; import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.BusProjectTeamMember; import org.dromara.project.domain.dto.projectteam.BusProjectTeamCreateReq; @@ -26,17 +28,19 @@ import org.dromara.project.domain.vo.projectteam.BusForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.mapper.BusProjectTeamMapper; +import org.dromara.project.service.IBusProjectPunchrangeService; import org.dromara.project.service.IBusProjectService; import org.dromara.project.service.IBusProjectTeamMemberService; import org.dromara.project.service.IBusProjectTeamService; -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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -49,9 +53,6 @@ import java.util.stream.Collectors; public class BusProjectTeamServiceImpl extends ServiceImpl implements IBusProjectTeamService { - @Resource - private ISysUserService userService; - @Resource private IBusProjectService projectService; @@ -63,6 +64,9 @@ public class BusProjectTeamServiceImpl extends ServiceImpl punchRangeList = req.getPunchRangeList(); + if (CollUtil.isNotEmpty(punchRangeList)) { + projectTeam.setPunchRange(JSONUtil.toJsonStr(punchRangeList)); + } // 数据校验 validEntityBeforeSave(projectTeam); + // 判断打卡范围是否存在 + if (CollUtil.isNotEmpty(punchRangeList)) { + Long count = projectPunchrangeService.lambdaQuery() + .in(BusProjectPunchrange::getId, punchRangeList) + .eq(BusProjectPunchrange::getProjectId, projectTeam.getProjectId()) + .count(); + if (count != punchRangeList.size()) { + throw new ServiceException("项目未配置考勤范围", HttpStatus.BAD_REQUEST); + } + } // 操作数据库 boolean save = this.save(projectTeam); if (!save) { @@ -137,8 +155,22 @@ public class BusProjectTeamServiceImpl extends ServiceImpl punchRangeList = req.getPunchRangeList(); + if (CollUtil.isNotEmpty(punchRangeList)) { + projectTeam.setPunchRange(JSONUtil.toJsonStr(punchRangeList)); + } // 数据校验 validEntityBeforeSave(projectTeam); + // 判断打卡范围是否存在 + if (CollUtil.isNotEmpty(punchRangeList)) { + Long count = projectPunchrangeService.lambdaQuery() + .in(BusProjectPunchrange::getId, punchRangeList) + .eq(BusProjectPunchrange::getProjectId, projectTeam.getProjectId()) + .count(); + if (count != punchRangeList.size()) { + throw new ServiceException("项目未配置考勤范围", HttpStatus.BAD_REQUEST); + } + } // 判断是否存在 BusProjectTeam oldProjectTeam = this.getById(projectTeam.getId()); if (oldProjectTeam == null) { @@ -154,6 +186,7 @@ public class BusProjectTeamServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); @@ -172,6 +205,13 @@ public class BusProjectTeamServiceImpl extends ServiceImpl queryForemanList(Long projectId) { + public List queryForemanListByProjectId(Long projectId) { List projectTeamList = this.list(Wrappers.lambdaQuery(BusProjectTeam.class).eq(BusProjectTeam::getProjectId, projectId)); if (CollUtil.isEmpty(projectTeamList)) { return List.of(); @@ -231,11 +271,6 @@ public class BusProjectTeamServiceImpl extends ServiceImpl foremanList = constructionUserService.listByIds(foremanIdList); Map> foremanMap = foremanList.stream() .collect(Collectors.groupingBy(SubConstructionUser::getTeamId)); - // 获取系统用户信息 - List sysUserIds = foremanList.stream().map(SubConstructionUser::getSysUserId).filter(Objects::nonNull).distinct().toList(); - List sysUserList = userService.selectUserByIds(sysUserIds, null); - Map sysUserMap = sysUserList.stream() - .collect(Collectors.toMap(SysUserVo::getUserId, SysUserVo::getNickName)); // 封装数据 return projectTeamList.stream().map(projectTeam -> { BusProjectTeamForemanVo projectTeamForemanResp = new BusProjectTeamForemanVo(); @@ -249,13 +284,11 @@ public class BusProjectTeamServiceImpl extends ServiceImpl userIdList) { + public void saveBatchByUserList(Long projectId, List userIdList, String userType) { if (ObjectUtils.isEmpty(projectId) || ObjectUtils.isEmpty(userIdList)) { return; } @@ -138,6 +140,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl projectIdList, Long userId) { - if (ObjectUtils.isEmpty(projectIdList) || ObjectUtils.isEmpty(userId)) { + public void saveBatchByProjectList(List projectIdList, Long userId, String userType) { + if (ObjectUtils.isEmpty(projectIdList) || ObjectUtils.isEmpty(userId) || StringUtils.isBlank(userType)) { return; } List userProjectRelevancyList = projectIdList.stream().map(projectId -> { BusUserProjectRelevancy userProjectRelevancy = new BusUserProjectRelevancy(); userProjectRelevancy.setUserId(userId); userProjectRelevancy.setProjectId(projectId); + userProjectRelevancy.setUserType(userType); return userProjectRelevancy; }).toList(); boolean saveRelevancy = this.saveBatch(userProjectRelevancyList); @@ -361,12 +366,12 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl().in("id", (Object[]) projectIdList)); - if (count < projectIdList.length) { + List projectIdList = req.getProjectIdList(); + long count = projectService.count(new QueryWrapper().in("id", projectIdList)); + if (count < projectIdList.size()) { throw new ServiceException("项目ID列表错误,一个或多个项目不存在", HttpStatus.NOT_FOUND); } - List userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> { + List userProjectRelevancyList = projectIdList.stream().map(projectId -> { BusUserProjectRelevancy userProjectRelevancy = new BusUserProjectRelevancy(); userProjectRelevancy.setUserId(userId); userProjectRelevancy.setProjectId(projectId); @@ -423,13 +428,13 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl deptIds = this.getParentAndSiblingDeptIds(dept); + deptIds.remove(dept.getDeptId()); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.select(SysUser::getUserId); lqw.in(SysUser::getDeptId, deptIds); @@ -497,7 +499,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { .filter(userId -> !LoginHelper.isSuperAdmin(userId)) .toList(); if (CollUtil.isNotEmpty(userIds)) { - userProjectRelevancyService.saveBatchByUserList(projectId, userIds); + userProjectRelevancyService.saveBatchByUserList(projectId, userIds, "2"); } } else if (SysDeptTypeEnum.CONTRACT.getCode().equals(deptType)) { // 分包部门 @@ -533,7 +535,29 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { dept.setProjectId(projectId); dept.setContractorId(contractorId); } - return baseMapper.insert(dept); + int insert = baseMapper.insert(dept); + if (insert < 1) { + throw new ServiceException("添加部门失败", HttpStatus.ERROR); + } + if (SysDeptTypeEnum.CONTRACT.getCode().equals(deptType)) { + // 分包部门,自动创建下面的角色 + Long deptId = dept.getDeptId(); + List roleNameList = List.of(SysContractorRoleEnum.values()); + List roles = roleNameList.stream().map(item -> { + SysRole role = new SysRole(); + role.setDeptId(deptId); + role.setRoleName(item.getName()); + role.setRoleKey(dept.getContractorId() + "_" + item.getCode()); + role.setStatus("0"); + role.setRoleSort(item.getSort()); + return role; + }).toList(); + boolean b = roleMapper.insertBatch(roles); + if (!b) { + throw new ServiceException("添加部门角色失败"); + } + } + return insert; } /** @@ -587,6 +611,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { } // 获取当前部门及其上级部门 ID 列表 List deptIds = this.getParentAndSiblingDeptIds(dept); + deptIds.remove(dept.getDeptId()); // 获取部门用户 ID LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.select(SysUser::getUserId); @@ -599,10 +624,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { // 情况 1:原本有项目,且项目 ID 改变 → 删除旧的,添加新的 if (oldProjectId != null) { userProjectRelevancyService.deleteByProjectAndUserIds(oldProjectId, userIds); - userProjectRelevancyService.saveBatchByUserList(newProjectId, userIds); + userProjectRelevancyService.saveBatchByUserList(newProjectId, userIds, "2"); } else { // 情况 2:原本没有项目,现在新增了 → 直接添加 - userProjectRelevancyService.saveBatchByUserList(newProjectId, userIds); + userProjectRelevancyService.saveBatchByUserList(newProjectId, userIds, "2"); } } dept.setProjectId(newProjectId); 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 3af324d5..fdda582f 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 @@ -15,6 +15,7 @@ import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.CacheNames; +import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.exception.ServiceException; @@ -23,10 +24,13 @@ import org.dromara.common.core.utils.*; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.project.domain.dto.userprojectrelevancy.BusUserProjectRelevancyCreateReq; import org.dromara.project.service.IBusUserProjectRelevancyService; import org.dromara.system.domain.*; import org.dromara.system.domain.bo.SysUserBo; +import org.dromara.system.domain.enums.SysContractorRoleEnum; import org.dromara.system.domain.enums.SysDeptTypeEnum; import org.dromara.system.domain.vo.*; import org.dromara.system.mapper.*; @@ -60,6 +64,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { private final SysUserPostMapper userPostMapper; private final ISysDeptService deptService; private final IBusUserProjectRelevancyService userProjectRelevancyService; + private final ISubConstructionUserService constructionUserService; @Lazy @Resource @@ -335,16 +340,40 @@ public class SysUserServiceImpl implements ISysUserService, UserService { insertUserRole(user, false); Long deptId = user.getDeptId(); SysDeptVo deptVo = deptService.selectDeptById(deptId); - if (deptVo.getDeptType().equals(SysDeptTypeEnum.CONTRACT.getCode())) { + String deptType = deptVo.getDeptType(); + if (deptType.equals(SysDeptTypeEnum.CONTRACT.getCode())) { // 关联分包部门所属项目 BusUserProjectRelevancyCreateReq req = new BusUserProjectRelevancyCreateReq(); req.setUserId(user.getUserId()); req.setProjectId(deptVo.getProjectId()); + req.setUserType("1"); userProjectRelevancyService.insertByBo(req); + Long[] roleIds = user.getRoleIds(); + if (roleIds.length > 1) { + throw new ServiceException("分包部门只能关联一个角色", HttpStatus.BAD_REQUEST); + } + Long roleId = roleIds[0]; + SysRole sysRole = roleMapper.selectById(roleId); + if (sysRole.getRoleName().equals(SysContractorRoleEnum.MANAGER.getName())) { + SubConstructionUser constructionUser = constructionUserService.getBySysUserId(user.getUserId()); + constructionUser.setUserRole(SysContractorRoleEnum.MANAGER.getName()); + constructionUserService.updateById(constructionUser); + } } else { // 关联部门所属项目 List projectIds = deptService.selectProjectIdById(deptId); - userProjectRelevancyService.saveBatchByProjectList(projectIds, user.getUserId()); + String userType = "1"; + if (deptType.equals(SysDeptTypeEnum.COMPANY.getCode()) || deptType.equals(SysDeptTypeEnum.SUB_COMPANY.getCode())) { + userType = "2"; + } + if (deptType.equals(SysDeptTypeEnum.SPECIAL.getCode())) { + // 判断父部门是否为总部门或子部门 + SysDeptVo parentDept = deptService.selectDeptById(deptVo.getParentId()); + if (parentDept.getDeptType().equals(SysDeptTypeEnum.COMPANY.getCode()) || parentDept.getDeptType().equals(SysDeptTypeEnum.SUB_COMPANY.getCode())) { + userType = "2"; + } + } + userProjectRelevancyService.saveBatchByProjectList(projectIds, user.getUserId(), userType); } return rows; } @@ -392,20 +421,33 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } Long deptId = user.getDeptId(); SysDeptVo deptVo = deptService.selectDeptById(deptId); - if (deptVo.getDeptType().equals(SysDeptTypeEnum.CONTRACT.getCode())) { + String deptType = deptVo.getDeptType(); + if (deptType.equals(SysDeptTypeEnum.CONTRACT.getCode())) { // 先删除旧关联 userProjectRelevancyService.deleteByUserId(user.getUserId()); // 添加新关联 BusUserProjectRelevancyCreateReq req = new BusUserProjectRelevancyCreateReq(); req.setUserId(user.getUserId()); req.setProjectId(deptVo.getProjectId()); + req.setUserType("1"); userProjectRelevancyService.insertByBo(req); } else { // 先删除旧关联 userProjectRelevancyService.deleteByUserId(user.getUserId()); // 添加新关联 List projectIds = deptService.selectProjectIdById(user.getDeptId()); - userProjectRelevancyService.saveBatchByProjectList(projectIds, user.getUserId()); + String userType = "1"; + if (deptType.equals(SysDeptTypeEnum.COMPANY.getCode()) || deptType.equals(SysDeptTypeEnum.SUB_COMPANY.getCode())) { + userType = "2"; + } + if (deptType.equals(SysDeptTypeEnum.SPECIAL.getCode())) { + // 判断父部门是否为总部门或子部门 + SysDeptVo parentDept = deptService.selectDeptById(deptVo.getParentId()); + if (parentDept.getDeptType().equals(SysDeptTypeEnum.COMPANY.getCode()) || parentDept.getDeptType().equals(SysDeptTypeEnum.SUB_COMPANY.getCode())) { + userType = "2"; + } + } + userProjectRelevancyService.saveBatchByProjectList(projectIds, user.getUserId(), userType); } return flag; } @@ -625,7 +667,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.in(SysUserPost::getPostId, postIds); List userPostList = userPostMapper.selectList(lqw); - if (CollUtil.isNotEmpty(userPostList)){ + if (CollUtil.isNotEmpty(userPostList)) { List userIds = userPostList.stream().map(SysUserPost::getUserId).distinct().toList(); return baseMapper.selectVoByIds(userIds); }