|
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.ydtech.constants.SysConstants;
|
|
import com.ydtech.constants.SysConstants;
|
|
@@ -15,11 +16,9 @@ import com.ydtech.modules.admin.constants.RoleConstants;
|
|
|
import com.ydtech.modules.admin.dao.SysUserMapper;
|
|
import com.ydtech.modules.admin.dao.SysUserMapper;
|
|
|
import com.ydtech.modules.admin.model.*;
|
|
import com.ydtech.modules.admin.model.*;
|
|
|
import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
|
|
import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
|
|
|
|
|
+import com.ydtech.modules.admin.model.dto.QuUserNumDto;
|
|
|
import com.ydtech.modules.admin.model.dto.SysUserDto;
|
|
import com.ydtech.modules.admin.model.dto.SysUserDto;
|
|
|
-import com.ydtech.modules.admin.model.vo.SysUser2Vo;
|
|
|
|
|
-import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
|
|
|
|
|
-import com.ydtech.modules.admin.model.vo.SysUserInternalVO;
|
|
|
|
|
-import com.ydtech.modules.admin.model.vo.SysUserVO;
|
|
|
|
|
|
|
+import com.ydtech.modules.admin.model.vo.*;
|
|
|
import com.ydtech.modules.admin.service.*;
|
|
import com.ydtech.modules.admin.service.*;
|
|
|
import com.ydtech.modules.base.model.dto.PageDto;
|
|
import com.ydtech.modules.base.model.dto.PageDto;
|
|
|
import com.ydtech.modules.base.model.vo.PageVo;
|
|
import com.ydtech.modules.base.model.vo.PageVo;
|
|
@@ -66,6 +65,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private EsmUserImageService esmUserImageService;
|
|
private EsmUserImageService esmUserImageService;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private SysAreaService sysAreaService;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
|
|
public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
|
|
@@ -700,6 +701,249 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|
|
lqw.eq(SysUser::getDeptId, deptId);
|
|
lqw.eq(SysUser::getDeptId, deptId);
|
|
|
return list(lqw);
|
|
return list(lqw);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<SysUser> findTree() {
|
|
|
|
|
+ //获取所有被领导的人ID
|
|
|
|
|
+ List<SysUser> list1 = lambdaQuery().isNotNull(SysUser::getLeaderId).list();
|
|
|
|
|
+ List<String> collect1 = list1.stream().map(SysUser::getLeaderId).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ List<SysUser> sysUsers = new ArrayList<>();
|
|
|
|
|
+ List<SysUser> list2 = lambdaQuery().in(SysUser::getId, collect1).list();
|
|
|
|
|
+ for (SysUser sysUser : list2) {
|
|
|
|
|
+ if (Objects.isNull(sysUser.getLeaderId())) {
|
|
|
|
|
+ sysUsers.add(sysUser);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ for (SysUser sysUser : sysUsers) {
|
|
|
|
|
+ List<SysUser> chils = new ArrayList<>();
|
|
|
|
|
+ for (SysUser user : list2) {
|
|
|
|
|
+ if (sysUser.getId().equals(user.getLeaderId())) {
|
|
|
|
|
+ chils.add(user);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ sysUser.setChildren(chils);
|
|
|
|
|
+ }
|
|
|
|
|
+ return sysUsers;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据部门ID查询后台用户列表。
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param deptId 部门ID,用于筛选指定部门的用户。
|
|
|
|
|
+ * @return 返回一个SysUser类型的列表,包含指定部门的所有后台用户。
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<SysUser> findBackListByDeptId(String deptId) {
|
|
|
|
|
+ return baseMapper.findBackListByDeptId(deptId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询用户订单数量进行区域统计信息
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
|
|
|
|
|
+ * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public IPage<QuUserNum> quUserNum(QuUserNumDto quUserNumDto) {
|
|
|
|
|
+
|
|
|
|
|
+ //获取所有用户
|
|
|
|
|
+ List<SysUser> users = list();
|
|
|
|
|
+
|
|
|
|
|
+ // 根据用户ID查询一级下屬
|
|
|
|
|
+ LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
|
|
|
|
|
+ List<SysUser> usersLevel1 = list(queryWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ //递归获取1级下属下所有的下属ID
|
|
|
|
|
+ List<String> strIds = new ArrayList<>();
|
|
|
|
|
+ findChildren(usersLevel1, users, strIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 根据区域编码和级别查询符合条件的区域
|
|
|
|
|
+ LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ if (quUserNumDto.getAreaCode() != null && !"".equals(quUserNumDto.getAreaCode())) {
|
|
|
|
|
+ String area = quUserNumDto.getAreaCode();
|
|
|
|
|
+ switch (quUserNumDto.getLevel()) {
|
|
|
|
|
+ case "1": { // 省级查询逻辑
|
|
|
|
|
+ quUserNumDto.setGrouping(4);
|
|
|
|
|
+ String prefix = area.substring(0, 2);
|
|
|
|
|
+ strIds.removeIf(id -> !id.contains("99" + prefix));
|
|
|
|
|
+ quUserNumDto.setLevel("2");
|
|
|
|
|
+ wrapper.eq(SysArea::getLevel, "2");
|
|
|
|
|
+ wrapper.likeRight(SysArea::getAreaCode, prefix);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ case "2": { // 市级查询逻辑
|
|
|
|
|
+ quUserNumDto.setGrouping(6);
|
|
|
|
|
+ String prefix = area.substring(0, 4);
|
|
|
|
|
+ strIds.removeIf(id -> !id.contains("99" + prefix));
|
|
|
|
|
+ quUserNumDto.setLevel("3");
|
|
|
|
|
+ wrapper.eq(SysArea::getLevel, "3");
|
|
|
|
|
+ wrapper.likeRight(SysArea::getAreaCode, prefix);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ case "3": { // 区县级查询逻辑
|
|
|
|
|
+ quUserNumDto.setGrouping(6);
|
|
|
|
|
+ String prefix = area.substring(0, 6);
|
|
|
|
|
+ strIds.removeIf(id -> !id.contains("99" + prefix));
|
|
|
|
|
+ quUserNumDto.setLevel("3");
|
|
|
|
|
+ wrapper.eq(SysArea::getLevel, "3");
|
|
|
|
|
+ wrapper.likeRight(SysArea::getAreaCode, prefix);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else { // 默认查询省级区域
|
|
|
|
|
+ quUserNumDto.setGrouping(2);
|
|
|
|
|
+ quUserNumDto.setLevel("1");
|
|
|
|
|
+ wrapper.eq(SysArea::getLevel, "1");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有查询到用户ID,则直接返回空的分页对象
|
|
|
|
|
+ if (strIds.size() == 0) {
|
|
|
|
|
+ return new Page<>();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 根据查询条件获取用户数量统计信息
|
|
|
|
|
+ quUserNumDto.setUserIds(strIds);
|
|
|
|
|
+ List<QuUserNum> userNums = sysUserMapper.getUserNum(quUserNumDto);
|
|
|
|
|
+
|
|
|
|
|
+ //遍历匹配区域名称
|
|
|
|
|
+ List<SysArea> areaList = sysAreaService.list(wrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // 根据区域名称匹配用户数量统计信息,并构造最终返回的结果列表
|
|
|
|
|
+ List<QuUserNum> quUserNums = new ArrayList<>();
|
|
|
|
|
+ for (QuUserNum quUserNum : userNums) {
|
|
|
|
|
+ for (SysArea sysArea : areaList) {
|
|
|
|
|
+ if (!Objects.isNull(sysArea.getAreaCode())) {
|
|
|
|
|
+ // 匹配区域名称
|
|
|
|
|
+ String substring = sysArea.getAreaCode().substring(0, quUserNumDto.getGrouping());
|
|
|
|
|
+ if (quUserNum.getAreaCode().equals(substring)) {
|
|
|
|
|
+ quUserNum.setAreaName(sysArea.getAreaCname());
|
|
|
|
|
+ quUserNums.add(quUserNum);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 为每个区域生成未匹配到的统计信息
|
|
|
|
|
+ for (SysArea sysArea : areaList) {
|
|
|
|
|
+ if (exists(quUserNums, sysArea)) {
|
|
|
|
|
+ QuUserNum userNum = new QuUserNum();
|
|
|
|
|
+ // 设置未匹配到的区域的默认统计信
|
|
|
|
|
+ userNum.setAreaName(sysArea.getAreaCname());
|
|
|
|
|
+ userNum.setQuoteNum("0");
|
|
|
|
|
+ userNum.setSubmitNum("0");
|
|
|
|
|
+ userNum.setHasInsuredNum("0");
|
|
|
|
|
+ userNum.setTotalSumpremium("0");
|
|
|
|
|
+ userNum.setJqPremiumSum("0");
|
|
|
|
|
+ userNum.setSyPremiumSum("0");
|
|
|
|
|
+ userNum.setTaxaMountSum("0");
|
|
|
|
|
+ quUserNums.add(userNum);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 构造返回的分页对象
|
|
|
|
|
+ IPage<QuUserNum> recordsPage = new Page<>(quUserNumDto.getPageNo(), quUserNumDto.getPageSize());
|
|
|
|
|
+ recordsPage.setRecords(quUserNums);
|
|
|
|
|
+ recordsPage.setTotal(quUserNums.size());
|
|
|
|
|
+ return recordsPage;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询用户订单数量进行区域统计详细信息
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
|
|
|
|
|
+ * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public IPage<QuUserNum> getQuUserByCompany(QuUserNumDto quUserNumDto) {
|
|
|
|
|
+
|
|
|
|
|
+ // 获取系统中的所有用户
|
|
|
|
|
+ List<SysUser> users = list();
|
|
|
|
|
+
|
|
|
|
|
+ // 创建查询包装器,用于查询指定用户ID的用
|
|
|
|
|
+ LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
|
|
|
|
|
+ // 查询指定用户ID的用户,即第一级下属
|
|
|
|
|
+ List<SysUser> usersLevel1 = list(queryWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // 用于存储所有下属的ID
|
|
|
|
|
+ List<String> strIds = new ArrayList<>();
|
|
|
|
|
+ // 递归获取第一级下属及其所有下属的ID
|
|
|
|
|
+ findChildren(usersLevel1, users, strIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果未指定区域码,返回空分页对
|
|
|
|
|
+ if (Objects.isNull(quUserNumDto.getAreaCode())) {
|
|
|
|
|
+ return new Page<>();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 根据区域码筛选有效的下属ID
|
|
|
|
|
+ strIds.removeIf(id -> !id.contains("99" + quUserNumDto.getAreaCode()));
|
|
|
|
|
+
|
|
|
|
|
+ // 如果筛选后没有有效的下属ID,返回空分页对象
|
|
|
|
|
+ if (strIds.size() == 0) {
|
|
|
|
|
+ return new Page<>();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 设置查询条件中的用户ID列表
|
|
|
|
|
+ quUserNumDto.setUserIds(strIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 根据公司和用户ID列表查询用户数量统计信息
|
|
|
|
|
+ List<QuUserNum> deptByCompany = sysUserMapper.getUserByCompany(quUserNumDto);
|
|
|
|
|
+
|
|
|
|
|
+ // 创建并设置分页信息
|
|
|
|
|
+ IPage<QuUserNum> page = new Page<>(quUserNumDto.getPageNo(), quUserNumDto.getPageSize());
|
|
|
|
|
+ page.setRecords(deptByCompany);
|
|
|
|
|
+ page.setTotal(deptByCompany.size());
|
|
|
|
|
+ return page;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
|
|
|
|
|
+ for (SysUser sysUser : SysUsers) {
|
|
|
|
|
+ List<SysUser> children = new ArrayList<>();
|
|
|
|
|
+ for (SysUser user : users) {
|
|
|
|
|
+ if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
|
|
|
|
|
+ if (!exists(children, user)) {
|
|
|
|
|
+ children.add(user);
|
|
|
|
|
+ strIds.add(user.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ sysUser.setChildren(children);
|
|
|
|
|
+// children.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
|
|
|
|
|
+ findChildren(children, users, strIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private boolean exists(List<QuUserNum> quUserNums, SysArea sysArea) {
|
|
|
|
|
+ boolean exist = true;
|
|
|
|
|
+ for (QuUserNum quUserNum1 : quUserNums) {
|
|
|
|
|
+ if (quUserNum1.getAreaName().equals(sysArea.getAreaCname())) {
|
|
|
|
|
+ exist = false;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return exist;
|
|
|
|
|
+ }
|
|
|
|
|
+ private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
|
|
|
|
|
+ boolean exist = false;
|
|
|
|
|
+ for (SysUser user : sysUsers) {
|
|
|
|
|
+ if (user.getId().equals(sysUser.getId())) {
|
|
|
|
|
+ exist = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return exist;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|