EventServiceImpl.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package cn.cslg.pas.service.impl;
  2. import cn.cslg.pas.common.JsonPage;
  3. import cn.cslg.pas.common.model.PersonnelVO;
  4. import cn.cslg.pas.common.model.dto.EventAddNewDTO;
  5. import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
  6. import cn.cslg.pas.common.model.dto.EventUpdateDTO;
  7. import cn.cslg.pas.common.model.vo.EventListItemVO;
  8. import cn.cslg.pas.common.utils.CacheUtils;
  9. import cn.cslg.pas.common.utils.Response;
  10. import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
  11. import cn.cslg.pas.common.utils.ThrowException;
  12. import cn.cslg.pas.domain.Event;
  13. import cn.cslg.pas.domain.Project;
  14. import cn.cslg.pas.domain.asso.AssoEventProject;
  15. import cn.cslg.pas.mapper.AssoEventProjectMapper;
  16. import cn.cslg.pas.mapper.EventMapper;
  17. import cn.cslg.pas.service.IEventService;
  18. import cn.cslg.pas.service.ProjectService;
  19. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  20. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  21. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  22. import com.github.pagehelper.PageHelper;
  23. import com.github.pagehelper.PageInfo;
  24. import lombok.RequiredArgsConstructor;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.springframework.beans.BeanUtils;
  27. import org.springframework.stereotype.Service;
  28. import java.util.ArrayList;
  29. import java.util.Arrays;
  30. import java.util.List;
  31. import java.util.StringJoiner;
  32. import java.util.regex.Matcher;
  33. import java.util.regex.Pattern;
  34. import java.util.stream.Collectors;
  35. /**
  36. * 事件的Service层接口实现类
  37. *
  38. * @Author chenyu
  39. * @Date 2023/4/2
  40. */
  41. @RequiredArgsConstructor
  42. @Slf4j
  43. @Service
  44. public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements IEventService {
  45. private final ProjectService projectService;
  46. private final EventMapper eventMapper;
  47. private final AssoEventProjectMapper assoEventProjectMapper;
  48. private final CacheUtils cacheUtils;
  49. private final LoginUtils loginUtils;
  50. /**
  51. * 新增事件
  52. *
  53. * @param eventAddNewDTO 新增事件的DTO类对象
  54. */
  55. @Override
  56. public void addNew(EventAddNewDTO eventAddNewDTO) {
  57. log.info("开始处理【新增事件】的业务,参数为:{}", eventAddNewDTO);
  58. //检查名称是否被占用(同一租户下不能有同名事件名称)
  59. String questionName = eventAddNewDTO.getQuestionName();
  60. Integer projectId = eventAddNewDTO.getProjectId();
  61. Project project = projectService.getById(projectId);
  62. Integer tenantId = project.getTenantId();
  63. log.info("检查事件名称是否被占用(同一租户下不能有同名事件)");
  64. int count = eventMapper.countByNameAndTenantId(questionName, tenantId);
  65. if (count > 0) {
  66. ThrowException.throwXiaoShiException("新增事件失败,当前租户下事件名称【" + questionName + "】已存在,请尝试更换名称");
  67. }
  68. //新增事件DTO数据赋值给事件表实体类
  69. Event event = new Event();
  70. BeanUtils.copyProperties(eventAddNewDTO, event);
  71. event.setTenantId(tenantId);
  72. List<Integer> applicationScenarios = eventAddNewDTO.getApplicationScenarios();
  73. //若有应用场景,则将应用场景集合转换成以逗号拼接的字符串,并赋值给实体类对应参数
  74. if (applicationScenarios != null && applicationScenarios.size() > 0) {
  75. String applicationScenario = applicationScenarios.stream().map(String::valueOf).collect(Collectors.joining(","));
  76. event.setApplicationScenario(applicationScenario);
  77. }
  78. //获取当前登陆人id及姓名
  79. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  80. event
  81. .setCreatePersonId(personnelVO.getId())
  82. .setCreatePersonName(personnelVO.getName());
  83. log.info("数据入事件表");
  84. int rows = eventMapper.insert(event);
  85. if (rows != 1) {
  86. ThrowException.throwXiaoShiException("新增事件失败,服务器忙请稍后再次尝试");
  87. }
  88. //数据入事件和专题库关联表
  89. Integer eventId = event.getId();
  90. AssoEventProject assoEventProject = new AssoEventProject()
  91. .setEventId(eventId)
  92. .setProjectId(projectId);
  93. log.info("数据入事件和专题库关联表");
  94. rows = assoEventProjectMapper.insert(assoEventProject);
  95. if (rows != 1) {
  96. ThrowException.throwXiaoShiException("新增事件失败,数据入事件和专题库关联表失败,服务器忙请稍后再次尝试");
  97. }
  98. log.info("新增事件完成");
  99. }
  100. /**
  101. * 分页查询事件
  102. *
  103. * @param eventQueryPageDTO 事件的分页查询DTO类对象
  104. */
  105. @Override
  106. public JsonPage query(EventQueryPageDTO eventQueryPageDTO) {
  107. log.info("开始处理【分页查询事件】的业务,参数为:{}", eventQueryPageDTO);
  108. Integer current = eventQueryPageDTO.getCurrent();
  109. Integer size = eventQueryPageDTO.getSize();
  110. String orderBy = eventQueryPageDTO.getOrderBy();
  111. if (orderBy != null && !orderBy.equals("")) {
  112. String regex = "[A-Z]+";
  113. Pattern compile = Pattern.compile(regex);
  114. Matcher matcher = compile.matcher(orderBy);
  115. while (matcher.find()) {
  116. orderBy = orderBy.replaceFirst(matcher.group(), "_" + matcher.group().toLowerCase());
  117. }
  118. eventQueryPageDTO.setOrderBy(orderBy);
  119. }
  120. if (current != null && size != null) {
  121. PageHelper.startPage(current, size);
  122. }
  123. List<EventListItemVO> queryResults = eventMapper.queryList(eventQueryPageDTO);
  124. for (EventListItemVO queryResult : queryResults) {
  125. String applicationScenario = queryResult.getApplicationScenario();
  126. if (applicationScenario != null && !applicationScenario.equals("")) {
  127. List<Integer> applicationScenarioIds = Arrays.stream(applicationScenario.split(",")).map(Integer::parseInt).collect(Collectors.toList());
  128. queryResult.setApplicationScenarios(applicationScenarioIds);
  129. }
  130. }
  131. return JsonPage.restPage(new PageInfo<>(queryResults));
  132. }
  133. /**
  134. * 修改事件
  135. *
  136. * @param eventUpdateDTO 修改事件的DTO类对象
  137. */
  138. @Override
  139. public void update(EventUpdateDTO eventUpdateDTO) {
  140. log.info("开始处理【修改事件】的业务,参数为:{}", eventUpdateDTO);
  141. //检查尝试修改的数据是否存在
  142. Event queryResult = eventMapper.selectById(eventUpdateDTO.getId());
  143. if (queryResult == null) {
  144. ThrowException.throwXiaoShiException("修改失败,访问的数据不存在,请尝试刷新页面");
  145. }
  146. //若修改了名称,则检查名称是否被占用(同一租户下专题库不能有同名事件名称)
  147. String newQuestionName = eventUpdateDTO.getQuestionName();
  148. String oldQuestionName = queryResult.getQuestionName();
  149. Project project = projectService.getById(eventUpdateDTO.getProjectId());
  150. Integer tenantId = project.getTenantId();
  151. if (!newQuestionName.equals(oldQuestionName)) {
  152. log.info("检查事件名称是否被占用(同一租户下专题库不能有同名事件)");
  153. int count = eventMapper.countByNameAndTenantId(newQuestionName, tenantId);
  154. if (count > 0) {
  155. ThrowException.throwXiaoShiException("修改失败,当前租户下事件名称【" + newQuestionName + "】已存在,请尝试更换名称");
  156. }
  157. }
  158. //修改事件
  159. Event event = new Event();
  160. BeanUtils.copyProperties(eventUpdateDTO, event);
  161. event.setTenantId(tenantId);
  162. List<Integer> applicationScenarios = eventUpdateDTO.getApplicationScenarios();
  163. if (applicationScenarios != null && applicationScenarios.size() > 0) {
  164. String applicationScenario = applicationScenarios.stream().map(String::valueOf).collect(Collectors.joining(","));
  165. event.setApplicationScenario(applicationScenario);
  166. }
  167. int rows = eventMapper.updateById(event);
  168. if (rows != 1) {
  169. ThrowException.throwXiaoShiException("修改失败,服务器忙请稍后再次尝试");
  170. }
  171. log.info("修改完成");
  172. }
  173. /**
  174. * 根据id删除事件
  175. *
  176. * @param eventId 事件id
  177. * @param projectId 专题库id
  178. */
  179. @Override
  180. public void delete(Integer eventId, Integer projectId) {
  181. log.info("开始处理【删除事件】的业务,参数为:{}, {}", eventId, projectId);
  182. //检查尝试删除的数据是否存在
  183. Event queryResult = eventMapper.selectById(eventId);
  184. if (queryResult == null) {
  185. ThrowException.throwXiaoShiException("删除失败,访问的数据不存在,请尝试刷新页面");
  186. }
  187. //删除事件和专题库关联表数据
  188. assoEventProjectMapper.deleteByEventIdAndProjectId(eventId, projectId);
  189. //删除事件表数据
  190. // int rows = eventMapper.deleteById(eventId);
  191. // if (rows != 1) {
  192. // ThrowException.throwXiaoShiException("删除失败,服务器忙请稍后再次尝试");
  193. // }
  194. log.info("删除完成");
  195. }
  196. }