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 a2d4a625..c425c959 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 @@ -371,4 +371,14 @@ public class AdminUserController extends ControllerBase { emailService.sendEmail(request.getEmail(), subject, content); return ApiResult.success(); } + + /** + * 搜索账号 + * @param request 请求参数 + */ + @PostMapping("searchAccountNew") + @ApiMark(moduleName = "账号管理", apiName = "搜索账号(新)") + public ApiResult> searchAccountNew(@Valid @RequestBody SearchAccountRequest request) { + return ApiResult.success(adminUserService.searchNew(request)); + } } 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 17ba8271..34b74b69 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 @@ -200,6 +200,7 @@ public class AppUserController extends ControllerBase { * 更新代理商账号 * @param request 请求参数 */ + @Transactional @PostMapping("updateAppUser") @MethodInfoMark(value = "更新代理商账号", menuName = "代理商管理") @ApiMark(moduleName = "代理商管理", apiName = "更新代理商账号") @@ -224,6 +225,8 @@ public class AppUserController extends ControllerBase { .setAreaId(request.getAreaId()) .setTitleId(request.getTitleId()) .setCompanyId(StrUtil.join(",", request.getCompanyIds())) + .setDepartmentId(request.getDepartmentId()) + .setRegionTypeId(request.getRegionTypeId()) .setUpdateBy(AdminUserUtil.getUserName()) .setUpdateTime(LocalDateTime.now()); if (!Objects.equals(user.getState(), UserState.ToBeActivated.getState()) && Objects.nonNull(request.getEnable())) { @@ -271,11 +274,20 @@ public class AppUserController extends ControllerBase { .setLanguageCode(request.getLanguageCode()) .setTitleId(request.getTitleId()) .setCompanyId(StrUtil.join(",", request.getCompanyIds())) + .setDepartmentId(request.getDepartmentId()) + .setRegionTypeId(request.getRegionTypeId()) .setUpdateBy(AdminUserUtil.getUserName()) .setUpdateTime(LocalDateTime.now()); if (!Objects.equals(user.getState(), UserState.ToBeActivated.getState()) && Objects.nonNull(request.getEnable())) { user.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState()); } + if (Objects.equals(user.getRegionTypeId(), request.getRegionTypeId())) { + List children = appUserService.getChildren(user); + appUserService.lambdaUpdate() + .set(AppUser::getRegionTypeId, request.getRegionTypeId()) + .in(AppUser::getId, children.stream().map(AppUser::getId).collect(Collectors.toList())) + .update(); + } appUserService.updateById(user); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/CustomerDTO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/CustomerDTO.java index b1cadbca..932c9ee0 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/CustomerDTO.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/CustomerDTO.java @@ -83,4 +83,10 @@ public class CustomerDTO { * 区域列表 */ private List areaList; + + /** + * 是否报价对象 + */ + @NotNull(message = "是否报价对象不能为空") + private Boolean quotationUse; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/PageData.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/PageData.java index 2b21fda6..eea9f8a2 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/PageData.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/PageData.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.common.pojo; +import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @@ -26,6 +27,10 @@ public class PageData implements Serializable { //总页数 private int totalPages; + public static PageData empty() { + return new PageData<>(); + } + public int getTotalPages() { return total % pageSize == 0 ? total / pageSize : total / pageSize + 1; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ApproveAppUserApplyforRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ApproveAppUserApplyforRequest.java index 08540aa3..2b7661d9 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ApproveAppUserApplyforRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ApproveAppUserApplyforRequest.java @@ -3,6 +3,8 @@ package com.nflg.mobilebroken.common.pojo.request; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import javax.validation.constraints.NotNull; + @Data public class ApproveAppUserApplyforRequest { @@ -13,4 +15,10 @@ public class ApproveAppUserApplyforRequest { @JsonIgnore private String password; + + /** + * 部门id + */ + @NotNull(message = "部门不能为空") + private Long departmentId; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserAddRequest.java index 07dd285f..4986ca4b 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserAddRequest.java @@ -6,6 +6,7 @@ import lombok.Data; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.util.List; @Data @@ -45,4 +46,16 @@ public class PrimaryAppUserAddRequest { //职位id private Integer titleId; + + /** + * 部门id + */ + @NotNull(message = "部门不能为空") + private Long departmentId; + + /** + * 地域类型,字典id + */ + @NotNull(message = "地域类型不能为空") + private Integer regionTypeId; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java index a6bcf870..00811883 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java @@ -6,6 +6,7 @@ import lombok.experimental.Accessors; import java.time.LocalDateTime; import java.util.Collection; +import java.util.List; @Data @Accessors(chain = true) @@ -81,4 +82,6 @@ public class AdminUserVO { */ @JsonProperty("isGongfu") private boolean isGongfu; + + private List children; } 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 b28f308e..bc7f25e8 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 @@ -118,6 +118,16 @@ public class AppUserForAdminVO { */ private String customerName; + /** + * 部门id + */ + private Long departmentId; + + /** + * 地域类型,字典id + */ + private Integer regionTypeId; + //下级账号 private List children=new ArrayList<>(); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java index db270253..ab6dd52a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java @@ -1,6 +1,7 @@ package com.nflg.mobilebroken.repository.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Getter; @@ -149,4 +150,15 @@ public class AppUser implements Serializable { * 客户名称,仅终端用户使用 */ private String customerName; + + /** + * 地域类型,字典id + */ + @TableField("region_type_id") + private Integer regionTypeId; + + /** + * 部门id + */ + private Long departmentId; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseCustomer.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseCustomer.java index dc8eeb16..1ef3f9db 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseCustomer.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TBaseCustomer.java @@ -132,4 +132,9 @@ public class TBaseCustomer implements Serializable { * 是否删除 0-否 1-是 */ private Integer delIs; + + /** + * 是否报价对象 + */ + private Boolean quotationUse; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java index 27e6f063..eb4a560e 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java @@ -60,4 +60,6 @@ public interface IAdminUserService extends IService { List getGongfuHandlers(); List getGongfuTickerMangagers(); + + List searchNew(SearchAccountRequest request); } 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 8f8fe773..190f74da 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 @@ -1,6 +1,7 @@ package com.nflg.mobilebroken.repository.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -37,7 +38,6 @@ import java.util.stream.Collectors; *

* 后台-用户 服务实现类 *

- * * @author 曹鹏飞 * @since 2025-01-03 */ @@ -418,4 +418,143 @@ public class AdminUserServiceImpl extends ServiceImpl searchNew(SearchAccountRequest request) { + List departments = departmentService.lambdaQuery() + .select(TBaseDepartment::getId, TBaseDepartment::getDeptName, TBaseDepartment::getDeptParentId) + .eq(TBaseDepartment::getDataValidStatus, 1) + .list(); + List positions = positionService.list(); + List roleMaps = adminUserRoleMapService.lambdaQuery().list(); + List roles = roleService.lambdaQuery().list(); + if (Objects.nonNull(request.getDepartmentId())) { + TBaseDepartment department = departments.stream() + .filter(d -> Objects.equals(d.getId(), request.getDepartmentId())) + .findFirst() + .orElse(null); + if (Objects.isNull(department)) { + return Collections.emptyList(); + } + List adminUsers = lambdaQuery().eq(AdminUser::getIsDel, false).list(); + List roots = adminUsers.stream() + .filter(u -> Objects.equals(u.getDepartmentId(), department.getId())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(adminUsers)) { + return Collections.emptyList(); + } + List userVOS = convert(roots, department, positions, roleMaps, roles); + getChildren(userVOS.get(0), departments, adminUsers, positions, roleMaps, roles); + for (int index = 1, size = userVOS.size(); index < size; index++) { + userVOS.get(index).setChildren(userVOS.get(0).getChildren()); + } + return userVOS; + } else { + List adminUsers = lambdaQuery() + .eq(AdminUser::getIsDel, false) + .like(StrUtil.isNotBlank(request.getLoginName()), AdminUser::getLoginName, request.getLoginName()) + .like(StrUtil.isNotBlank(request.getUserName()), AdminUser::getUserName, request.getUserName()) + .eq(request.getState() != null, AdminUser::getState, request.getState()) + .list(); + if (CollectionUtil.isEmpty(adminUsers)) { + return Collections.emptyList(); + } + List userVOS = convert1(adminUsers, departments, positions, roleMaps, roles); + Set departmentVOS = departments.stream() + .filter(d -> userVOS.stream().map(AdminUserVO::getDepartmentId).anyMatch(dt -> Objects.equals(d.getId(), dt))) + .collect(Collectors.toSet()); + departmentVOS.forEach(d -> bindParent(d, departmentVOS, departments)); + List rootDepartments = departmentVOS.stream() + .filter(d -> d.getDeptParentId() == 0) + .collect(Collectors.toList()); +// List +// rootDepartments.forEach(d -> getChildren1(d, departmentVOS, adminUsers, positions, roleMaps, roles)); + //TODO 绑定树形结构 + } + } + + private void bindParent(TBaseDepartment department, Set vos, List departments) { + Set parents = departments.stream() + .filter(d -> Objects.equals(d.getId(), department.getDeptParentId())) + .collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(parents)) { + vos.addAll(parents); + parents.forEach(p -> bindParent(p, vos, departments)); + } + } + + private List convert1(List users, List departments, List positions + , List roleMaps, List roles) { + return users.stream() + .map(user -> { + AdminUserVO vo = Convert.convert(AdminUserVO.class, user); + TBasePosition position = positions.stream() + .filter(p -> Objects.equals(p.getId(), user.getTitleId())) + .findFirst() + .orElse(null); + vo.setTitleName(Objects.nonNull(position) ? position.getPositionName() : ""); + Set rmaps = roleMaps.stream() + .filter(it -> Objects.equals(it.getUserId(), user.getId())) + .map(AdminUserRoleMap::getRoleId) + .collect(Collectors.toSet()); + vo.setRoles( + roles.stream() + .filter(r -> rmaps.contains(r.getId())) + .map(r -> new RoleSimpleVO().setId(r.getId()).setName(r.getName())) + .collect(Collectors.toSet()) + ); + TBaseDepartment department = departments.stream() + .filter(d -> Objects.equals(d.getDeptParentId(), user.getDepartmentId())) + .findFirst() + .orElse(null); + vo.setDepartmentName(Objects.isNull(department) ? "" : department.getDeptName()); + return vo; + }).collect(Collectors.toList()); + } + + private List convert(List users, TBaseDepartment department, List positions + , List roleMaps, List roles) { + return users.stream() + .map(user -> { + AdminUserVO vo = Convert.convert(AdminUserVO.class, user); + TBasePosition position = positions.stream() + .filter(p -> Objects.equals(p.getId(), user.getTitleId())) + .findFirst() + .orElse(null); + vo.setTitleName(Objects.nonNull(position) ? position.getPositionName() : ""); + Set rmaps = roleMaps.stream() + .filter(it -> Objects.equals(it.getUserId(), user.getId())) + .map(AdminUserRoleMap::getRoleId) + .collect(Collectors.toSet()); + vo.setRoles( + roles.stream() + .filter(r -> rmaps.contains(r.getId())) + .map(r -> new RoleSimpleVO().setId(r.getId()).setName(r.getName())) + .collect(Collectors.toSet()) + ); + vo.setDepartmentName(department.getDeptName()); + return vo; + }).collect(Collectors.toList()); + } + + private void getChildren(AdminUserVO user, List departments, List users + , List positions, List roleMaps, List roles) { + TBaseDepartment department = departments.stream() + .filter(d -> Objects.equals(d.getDeptParentId(), user.getDepartmentId())) + .findFirst() + .orElse(null); + if (Objects.nonNull(department)) { + List csers = users.stream() + .filter(u -> Objects.equals(u.getDepartmentId(), department.getId())) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(csers)) { + List cuserVOS = convert(csers, department, positions, roleMaps, roles); + user.setChildren(cuserVOS); + getChildren(cuserVOS.get(0), departments, users, positions, roleMaps, roles); + for (int index = 1, size = cuserVOS.size(); index < size; index++) { + cuserVOS.get(index).setChildren(cuserVOS.get(0).getChildren()); + } + } + } + } } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java index 963658e1..f3d5ca6f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java @@ -216,6 +216,8 @@ public class AppUserApplyforServiceImpl extends ServiceImpl impl .setSalesUserName(request.getSalesUserName()) .setUpdateBy(AdminUserUtil.getUserName()) .setUpdateTime(LocalDateTime.now()) + .setDepartmentId(request.getDepartmentId()) + .setRegionTypeId(request.getRegionTypeId()) .setState(UserState.ToBeActivated.getState()) .setExpireTime(LocalDate.of(LocalDateTime.now().getYear() + 1, 1, 1)); updateById(user); @@ -188,6 +190,8 @@ public class AppUserServiceImpl extends ServiceImpl impl .setIsPrimary(true) .setLanguageCode(request.getLanguageCode()) .setSalesUserName(request.getSalesUserName()) + .setDepartmentId(request.getDepartmentId()) + .setRegionTypeId(request.getRegionTypeId()) .setCreateBy(AdminUserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) .setState(UserState.ToBeActivated.getState()) diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml index fff6bdbf..29c8495c 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AppUserMapper.xml @@ -123,7 +123,8 @@ ,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.language_code,p.position_name AS + 'title',au.title_id,au.type,au.customer_name,au.department_id,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 @@ -157,7 +158,8 @@ ,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 + ,aua.language_code,p.position_name AS + 'title',aua.title_id,au.type,au.customer_name,au.department_id,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