SysOrganizationQuotationImpl.java 4.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.ydtech.modules.admin.dao.SysOrganizationQuotationDao;
  6. import com.ydtech.modules.admin.dao.SysQuotationThemeDao;
  7. import com.ydtech.modules.admin.model.SysDept;
  8. import com.ydtech.modules.admin.model.dto.SysUserDto;
  9. import com.ydtech.modules.admin.model.po.SysOrganizationQuotation;
  10. import com.ydtech.modules.admin.model.po.SysQuotationTheme;
  11. import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
  12. import com.ydtech.modules.admin.service.SysOrganizationQuotationService;
  13. import com.ydtech.modules.admin.service.SysUserService;
  14. import com.ydtech.modules.base.model.dto.PageDto;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import java.util.*;
  18. import java.util.stream.Collectors;
  19. import java.util.stream.Stream;
  20. @Service
  21. public class SysOrganizationQuotationImpl extends ServiceImpl<SysOrganizationQuotationDao, SysOrganizationQuotation> implements SysOrganizationQuotationService {
  22. /**
  23. * 通过递归遍历部门树结构,为每个部门设置报价信息和标记。
  24. *
  25. * @param quotationMap 包含部门ID和其对应报价信息的映射。
  26. * @param themeMap 包含报价主题ID和其对应信息的映射。
  27. * @param sysDepts 部门列表,代表需要遍历的部门树的根节点列表。
  28. */
  29. public void recursion(Map<String, SysOrganizationQuotation> quotationMap, Map<String, SysQuotationTheme> themeMap, List<SysDept> sysDepts) {
  30. // 遍历所有给定的部门
  31. for (SysDept sysDept : sysDepts) {
  32. // 获取当前部门的子部门列表
  33. List<SysDept> children = sysDept.getChildren();
  34. // 尝试从报价映射中获取当前部门的报价信息
  35. SysOrganizationQuotation quotation = quotationMap.get(sysDept.getId());
  36. // 初始化部门的标记和主题名称
  37. sysDept.setMark(1);
  38. sysDept.setThemeName("无");
  39. // 如果找到了报价信息,则设置部门的主题名称和颜色
  40. if (quotation != null) {
  41. SysQuotationTheme sysQuotationTheme = themeMap.get(quotation.getThemeCode());
  42. if (sysQuotationTheme != null) {
  43. sysDept.setThemeName(sysQuotationTheme.getQuotationAbbr());
  44. sysDept.setThemeColour(sysQuotationTheme.getThemeColour());
  45. }
  46. }
  47. // 如果部门ID包含特定字符,修改部门的标记
  48. if (sysDept.getId().contains("D") && !sysDept.getId().contains("M")) {
  49. sysDept.setMark(0);
  50. }
  51. // 递归处理当前部门的子部门
  52. recursion(quotationMap, themeMap, children);
  53. }
  54. }
  55. /**
  56. * 查询用户列表,并为每个用户设置其报价主题信息。
  57. *
  58. * @param userList 分页后的用户列表,是一个包含SysUserBaseVO对象的IPage实例。
  59. * SysUserBaseVO对象包含了用户的基本信息。
  60. * IPage是一个分页接口,用于表示分页结果。
  61. * 这个方法会为IPage中的每个SysUserBaseVO对象补充报价主题信息。
  62. */
  63. @Override
  64. public void findUserList(IPage<SysUserBaseVO> userList) {
  65. // 从分页列表中提取用户记录列表
  66. List<SysUserBaseVO> records = userList.getRecords();
  67. // 提取所有用户ID
  68. List<String> userIds = records.stream().map(SysUserBaseVO::getUserId).collect(Collectors.toList());
  69. // 根据用户ID列表查询每个用户的报价主题信息
  70. List<SysUserBaseVO> quotationTheme = baseMapper.findUserQuotationThemeList(userIds);
  71. // 遍历用户记录,为每个用户设置报价主题信息
  72. for (SysUserBaseVO record : records) {
  73. List<HashMap<String, String>> hashMaps = new ArrayList<>();
  74. // 找到当前用户的报价主题信息,并添加到当前用户的记录中
  75. for (SysUserBaseVO sysUserBaseVO : quotationTheme) {
  76. if (record.getUserId().equals(sysUserBaseVO.getUserId())){
  77. // 将主题颜色和报价缩写添加到哈希表中
  78. HashMap<String, String> hashMap = new HashMap<>();
  79. hashMap.put("themeColour",sysUserBaseVO.getThemeColour());
  80. hashMap.put("quotationAbbr",sysUserBaseVO.getQuotationAbbr());
  81. hashMaps.add(hashMap);
  82. }
  83. }
  84. // 设置用户的报价主题信息
  85. record.setQuotation(hashMaps);
  86. }
  87. }
  88. }