EvaluateItemServiceImpl.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package com.xjrsoft.module.evaluate.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.fasterxml.jackson.core.type.TypeReference;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import com.github.yulichang.base.MPJBaseServiceImpl;
  8. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  9. import com.xjrsoft.common.utils.VoToColumnUtil;
  10. import com.xjrsoft.module.evaluate.dto.AddEvaluateItemDto;
  11. import com.xjrsoft.module.evaluate.dto.MakeEvaluateItemDto;
  12. import com.xjrsoft.module.evaluate.entity.EvaluateItem;
  13. import com.xjrsoft.module.evaluate.entity.EvaluateTemplate;
  14. import com.xjrsoft.module.evaluate.mapper.EvaluateItemMapper;
  15. import com.xjrsoft.module.evaluate.mapper.EvaluateTemplateMapper;
  16. import com.xjrsoft.module.evaluate.service.IEvaluateItemService;
  17. import com.xjrsoft.module.evaluate.vo.EvaluateItemGroupByTopicVo;
  18. import com.xjrsoft.module.evaluate.vo.EvaluateItemVo;
  19. import com.xjrsoft.module.evaluate.vo.MakeEvaluateItemVo;
  20. import com.xjrsoft.module.organization.entity.Department;
  21. import com.xjrsoft.module.organization.mapper.DepartmentMapper;
  22. import com.xjrsoft.module.system.entity.DictionaryDetail;
  23. import lombok.AllArgsConstructor;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.stream.Collectors;
  31. /**
  32. * @title: 评价项
  33. * @Author szs
  34. * @Date: 2024-01-15
  35. * @Version 1.0
  36. */
  37. @Service
  38. @AllArgsConstructor
  39. public class EvaluateItemServiceImpl extends MPJBaseServiceImpl<EvaluateItemMapper, EvaluateItem> implements IEvaluateItemService {
  40. private EvaluateItemMapper evaluateItemMapper;
  41. private EvaluateTemplateMapper evaluateTemplateMapper;
  42. private DepartmentMapper departmentMapper;
  43. @Override
  44. public MakeEvaluateItemVo getMakeEvaluateItem(MakeEvaluateItemDto dto){
  45. //获取模板基本信息
  46. MPJLambdaWrapper<EvaluateTemplate> evaluateTemplateMPJLambdaWrapper = new MPJLambdaWrapper<>();
  47. evaluateTemplateMPJLambdaWrapper
  48. .select(EvaluateTemplate::getId)
  49. .selectAs(DictionaryDetail::getName, MakeEvaluateItemVo::getEvaluateTypeCN)
  50. .select(EvaluateTemplate.class, x -> VoToColumnUtil.fieldsToColumns(MakeEvaluateItemVo.class).contains(x.getProperty()))
  51. .eq(EvaluateTemplate::getId, dto.getEvaluateTemplateId())
  52. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, EvaluateTemplate::getEvaluateType);
  53. MakeEvaluateItemVo makeEvaluateItemVo = evaluateTemplateMapper.selectJoinOne(MakeEvaluateItemVo.class,evaluateTemplateMPJLambdaWrapper);
  54. List<String> deptIdList = new ArrayList<>();
  55. try {
  56. ObjectMapper objectMapper = new ObjectMapper();
  57. deptIdList = objectMapper.readValue(makeEvaluateItemVo.getDeptIds(), new TypeReference<List<String>>() {});
  58. }catch (Exception e){
  59. }
  60. if(deptIdList != null && deptIdList.size() > 0){
  61. LambdaQueryWrapper<Department> departmentLambdaQueryWrapper = new LambdaQueryWrapper<>();
  62. departmentLambdaQueryWrapper
  63. .in(Department::getId, deptIdList);
  64. List<Department> departmentList = departmentMapper.selectList(departmentLambdaQueryWrapper);
  65. StringBuilder deptStr = new StringBuilder();
  66. for (int i = 0; i < departmentList.size(); i++) {
  67. deptStr.append(departmentList.get(i).getName());
  68. if(i < departmentList.size() - 1){
  69. deptStr.append(",");
  70. }
  71. }
  72. makeEvaluateItemVo.setDeptIdsCN(deptStr.toString());
  73. }
  74. //获取模板下的所有评价子项集合
  75. MPJLambdaWrapper<EvaluateItem> evaluateItemWrapper = new MPJLambdaWrapper<>();
  76. evaluateItemWrapper
  77. .select(EvaluateItem::getId)
  78. .select(EvaluateItem.class, x -> VoToColumnUtil.fieldsToColumns(EvaluateItemVo.class).contains(x.getProperty()))
  79. .eq(EvaluateItem::getEvaluateTemplateId, dto.getEvaluateTemplateId());
  80. List<EvaluateItemVo> evaluateItemVoList = this.selectJoinList(EvaluateItemVo.class, evaluateItemWrapper);
  81. Map<String, List<EvaluateItemVo>> groupedEvaluateItemVo = evaluateItemVoList.stream()
  82. .collect(Collectors.groupingBy(EvaluateItemVo::getTopic));
  83. List<EvaluateItemGroupByTopicVo> evaluateItemGroupByTopicVoList = new ArrayList<>();
  84. groupedEvaluateItemVo.forEach((topic, group) -> {
  85. evaluateItemGroupByTopicVoList.add(new EvaluateItemGroupByTopicVo(){{
  86. setTopic(topic);
  87. setEvaluateItemVoList(group);
  88. }});
  89. });
  90. makeEvaluateItemVo.setEvaluateItemGroupByTopicVoList(evaluateItemGroupByTopicVoList);
  91. return makeEvaluateItemVo;
  92. }
  93. @Override
  94. @Transactional
  95. public Boolean addEvaluateItem(List<AddEvaluateItemDto> dto) {
  96. //获取sortCode的最大数量
  97. QueryWrapper<EvaluateItem> queryWrapperSortcode = new QueryWrapper<>();
  98. queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
  99. EvaluateItem e = this.getOne(queryWrapperSortcode);
  100. int sortCode = e.getSortCode() + 1;
  101. List<EvaluateItem> evaluateItemList = new ArrayList<>();
  102. for (AddEvaluateItemDto addEvaluateItemDto : dto) {
  103. addEvaluateItemDto.setSortCode(sortCode++);
  104. EvaluateItem evaluateItem = BeanUtil.toBean(addEvaluateItemDto, EvaluateItem.class);
  105. evaluateItem.setCreateDate(new Date());
  106. evaluateItemList.add(evaluateItem);
  107. }
  108. return this.saveBatch(evaluateItemList);
  109. }
  110. @Override
  111. public Boolean updateEvaluateItem(List<AddEvaluateItemDto> dto) {
  112. //先物理删除数据库中该模板下的所有评价项
  113. evaluateItemMapper.physicalDeleteEvaluateItem(dto.get(0).getEvaluateTemplateId());
  114. //添加新的评价项
  115. return addEvaluateItem(dto);
  116. }
  117. }