From 2823430d31b744c2060bd88f4f801bd7f35f1145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 19 Jan 2026 09:50:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(department):=20=E5=AE=8C=E5=96=84=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=94=A8=E6=88=B7=E5=85=B3=E8=81=94=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增部门子级数据结构定义,包括DepartmentChildItemVO和DepartmentChildVO - 在AppUserForAdminVO和AppUserVO中添加部门名称字段用于显示 - 实现部门与用户的关联查询,在多处服务层添加部门名称映射 - 重构部门控制器中的删除验证逻辑,改为检查子级和管理员用户 - 添加获取部门绑定用户和子级部门的接口方法 - 优化部门启用禁用功能,支持批量操作和状态更新 - 修复用户更新时的部门变更处理逻辑,确保部门管理员状态正确更新 - 重构部门服务层的hasManager字段更新逻辑,提高数据一致性 --- .../admin/controller/AdminUserController.java | 11 +- .../admin/controller/AppUserController.java | 14 ++ .../controller/DepartmentController.java | 145 +++++++++++++----- .../common/pojo/vo/AppUserForAdminVO.java | 5 + .../common/pojo/vo/AppUserVO.java | 10 ++ .../common/pojo/vo/DepartmentChildItemVO.java | 50 ++++++ .../common/pojo/vo/DepartmentChildVO.java | 21 +++ .../common/pojo/vo/DepartmentSimpleVO.java | 10 ++ .../mapper/TBaseDepartmentMapper.java | 7 +- .../service/ITBaseDepartmentService.java | 5 + .../service/impl/AdminUserServiceImpl.java | 5 + .../impl/AppUserApplyforServiceImpl.java | 8 + .../service/impl/AppUserServiceImpl.java | 39 ++++- .../impl/TBaseDepartmentServiceImpl.java | 18 ++- .../main/resources/mapper/AppUserMapper.xml | 12 +- .../mapper/TBaseDepartmentMapper.xml | 18 +++ 16 files changed, 324 insertions(+), 54 deletions(-) create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildItemVO.java create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildVO.java diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java index 1fca14b9..db3bea74 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java @@ -17,6 +17,7 @@ import com.nflg.mobilebroken.common.pojo.vo.TitleSimpleVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.AdminUser; +import com.nflg.mobilebroken.repository.entity.TBaseDepartment; import com.nflg.mobilebroken.repository.service.IAdminUserService; import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; import com.nflg.mobilebroken.repository.service.ITBaseDepartmentService; @@ -134,8 +135,16 @@ public class AdminUserController extends ControllerBase { @PostMapping("updateAccount") @MethodInfoMark(value = "更新账号", menuName = "账号管理") @ApiMark(moduleName = "账号管理", apiName = "更新账号") - public ApiResult updateAccount(@Valid @RequestBody AccountUpdateRequest request) throws MessagingException { + public ApiResult updateAccount(@Valid @RequestBody AccountUpdateRequest request) { AdminUser user=adminUserService.getById(request.getId()); + if (!Objects.equals(user.getDepartmentId(), request.getDepartmentId())) { + departmentService.updateHasManager(user.getDepartmentId()); + departmentService.lambdaUpdate() + .set(TBaseDepartment::isHasManager, true) + .eq(TBaseDepartment::isHasManager, false) + .eq(TBaseDepartment::getId, request.getDepartmentId()) + .update(); + } user.setUserCode(request.getUserCode()) .setUserName(request.getUserName()) .setAvatar(request.getAvatar()) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java index 34b74b69..f753641a 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java @@ -15,6 +15,7 @@ import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.AppUser; import com.nflg.mobilebroken.repository.entity.AppUserApplyfor; import com.nflg.mobilebroken.repository.entity.TBaseCustomer; +import com.nflg.mobilebroken.repository.entity.TBaseDepartment; import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import com.nflg.mobilebroken.starter.service.EmailService; @@ -78,6 +79,9 @@ public class AppUserController extends ControllerBase { @Resource private IAdminMessageService adminMessageService; + @Resource + private ITBaseDepartmentService departmentService; + /** * 获取公司列表 * @param userId 用户id @@ -206,6 +210,16 @@ public class AppUserController extends ControllerBase { @ApiMark(moduleName = "代理商管理", apiName = "更新代理商账号") public ApiResult updateAppUser(@Valid @RequestBody AppUserUpdateRequest request) { AppUser user=appUserService.getById(request.getId()); + if (!Objects.equals(user.getDepartmentId(), request.getDepartmentId())) { + if (Objects.nonNull(user.getDepartmentId())) { + departmentService.updateHasManager(user.getDepartmentId()); + } + departmentService.lambdaUpdate() + .set(TBaseDepartment::isHasManager, true) + .eq(TBaseDepartment::isHasManager, false) + .eq(TBaseDepartment::getId, request.getDepartmentId()) + .update(); + } user.setExpireTime(user.getExpireTime().plusDays(1)); if (user.getIsPrimary()){ updatePrimaryAppUser(user,request); diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java index 4d8f4fd7..cbf3a1b0 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java @@ -1,18 +1,19 @@ package com.nflg.mobilebroken.admin.controller; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.util.StrUtil; import com.nflg.mobilebroken.admin.annotation.ApiMark; import com.nflg.mobilebroken.admin.constant.Constant; import com.nflg.mobilebroken.admin.pojo.dto.DepartmentDTO; import com.nflg.mobilebroken.admin.pojo.query.DepartmentQuery; import com.nflg.mobilebroken.admin.pojo.vo.BaseDepartmentVO; import com.nflg.mobilebroken.admin.service.AdminDepartmentService; -import com.nflg.mobilebroken.common.constant.STATE; -import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentChildItemVO; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentChildVO; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentSimpleVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator; import com.nflg.mobilebroken.common.util.VUtils; @@ -26,6 +27,8 @@ import javax.validation.Valid; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * 部门管理 @@ -47,9 +50,9 @@ public class DepartmentController extends ControllerBase { */ @PostMapping("getList") @ApiMark(moduleName = "部门管理", apiName = "获取部门列表") - public ApiResult> getList(@RequestBody DepartmentQuery query){ + public ApiResult> getList(@RequestBody DepartmentQuery query) { - return adminDepartmentService.getList(query); + return adminDepartmentService.getList(query); } @@ -61,7 +64,7 @@ public class DepartmentController extends ControllerBase { */ @GetMapping("getChild") @ApiMark(moduleName = "部门管理", apiName = "获取子级") - public ApiResult> getChild(@RequestParam("parentId") Long parentId ){ + public ApiResult> getChild(@RequestParam("parentId") Long parentId) { return ApiResult.success(departmentService.getChildByParentId(parentId)); } @@ -72,20 +75,19 @@ public class DepartmentController extends ControllerBase { * @return */ @PostMapping("add") - @MethodInfoMark(value = "新增" ,menuName = "部门管理") + @MethodInfoMark(value = "新增", menuName = "部门管理") @ApiMark(moduleName = "部门管理", apiName = "新增") - public ApiResult add(@Valid @RequestBody DepartmentDTO departmentDTO){ + public ApiResult add(@Valid @RequestBody DepartmentDTO departmentDTO) { // List checkCode = departmentService.lambdaQuery().eq(TBaseDepartment::getDeptCode, departmentDTO.getDeptCode()).list(); //新增 TBaseDepartment dept = Convert.convert(TBaseDepartment.class, departmentDTO); - if(null==departmentDTO.getId() || departmentDTO.getId()==0){ + if (null == departmentDTO.getId() || departmentDTO.getId() == 0) { dept.setDeptCode(UniqueSequenceGenerator.generateCode(Constant.DeptCodePrefix)); dept.setDataCreateUserNo(AdminUserUtil.getUserNo()); dept.setDataCreateUserName(AdminUserUtil.getUserName()); dept.setDataCreateTime(LocalDateTime.now()); - } - else { + } else { dept.setDataModifyUserNo(AdminUserUtil.getUserNo()); dept.setDataModifyUserName(AdminUserUtil.getUserName()); dept.setDataModifyTime(LocalDateTime.now()); @@ -101,23 +103,33 @@ public class DepartmentController extends ControllerBase { * @return */ @PostMapping("del") - @MethodInfoMark(value = "删除",menuName = "部门管理") + @MethodInfoMark(value = "删除", menuName = "部门管理") @ApiMark(moduleName = "部门管理", apiName = "删除") - public ApiResult add(@RequestBody List ids ){ + public ApiResult del(@RequestBody List ids) { VUtils.trueThrowBusinessError(CollUtil.isEmpty(ids)).throwMessage("请选择要删除的数据"); List delDepartments = departmentService.getBaseMapper().selectByIds(ids); - List hasChildDeptNames=new ArrayList<>(); - List childIds=new ArrayList<>(); - for (TBaseDepartment dept :delDepartments) { - childIds.clear(); - adminDepartmentService.getAllChildIds(dept,childIds); - if(CollUtil.isNotEmpty(childIds)){ - hasChildDeptNames.add(dept.getDeptName()); - } - } - if(CollUtil.isNotEmpty(hasChildDeptNames)){ - throw new NflgException(STATE.ParamErr, StrUtil.join(",", hasChildDeptNames)+" 存在子集,请先删除子级"); - } +// List hasChildDeptNames=new ArrayList<>(); +// List childIds=new ArrayList<>(); +// for (TBaseDepartment dept :delDepartments) { +// childIds.clear(); +// adminDepartmentService.getAllChildIds(dept,childIds); +// if(CollUtil.isNotEmpty(childIds)){ +// hasChildDeptNames.add(dept.getDeptName()); +// } +// } +// if(CollUtil.isNotEmpty(hasChildDeptNames)){ +// throw new NflgException(STATE.ParamErr, StrUtil.join(",", hasChildDeptNames)+" 存在子集,请先删除子级"); +// } + List errors = delDepartments.stream() + .filter(TBaseDepartment::isHasChild) + .collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(errors)) + .throwMessage("以下部门存在下级,不能删除:" + errors.stream().map(TBaseDepartment::getDeptName).collect(Collectors.joining(","))); + errors = delDepartments.stream() + .filter(TBaseDepartment::isHasManager) + .collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(errors)) + .throwMessage("以下部门存在用户,不能删除:" + errors.stream().map(TBaseDepartment::getDeptName).collect(Collectors.joining(","))); departmentService.del(ids); return ApiResult.success(true); } @@ -129,18 +141,18 @@ public class DepartmentController extends ControllerBase { * @return */ @PostMapping("enable") - @MethodInfoMark(value = "启用",menuName = "部门管理") + @MethodInfoMark(value = "启用", menuName = "部门管理") @ApiMark(moduleName = "部门管理", apiName = "启用") - public ApiResult enable(@RequestBody List ids ){ + public ApiResult enable(@RequestBody List ids) { VUtils.trueThrowBusinessError(CollUtil.isEmpty(ids)).throwMessage("请选择要启用的数据"); List tBaseDepartments = departmentService.getBaseMapper().selectByIds(ids); - tBaseDepartments.forEach(u->{ + tBaseDepartments.forEach(u -> { u.setDeptStatus(1); u.setDataModifyUserNo(AdminUserUtil.getUserNo()); u.setDataModifyUserName(AdminUserUtil.getUserName()); u.setDataModifyTime(LocalDateTime.now()); - }); - if(CollUtil.isNotEmpty(tBaseDepartments)){ + }); + if (CollUtil.isNotEmpty(tBaseDepartments)) { departmentService.updateBatchById(tBaseDepartments); } @@ -154,37 +166,86 @@ public class DepartmentController extends ControllerBase { * @return */ @PostMapping("disable") - @MethodInfoMark(value = "禁用",menuName = "部门管理") + @MethodInfoMark(value = "禁用", menuName = "部门管理") @ApiMark(moduleName = "部门管理", apiName = "禁用") - public ApiResult disable(@RequestBody List ids ){ + public ApiResult disable(@RequestBody List ids) { VUtils.trueThrowBusinessError(CollUtil.isEmpty(ids)).throwMessage("请选择要启用的数据"); List tBaseDepartments = departmentService.getBaseMapper().selectByIds(ids); - List childIds=new ArrayList<>(); + List childIds = new ArrayList<>(); childIds.addAll(ids); for (TBaseDepartment tBaseDepartment : tBaseDepartments) { adminDepartmentService.getAllChildIds(tBaseDepartment, childIds); } tBaseDepartments = departmentService.getBaseMapper().selectByIds(childIds); - tBaseDepartments.forEach(u->{ + tBaseDepartments.forEach(u -> { u.setDeptStatus(0); u.setDataModifyUserNo(AdminUserUtil.getUserNo()); u.setDataModifyUserName(AdminUserUtil.getUserName()); u.setDataModifyTime(LocalDateTime.now()); }); - if(CollUtil.isNotEmpty(tBaseDepartments)){ + if (CollUtil.isNotEmpty(tBaseDepartments)) { departmentService.updateBatchById(tBaseDepartments); } return ApiResult.success(true); } + /** + * 获取绑定的用户和子级部门 + * @param id 部门id + */ + @GetMapping("getChildren") + public ApiResult getChildren(@RequestParam Long id) { + List departments = departmentService.lambdaQuery().eq(TBaseDepartment::getDataValidStatus, 1).list(); + TBaseDepartment department = departments.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); + VUtils.trueThrowBusinessError(Objects.isNull(department)).throwMessage("部门不存在"); + List itemVOS = new ArrayList<>(); + List users = departmentService.getUsers(id); + if (CollUtil.isNotEmpty(users)) { + itemVOS.addAll(users); + } + List childs = departments.stream() + .filter(di -> Objects.equals(di.getDeptParentId(), id)) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(childs)) { + itemVOS.addAll( + childs.stream().map(c -> new DepartmentChildItemVO() + .setId(c.getId()) + .setName(c.getDeptName()) + .setType(0) + .setState(c.getDeptStatus()) + .setCreateBy(c.getDataCreateUserName()) + .setCreateTime(c.getDataCreateTime()) + .setUpdateBy(c.getDataModifyUserName()) + .setUpdateTime(c.getDataModifyTime()) + ) + .collect(Collectors.toList()) + ); + } + List paths = new ArrayList<>(); + paths.add(new DepartmentSimpleVO() + .setId(department.getId()) + .setName(department.getDeptName()) + ); + bindParent(paths, department, departments); + return ApiResult.success(new DepartmentChildVO() + .setPaths(paths) + .setItems(itemVOS) + ); + } - - - - - - - + private void bindParent(List paths, TBaseDepartment department, List departments) { + TBaseDepartment parent = departments.stream() + .filter(di -> Objects.equals(di.getId(), department.getDeptParentId())) + .findFirst() + .orElse(null); + if (Objects.nonNull(parent)) { + paths.add(0, new DepartmentSimpleVO() + .setId(parent.getId()) + .setName(parent.getDeptName()) + ); + bindParent(paths, parent, departments); + } + } } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java index bc7f25e8..af42cc91 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java @@ -123,6 +123,11 @@ public class AppUserForAdminVO { */ private Long departmentId; + /** + * 部门名称 + */ + private String departmentName; + /** * 地域类型,字典id */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java index be3f081e..e341a80e 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java @@ -106,4 +106,14 @@ public class AppUserVO { //平台,app或者admin private String platform="app"; + + /** + * 部门id + */ + private Long departmentId; + + /** + * 部门名称 + */ + private String departmentName; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildItemVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildItemVO.java new file mode 100644 index 00000000..51253bda --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildItemVO.java @@ -0,0 +1,50 @@ +package com.nflg.mobilebroken.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Data +@Accessors(chain = true) +public class DepartmentChildItemVO { + + private Long id; + + private String name; + + /** + * 0:部门 1:用户 + */ + private Integer type; + + /** + * 0:代理商,1:终端用户;2:内部用户 + */ + private Integer userType; + + /** + * 状态 + */ + private Integer state; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildVO.java new file mode 100644 index 00000000..55c16b00 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentChildVO.java @@ -0,0 +1,21 @@ +package com.nflg.mobilebroken.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +public class DepartmentChildVO { + + /** + * 路径 + */ + private List paths; + + /** + * 子级 + */ + private List items; +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentSimpleVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentSimpleVO.java index 69606a27..468e896b 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentSimpleVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DepartmentSimpleVO.java @@ -15,6 +15,16 @@ public class DepartmentSimpleVO { //部门名称 private String name; + /** + * 是否有下级 + */ + private boolean hasChild; + + /** + * 是否已设置管理者 + */ + private boolean hasManager; + //下级 private List children; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TBaseDepartmentMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TBaseDepartmentMapper.java index 13f44e58..d66963a8 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TBaseDepartmentMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TBaseDepartmentMapper.java @@ -1,9 +1,10 @@ package com.nflg.mobilebroken.repository.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentChildItemVO; import com.nflg.mobilebroken.repository.entity.TBaseDepartment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -21,4 +22,8 @@ public interface TBaseDepartmentMapper extends BaseMapper { Page selectListByPage(@Param("page") Page page,@Param("query") PageBaseQuery query ); void del(@Param("ids") List ids); + + void updateHasManager(Long departmentId); + + List getUsers(Long id); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITBaseDepartmentService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITBaseDepartmentService.java index fb96473d..1fa9ab95 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITBaseDepartmentService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITBaseDepartmentService.java @@ -3,6 +3,7 @@ package com.nflg.mobilebroken.repository.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentChildItemVO; import com.nflg.mobilebroken.common.pojo.vo.DepartmentSimpleVO; import com.nflg.mobilebroken.repository.entity.TBaseDepartment; import org.apache.ibatis.annotations.Param; @@ -34,4 +35,8 @@ public interface ITBaseDepartmentService extends IService { Set getAllChildrenIds(Long departmentId); + + void updateHasManager(Long departmentId); + + List getUsers(Long id); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index ab354682..b668488f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -120,6 +120,11 @@ public class AdminUserServiceImpl extends ServiceImpl impl @Resource private ITBaseAreaService baseAreaService; + @Resource + private ITBaseDepartmentService departmentService; + @Override public AppUser getUser(String userName, String password) { AppUser user = lambdaQuery() @@ -198,6 +201,11 @@ public class AppUserServiceImpl extends ServiceImpl impl .setExpireTime(LocalDate.of(LocalDateTime.now().getYear() + 1, 1, 1)); save(user); } + departmentService.lambdaUpdate() + .set(TBaseDepartment::isHasManager, true) + .eq(TBaseDepartment::isHasManager, false) + .eq(TBaseDepartment::getId, user.getDepartmentId()) + .update(); return user; } @@ -239,12 +247,13 @@ public class AppUserServiceImpl extends ServiceImpl impl AppUser primaryUser = getById(id); List companyIds = Arrays.stream(primaryUser.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()); List datas = new ArrayList<>(); + List departments = departmentService.list(); for (Integer companyId : companyIds) { TBaseCustomer customer = customerService.getById(companyId); CompanyVO companyVO = new CompanyVO() .setId(customer.getId()) .setName(customer.getAgencyCompanyName()) - .setUsers(getByCompanyId(companyId)); + .setUsers(getByCompanyId(companyId, departments)); datas.add(companyVO); } return datas; @@ -423,6 +432,7 @@ public class AppUserServiceImpl extends ServiceImpl impl List subs = datas.stream() .filter(d -> Objects.nonNull(d.getIsPrimary()) && !d.getIsPrimary()) .collect(Collectors.toList()); + List departments = departmentService.list(); subs.forEach(d -> { AppUserForAdminVO primary = primarys.stream() .filter(p -> Objects.nonNull(p.getIsPrimary()) && Arrays.stream(p.getCompanyId().split(",")).anyMatch(c -> c.equals(d.getCompanyId()))) @@ -457,7 +467,14 @@ public class AppUserServiceImpl extends ServiceImpl impl .setSalesUserName(appUser.getSalesUserName()) .setTitleId(appUser.getTitleId()) .setTitle(positionService.getById(appUser.getTitleId()).getPositionName()) - .setState(appUser.getExpireTime().isAfter(LocalDate.now()) ? 1 : 2); + .setState(appUser.getExpireTime().isAfter(LocalDate.now()) ? 1 : 2) + .setDepartmentId(appUser.getDepartmentId()) + .setDepartmentName(departments.stream() + .filter(dept -> dept.getId().equals(appUser.getDepartmentId())) + .findFirst() + .map(TBaseDepartment::getDeptName) + .orElse("") + ); AppUserApplyfor applyFor = appUserApplyforService.lambdaQuery() .eq(AppUserApplyfor::getUserId, appUser.getId()) .eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()) @@ -748,12 +765,13 @@ public class AppUserServiceImpl extends ServiceImpl impl .collect(Collectors.toSet()); companyIds.addAll(userCompanyIds); } + List departments = departmentService.list(); companyIds.forEach(id -> { TBaseCustomer customer = customerService.getById(id); CompanyVO companyVO = new CompanyVO() .setId(customer.getId()) .setName(customer.getAgencyCompanyName()) - .setUsers(getByCompanyId(id)); + .setUsers(getByCompanyId(id, departments)); datas.add(companyVO); }); return datas; @@ -834,7 +852,7 @@ public class AppUserServiceImpl extends ServiceImpl impl return getBaseMapper().selectOne(queryWrapper); } - private List getByCompanyId(Integer companyId) { + private List getByCompanyId(Integer companyId, List departments) { return lambdaQuery() .eq(AppUser::getIsDel, false) .eq(AppUser::getCompanyId, companyId.toString()) @@ -842,7 +860,18 @@ public class AppUserServiceImpl extends ServiceImpl impl .eq(AppUser::getIsPrimary, false) .list() .stream() - .map(u -> new AppUserVO().setId(u.getId()).setName(u.getName())) + .map(u -> new AppUserVO() + .setId(u.getId()) + .setName(u.getName()) + .setDepartmentId(u.getDepartmentId()) + .setDepartmentName( + departments.stream() + .filter(d -> Objects.equals(d.getId(), u.getDepartmentId())) + .findFirst() + .map(TBaseDepartment::getDeptName) + .orElse("") + ) + ) .collect(Collectors.toList()); } } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TBaseDepartmentServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TBaseDepartmentServiceImpl.java index c968c44c..4e5ea0da 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TBaseDepartmentServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TBaseDepartmentServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery; +import com.nflg.mobilebroken.common.pojo.vo.DepartmentChildItemVO; import com.nflg.mobilebroken.common.pojo.vo.DepartmentSimpleVO; import com.nflg.mobilebroken.repository.entity.TBaseDepartment; import com.nflg.mobilebroken.repository.mapper.TBaseDepartmentMapper; @@ -72,6 +73,16 @@ public class TBaseDepartmentServiceImpl extends ServiceImpl getUsers(Long id) { + return baseMapper.getUsers(id); + } + private void getChildrenIds(Set ids, List departments, Long departmentId) { Set cids = departments.stream() .filter(d -> Objects.equals(d.getDeptParentId(), departmentId)) @@ -96,7 +107,12 @@ public class TBaseDepartmentServiceImpl extends ServiceImpl convert(List datas) { return datas.stream() - .map(d -> new DepartmentSimpleVO().setId(d.getId()).setName(d.getDeptName())) + .map(d -> new DepartmentSimpleVO() + .setId(d.getId()) + .setName(d.getDeptName()) + .setHasChild(d.isHasChild()) + .setHasManager(d.isHasManager()) + ) .collect(Collectors.toList()); } } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml index 29c8495c..bdf3efd6 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml @@ -123,12 +123,14 @@ ,au.expire_time,IF(aua.id IS NOT NULL,0 ,IF(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00') < au.expire_time,1,2)) AS 'state',au.create_by ,au.create_time,au.update_by,au.update_time,au.last_login_time,au.is_primary,au.company_id,au.phone,au.area_id - ,au.language_code,p.position_name AS - 'title',au.title_id,au.type,au.customer_name,au.department_id,au.region_type_id + ,au.language_code,p.position_name AS 'title',au.title_id,au.type,au.customer_name,au.department_id,d.dept_name + as 'departmentName' + ,au.region_type_id FROM app_user au LEFT JOIN app_area aa ON au.area_id=aa.id LEFT JOIN app_user_applyfor aua ON aua.user_id=au.id AND aua.state=0 LEFT JOIN t_base_position p ON au.title_id=p.id + LEFT JOIN t_base_department d ON au.department_id=d.id WHERE au.is_del=0 AND au.login_name LIKE concat('%', #{loginName}, '%') @@ -158,12 +160,14 @@ ,IF(aua.is_primary,fun_getPrimaryUserArea(aua.company_id),aa.`name`) AS 'areaName' ,null AS 'userState',null AS 'expireTime',0 AS 'state',au.name AS 'createBy',aua.create_time,null AS 'updateBy' ,null AS 'updateTime',null AS 'lastLoginTime',aua.is_primary,aua.company_id,aua.user_phone AS 'phone',aua.area_id - ,aua.language_code,p.position_name AS - 'title',aua.title_id,au.type,au.customer_name,au.department_id,au.region_type_id + ,aua.language_code,p.position_name AS 'title',aua.title_id,au.type,au.customer_name,au.department_id,d.dept_name + as 'departmentName' + ,au.region_type_id FROM app_user_applyfor aua LEFT JOIN app_user au ON au.id=aua.create_by LEFT JOIN app_area aa ON aua.area_id=aa.id LEFT JOIN t_base_position p ON aua.title_id=p.id + LEFT JOIN t_base_department d ON au.department_id=d.id WHERE aua.type=0 AND aua.state=0 AND aua.user_email LIKE concat('%', #{loginName}, '%') diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml index af8b6f03..d565e14c 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml @@ -18,6 +18,19 @@ + delete from t_base_department where id in @@ -25,4 +38,9 @@ #{item} + + UPDATE t_base_department p + SET has_manager=EXISTS(SELECT * FROM v_all_user WHERE department_id = p.id) + WHERE id = #{departmentId} +