From 45999b0c038321d469785214e429a6945f6f9475 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 26 Sep 2025 18:55:07 +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 | 2 + .../controller/BusProjectTeamController.java | 33 ++++ .../app/BusProjectTeamAppController.java | 10 ++ .../project/domain/BusProjectTeam.java | 4 + .../projectteam/BusProjectTeamCreateReq.java | 5 + .../projectteam/BusProjectTeamUpdateReq.java | 4 + .../vo/projectteam/BusProjectTeamAppVo.java | 33 ++++ .../vo/projectteam/BusProjectTeamVo.java | 14 ++ .../BusLoginUserProjectRelevancyVo.java | 5 + .../service/IBusProjectTeamService.java | 7 + .../impl/BusProjectTeamServiceImpl.java | 27 ++++ .../BusUserProjectRelevancyServiceImpl.java | 20 ++- .../controller/system/SysUserController.java | 72 ++++++++- .../org/dromara/system/domain/SysUser.java | 6 + .../dromara/system/domain/bo/SysUserBo.java | 3 + .../system/domain/dto/FbUserListDto.java | 15 ++ .../dromara/system/domain/vo/SysUserVo.java | 10 ++ .../dromara/system/mapper/SysUserMapper.java | 4 + .../system/mapper/SysUserRoleMapper.java | 7 + .../system/service/ISysUserService.java | 12 +- .../service/impl/SysRoleServiceImpl.java | 2 +- .../service/impl/SysUserServiceImpl.java | 148 +++++++++++++++--- .../resources/mapper/system/SysUserMapper.xml | 19 ++- 23 files changed, 436 insertions(+), 26 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamAppVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/dto/FbUserListDto.java 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 8fa385e1..836618d5 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 @@ -187,6 +187,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl list(BusProjectPunchrangeBo bo, PageQuery pageQuery) { return busProjectPunchrangeService.queryPageList(bo, pageQuery); } + + /** + * 获取所有分包管理人员 + */ + @GetMapping("/listSubContractor") + public R> listSubContractor(Long projectId) { + return R.ok(userService.selectUserListByAppUserType("2",projectId)); + } + + /** + * 获取与用户关联的班组 + */ + @SaCheckPermission("project:projectTeam:getByUserId") + @GetMapping("/getByUserId/{userId}/{projectId}") + public R> getByUserId(@PathVariable("userId") Long userId, + @PathVariable("projectId") Long projectId){ + return R.ok(busProjectTeamService.getByUserId(userId,projectId)); + } + + /** + * 移除班组的管理 + */ + @PutMapping("/deleteUserId/{id}") + public R deleteUserId(@PathVariable("id") Long id){ + return R.ok(busProjectTeamService.deleteUserId(id)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java index 9e345f53..94094d47 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java @@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; import org.dromara.common.web.core.BaseController; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.service.IBusProjectTeamService; @@ -49,4 +50,13 @@ public class BusProjectTeamAppController extends BaseController { busProjectTeamQueryReq.setProjectId(projectid); return R.ok(projectTeamService.queryList(busProjectTeamQueryReq)); } + + /** + * 获取与用户关联的班组 + */ + @GetMapping("/getByUserId/{userId}/{projectId}") + public R> getByUserId(@PathVariable("userId") Long userId,@PathVariable("projectId") Long projectId){ + return R.ok(projectTeamService.getByUserId(userId,projectId)); + } + } 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 b707a922..580af132 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 @@ -53,4 +53,8 @@ public class BusProjectTeam extends BaseEntity { */ private String remark; + /** + * 管理员Id + */ + private Long userId; } 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 8cc4acda..694cd17f 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 @@ -46,4 +46,9 @@ public class BusProjectTeamCreateReq implements Serializable { */ private String remark; + + /** + * 管理员Id + */ + private Long userId; } 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 86df8008..c9af717d 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 @@ -48,4 +48,8 @@ public class BusProjectTeamUpdateReq implements Serializable { */ private String remark; + /** + * 管理员Id + */ + private Long userId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamAppVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamAppVo.java new file mode 100644 index 00000000..5e1fb896 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamAppVo.java @@ -0,0 +1,33 @@ +package org.dromara.project.domain.vo.projectteam; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.project.domain.BusProjectTeam; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 项目班组视图对象 bus_project_team + * + * @author lilemy + * @date 2025-03-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusProjectTeam.class) +public class BusProjectTeamAppVo implements Serializable { + + private Long id; + + private String teamName; +} 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 d426eb39..8f628347 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 @@ -6,6 +6,8 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.project.domain.BusProjectPunchrange; import org.dromara.project.domain.BusProjectTeam; @@ -71,6 +73,18 @@ public class BusProjectTeamVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 管理员Id + */ + private Long userId; + + + /** + * 管理员Id + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "userId") + private String userName; + /** * 打卡范围 */ 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 460c38d9..52b18a4a 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 @@ -50,4 +50,9 @@ public class BusLoginUserProjectRelevancyVo implements Serializable { */ private Long teamId; + /** + * 班组名 + */ + private String teamName; + } 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 4ea7de86..8edc2e65 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 @@ -10,6 +10,7 @@ import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.dto.projectteam.BusProjectTeamCreateReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo; @@ -115,4 +116,10 @@ public interface IBusProjectTeamService extends IService { * @return 项目班组分页对象视图 */ Page getVoPage(Page projectTeamPage); + + + List getByUserId(Long userId,Long projectId); + + + Boolean deleteUserId(Long id); } 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 99176385..e32c63ff 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 @@ -25,6 +25,7 @@ import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; import org.dromara.project.domain.enums.BusProjectTeamMemberPostEnum; import org.dromara.project.domain.vo.projectteam.BusForemanVo; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.mapper.BusProjectTeamMapper; @@ -429,4 +430,30 @@ public class BusProjectTeamServiceImpl extends ServiceImpl getByUserId(Long userId,Long projectId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + + lqw.eq(BusProjectTeam::getUserId, userId); + lqw.eq(BusProjectTeam::getProjectId, projectId); + List projectTeamList = list(lqw); + if (CollUtil.isNotEmpty(projectTeamList)) { + return projectTeamList.stream().map(projectTeam -> { + BusProjectTeamAppVo projectTeamAppVo = new BusProjectTeamAppVo(); + BeanUtils.copyProperties(projectTeam, projectTeamAppVo); + return projectTeamAppVo; + }).toList(); + } + return List.of(); + } + + @Override + public Boolean deleteUserId(Long id) { + int update = baseMapper.update(Wrappers.lambdaUpdate() + .eq(BusProjectTeam::getId, id) + .set(BusProjectTeam::getUserId, null)); + return update>0; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java index a919682c..7aed0254 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java @@ -16,6 +16,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.project.constant.BusProjectConstant; import org.dromara.project.domain.BusProject; +import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.BusProjectTeamMember; import org.dromara.project.domain.BusUserProjectRelevancy; import org.dromara.project.domain.dto.project.BusProjectBatchByProjectListReq; @@ -27,6 +28,7 @@ import org.dromara.project.domain.vo.userprojectrelevancy.BusUserProjectRelevanc import org.dromara.project.mapper.BusUserProjectRelevancyMapper; import org.dromara.project.service.IBusProjectService; import org.dromara.project.service.IBusProjectTeamMemberService; +import org.dromara.project.service.IBusProjectTeamService; import org.dromara.project.service.IBusUserProjectRelevancyService; import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; @@ -58,6 +60,10 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl teamMap = projectMemberService.lambdaQuery().eq(BusProjectTeamMember::getMemberId, userId).list() .stream().collect(Collectors.toMap(BusProjectTeamMember::getProjectId, BusProjectTeamMember::getTeamId)); - + Collection values = teamMap.values(); + Map teamList; + if(CollUtil.isEmpty(values)){ + teamList = new HashMap<>(); + }else { + teamList = teamService.lambdaQuery() + .select(BusProjectTeam::getId, BusProjectTeam::getTeamName) + .in(BusProjectTeam::getId, values) + .list() + .stream().collect(Collectors.toMap(BusProjectTeam::getId, BusProjectTeam::getTeamName)); + } // 获取封装 return list.stream() @@ -373,10 +389,10 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl updateUserAppType(@PathVariable("userId") Long userId, - @PathVariable("appUserType") String appUserType) { - return R.ok(userService.updateAppUserType(userId, appUserType)); + @PathVariable("appUserType") String appUserType, + @RequestBody List projectIds) { + return R.ok(userService.updateAppUserType(userId, appUserType,projectIds)); } + /** + * 查询用户是否有项目 + */ + @SaCheckPermission("system:user:edit") + @GetMapping("/queryProjectRelevancy/{userId}") + public R queryProjectRelevancy(@PathVariable("userId") Long userId) { + return R.ok(userService.queryProjectRelevancy(userId)); + } + + /** + * 获取所有父项目 + */ + @SaCheckPermission("system:user:edit") + @GetMapping("/projectList") + public R> projectList() { + List list = projectService.list(Wrappers.lambdaQuery(BusProject.class) + .select(BusProject::getId, BusProject::getProjectName) + .eq(BusProject::getPId, 0)); + return R.ok(list); + } + + + /** + * 获取分包用户列表 + */ + @SaCheckPermission("system:user:fbList") + @GetMapping("/fbList") + public TableDataInfo fbList(FbUserListDto dto, PageQuery pageQuery) { + return userService.selectPageFbUserList(dto, pageQuery); + } + /** + * 获取分包单位列表 + */ + @SaCheckPermission("system:user:updateFb") + @PutMapping("/{projectId}") + public R> getFbList(@PathVariable("projectId") Long projectId) { + List list = contractorService.list(Wrappers.lambdaQuery() + .select(SubContractor::getId, SubContractor::getName) + .eq(SubContractor::getProjectId, projectId) + ); + return R.ok(list); + } + + /** + * 修改分包单位 + */ + @SaCheckPermission("system:user:updateFb") + @PutMapping("/{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/SysUser.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java index 996d35a1..dee2260c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java @@ -110,6 +110,12 @@ public class SysUser extends TenantEntity { private String appUserType; + /** + * 分包公司Id + */ + private Long contractorId; + + public SysUser(Long userId) { this.userId = userId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java index 19025feb..34ccc8de 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java @@ -113,6 +113,9 @@ public class SysUserBo extends BaseEntity { */ private Long roleId; + + private Long contractorId; + /** * 排除不查询的用户(工作流用) */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/dto/FbUserListDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/dto/FbUserListDto.java new file mode 100644 index 00000000..e19ba5f7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/dto/FbUserListDto.java @@ -0,0 +1,15 @@ +package org.dromara.system.domain.dto; + +import lombok.Data; + +@Data +public class FbUserListDto { + + private String userName; + + private String nickName; + + private String phonenumber; + + private Long projectId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java index db5a6e5b..0d3e7d8c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java @@ -152,4 +152,14 @@ public class SysUserVo implements Serializable { private String appUserType; + /** + * 分包 + */ + private Long contractorId; + + /** + * 分包单位名称 + */ + private String contractorName; + } 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 16ecfda9..45234c33 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 @@ -133,4 +133,8 @@ public interface SysUserMapper extends BaseMapperPlus { @DataColumn(key = "userName", value = "u.user_id") }) List selectVoListByDept(@Param(Constants.WRAPPER) Wrapper sysUserWrapper); + + + + List selectUserListByAppUserType(@Param("appUserType") String appUserType, @Param("projectId")Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserRoleMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserRoleMapper.java index 83403480..04c06170 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserRoleMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserRoleMapper.java @@ -1,5 +1,7 @@ package org.dromara.system.mapper; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysUserRole; @@ -20,4 +22,9 @@ public interface SysUserRoleMapper extends BaseMapperPlus selectUserIdsByRoleId(Long roleId); + @Delete("DELETE sur FROM sys_user_role sur \n" + + "INNER JOIN sys_role sr ON sur.role_id = sr.role_id \n" + + "WHERE sur.user_id = #{userId} " + + " AND sr.role_source = '2' ") + void deleteAppRoleByUserId(@Param("userId") Long userId); } 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 74a13246..4826607e 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 @@ -4,9 +4,11 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SysUserBo; +import org.dromara.system.domain.dto.FbUserListDto; import org.dromara.system.domain.dto.role.SysRoleProjectDto; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; import java.util.Map; @@ -21,6 +23,8 @@ public interface ISysUserService { TableDataInfo selectPageUserList(SysUserBo user, PageQuery pageQuery); + TableDataInfo selectPageFbUserList(FbUserListDto user, PageQuery pageQuery); + /** * 根据条件分页查询用户列表 * @@ -263,7 +267,13 @@ public interface ISysUserService { Long save(SysUser sysUser); - Boolean updateAppUserType(Long userId,String appUserType); + Boolean updateAppUserType(Long userId,String appUserType,List projectIds); List selectUserListByDeptByType(SysUserBo sysUserBo); + + Boolean queryProjectRelevancy(Long userId); + + List selectUserListByAppUserType(String appUserType,Long projectId); + + Boolean updateFb(Long userId,Long contractorId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index fa2dfae8..00739190 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -84,7 +84,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { QueryWrapper wrapper = Wrappers.query(); wrapper.eq("r.del_flag", SystemConstants.NORMAL) .eq(StringUtils.isNotBlank(bo.getRoleSource()), "r.role_source", bo.getRoleSource()) - .notIn("2".equals(bo.getRoleSource()), "r.role_id", Arrays.asList( 2L,3L,4L)) + .notIn("2".equals(bo.getRoleSource()), "r.role_id", Arrays.asList( 2L,3L,4L,5L)) //.eq(ObjectUtil.isNotNull(bo.getDeptId()), "r.dept_id", bo.getDeptId()) .eq(ObjectUtil.isNotNull(bo.getIsSpecial()), "r.is_special", bo.getIsSpecial()) .eq(ObjectUtil.isNotNull(bo.getRoleId()), "r.role_id", bo.getRoleId()) 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 deedec49..552456ce 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 @@ -2,6 +2,7 @@ package org.dromara.system.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; @@ -24,11 +25,15 @@ 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.domain.SubContractor; import org.dromara.contractor.service.ISubConstructionUserService; +import org.dromara.contractor.service.ISubContractorService; import org.dromara.project.domain.BusUserProjectRelevancy; import org.dromara.project.service.IBusUserProjectRelevancyService; import org.dromara.system.domain.*; import org.dromara.system.domain.bo.SysUserBo; +import org.dromara.system.domain.dto.FbUserListDto; import org.dromara.system.domain.dto.role.SysRoleProjectDto; import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysRoleVo; @@ -70,6 +75,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { private final ISubConstructionUserService constructionUserService; + private final ISubContractorService contractorService; + @Lazy @Resource private ISysUserFileService userFileService; @@ -99,6 +106,34 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return TableDataInfo.build(page); } + @Override + public TableDataInfo selectPageFbUserList(FbUserListDto dto, PageQuery pageQuery) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + + wrapper.eq(SysUser::getAppUserType, "2"); + wrapper.like(StringUtils.isNotBlank(dto.getUserName()),SysUser::getUserName, dto.getUserName()); + wrapper.like(StringUtils.isNotBlank(dto.getPhonenumber()),SysUser::getPhonenumber, dto.getPhonenumber()); + wrapper.like(StringUtils.isNotBlank(dto.getNickName()),SysUser::getNickName, dto.getNickName()); + wrapper.exists("SELECT 1 FROM bus_user_project_relevancy " + + "WHERE bus_user_project_relevancy.user_id = u.user_id " + + "AND project_id = {0}", dto.getProjectId()); + Page page = baseMapper.selectPageUserList(pageQuery.build(), wrapper); + List userVoList = page.getRecords(); + + if (CollUtil.isNotEmpty(userVoList)) { + + List list1 = userVoList.stream().map(SysUserVo::getContractorId).toList(); + List subContractors = contractorService.listByIds(list1); + Map collect = subContractors.stream().collect(Collectors.toMap(SubContractor::getId, SubContractor::getName)); + userVoList.forEach(userVo -> { + Long contractorId = userVo.getContractorId(); + userVo.setContractorName(collect.get(contractorId)); + }); + page.setRecords(userVoList); + } + return TableDataInfo.build(page); + } + /** * 根据条件分页查询用户列表 * @@ -115,7 +150,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { QueryWrapper wrapper = Wrappers.query(); wrapper.isNotNull("u.dept_id"); wrapper.eq("u.del_flag", SystemConstants.NORMAL) - .eq(StringUtils.isNotBlank(user.getUserType()),"u.user_type",user.getUserType()) + .eq(StringUtils.isNotBlank(user.getAppUserType()), "u.app_user_type", user.getAppUserType()) + .eq(StringUtils.isNotBlank(user.getUserType()), "u.user_type", user.getUserType()) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) @@ -604,7 +640,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { if (CollUtil.isEmpty(roles)) { throw new ServiceException("没有权限访问角色的数据"); } - checkAppRole(userId,roleList); + checkAppRole(userId, roleList); if (clear) { // 删除用户与角色关联 @@ -651,10 +687,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { private void checkAppRole(Long userId, List roleList) { SysUser sysUser = baseMapper.selectById(userId); - if(UserType.APP_USER.getUserType().equals(sysUser.getUserType())){ + if (UserType.APP_USER.getUserType().equals(sysUser.getUserType())) { List sysRoleList = roleMapper.selectBatchIds(roleList); Set collect = sysRoleList.stream().filter(role -> "2".equals(role.getRoleSource())).collect(Collectors.toSet()); - if(collect.isEmpty()){ + if (collect.isEmpty()) { throw new ServiceException("app用户至少需要一个APP角色"); } } @@ -762,6 +798,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { /** * 根据部门 ID 获取用户 ID -> 名称 映射 + * * @param deptId * @return */ @@ -783,6 +820,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { /** * 获取指定部门的用户名称列表(用于 Excel 下拉框) + * * @param deptId * @return */ @@ -828,18 +866,61 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override @Transactional(rollbackFor = Exception.class) - public Boolean updateAppUserType(Long userId, String appUserType) { - //直接添加权限 app用户类型 0-施工人员 1-管理人员 2-分包人员 -// if("1".equals(appUserType)){ -// //清空app角色 -// userRoleMapper.delete(new LambdaQueryWrapper() -// .eq(SysUserRole::getUserId, userId)); -// //添加管理人员角色 -// -// } + public Boolean updateAppUserType(Long userId, String appUserType,List projectIds) { + //app用户类型 0-施工人员 1-管理人员 2-分包人员 + SysUser sysUser = baseMapper.selectById(userId); + if (sysUser == null) { + throw new ServiceException("用户不存在!"); + } + Long contractorId = null; + SubConstructionUser constructionUser = constructionUserService.lambdaQuery() + .eq(SubConstructionUser::getSysUserId, userId) + .one(); + if (constructionUser != null) { + if (constructionUser.getTeamId() != null) { + throw new ServiceException("请先退出班组!"); + } + constructionUserService.update(Wrappers.lambdaUpdate() + .eq(SubConstructionUser::getId, constructionUser.getId()) + .set(SubConstructionUser::getUserRole, appUserType) + ); + contractorId = constructionUser.getContractorId(); + } + String oldType = sysUser.getAppUserType(); + if ("0".equals(oldType)) { //施工人员->管理人员/分包人员 + //清除app所有角色 + userRoleMapper.deleteAppRoleByUserId(userId); + }else { //管理人员 <-> 施工人员 + //清除所有角色 + userRoleMapper.delete(new LambdaQueryWrapper() + .eq(SysUserRole::getUserId, userId)); + } + //查询所有关联项目 + List list = userProjectRelevancyService.list(Wrappers.lambdaQuery() + .eq(BusUserProjectRelevancy::getUserId, userId)); + List projects = list.stream().map(BusUserProjectRelevancy::getProjectId).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(projects)){ + if(CollectionUtil.isEmpty(projectIds)){ + throw new ServiceException("请选择项目!"); + } + projects = projectIds; + } + + Long roleId = "1".equals(appUserType)?4L:5L; + ArrayList sysUserRoles = new ArrayList<>(); + for (Long project : projects) { + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setProjectId(project); + sysUserRole.setUserId(userId); + sysUserRole.setRoleId(roleId); + sysUserRoles.add(sysUserRole); + } + userRoleMapper.insertBatch(sysUserRoles); + return baseMapper.update(null, new LambdaUpdateWrapper() .set(SysUser::getAppUserType, appUserType) + .set(contractorId!=null,SysUser::getContractorId, contractorId) .eq(SysUser::getUserId, userId)) > 0; } @@ -848,6 +929,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return baseMapper.selectVoListByDept(this.buildQueryWrapper(sysUserBo)); } + @Override + public Boolean queryProjectRelevancy(Long userId) { + List list = userProjectRelevancyService.list(Wrappers.lambdaQuery() + .eq(BusUserProjectRelevancy::getUserId, userId)); + return CollectionUtil.isNotEmpty(list); + } + + @Override + public List selectUserListByAppUserType(String appUserType,Long projectId) { + return baseMapper.selectUserListByAppUserType(appUserType,projectId); + + } + + /** * 通过用户ID查询用户账户 * @@ -947,7 +1042,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { * @return 用户 */ @Override - public List selectUsersByRoleIds(List roleIds,Long projectId) { + public List selectUsersByRoleIds(List roleIds, Long projectId) { if (CollUtil.isEmpty(roleIds)) { return List.of(); } @@ -955,7 +1050,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { // 通过角色ID获取用户角色信息 List userRoles = userRoleMapper.selectList( new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds) - .eq(projectId!=null,SysUserRole::getProjectId, projectId) + .eq(projectId != null, SysUserRole::getProjectId, projectId) ); // 获取用户ID列表 @@ -1083,13 +1178,28 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public String selectAvatarById(Long userId) { SysUser sysUsers = baseMapper.selectById(userId); - if(sysUsers == null || sysUsers.getAvatar() == null){ - return null; - } + if (sysUsers == null || sysUsers.getAvatar() == null) { + return null; + } SysOss sysOss = ossMapper.selectById(sysUsers.getAvatar()); - if(sysOss == null){ + if (sysOss == null) { return null; } return sysOss.getUrl(); } + + @Override + public Boolean updateFb(Long userId,Long contractorId) { + SysUser sysUser = baseMapper.selectById(userId); + sysUser.setContractorId(contractorId); + + SubConstructionUser constructionUser = constructionUserService.lambdaQuery() + .eq(SubConstructionUser::getSysUserId, userId) + .one(); + if(constructionUser != null){ + constructionUser.setContractorId(contractorId); + constructionUserService.updateById(constructionUser); + } + return baseMapper.updateById(sysUser)>0; + } } 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 cccc67ee..e9007e00 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 @@ -18,7 +18,7 @@ u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, - u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.app_user_type + u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.app_user_type,u.contractor_id from sys_user u ${ew.getCustomSqlSegment} @@ -122,5 +122,22 @@ ${ew.getCustomSqlSegment} + +