|
@@ -0,0 +1,123 @@
|
|
|
+package cn.cslg.pas.service.impl;
|
|
|
+
|
|
|
+import cn.cslg.pas.common.model.PersonnelVO;
|
|
|
+import cn.cslg.pas.common.model.dto.EventAddNewDTO;
|
|
|
+import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
|
|
|
+import cn.cslg.pas.common.utils.CacheUtils;
|
|
|
+import cn.cslg.pas.common.utils.Response;
|
|
|
+import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
|
|
|
+import cn.cslg.pas.common.utils.ThrowException;
|
|
|
+import cn.cslg.pas.domain.Event;
|
|
|
+import cn.cslg.pas.domain.Project;
|
|
|
+import cn.cslg.pas.mapper.EventMapper;
|
|
|
+import cn.cslg.pas.service.IEventService;
|
|
|
+import cn.cslg.pas.service.ProjectService;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.StringJoiner;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 事件的Service层接口实现类
|
|
|
+ *
|
|
|
+ * @Author chenyu
|
|
|
+ * @Date 2023/4/2
|
|
|
+ */
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements IEventService {
|
|
|
+ private final ProjectService projectService;
|
|
|
+ private final EventMapper eventMapper;
|
|
|
+ private final CacheUtils cacheUtils;
|
|
|
+ private final LoginUtils loginUtils;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增事件
|
|
|
+ *
|
|
|
+ * @param eventAddNewDTO 新增事件的DTO类对象
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void addNew(EventAddNewDTO eventAddNewDTO) {
|
|
|
+ log.info("开始处理【新增事件】的业务,参数为:{}", eventAddNewDTO);
|
|
|
+
|
|
|
+ //检查名称是否被占用(同一租户下专题库不能有同名事件名称)
|
|
|
+ String questionName = eventAddNewDTO.getQuestionName();
|
|
|
+ Project project = projectService.getById(eventAddNewDTO.getProjectId());
|
|
|
+ Integer tenantId = project.getTenantId();
|
|
|
+ LambdaQueryWrapper<Project> projectQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ projectQueryWrapper.eq(Project::getTenantId, tenantId);
|
|
|
+ List<Project> projectList = projectService.list(projectQueryWrapper);
|
|
|
+ ArrayList<Integer> projectIds = new ArrayList<>();
|
|
|
+ for (Project n : projectList) {
|
|
|
+ projectIds.add(n.getId());
|
|
|
+ }
|
|
|
+ log.info("检查事件名称是否被占用(同一租户下专题库不能有同名事件)");
|
|
|
+ int count = eventMapper.countByNameAndProjectIds(questionName, projectIds);
|
|
|
+ if (count > 0) {
|
|
|
+ ThrowException.throwXiaoShiException("新增事件失败,当前租户下事件名称【" + questionName + "】已存在,请尝试更换名称");
|
|
|
+ }
|
|
|
+
|
|
|
+ //新增事件DTO数据赋值给事件表实体类
|
|
|
+ Event event = new Event();
|
|
|
+ BeanUtils.copyProperties(eventAddNewDTO, event);
|
|
|
+ List<Integer> applicationScenarios = eventAddNewDTO.getApplicationScenarios();
|
|
|
+ //若有应用场景,则将应用场景集合转换成以逗号拼接的字符串,并赋值给实体类对应参数
|
|
|
+ if (applicationScenarios != null && applicationScenarios.size() != 0) {
|
|
|
+ String applicationScenario = applicationScenarios.stream().map(String::valueOf).collect(Collectors.joining(","));
|
|
|
+ event.setApplicationScenario(applicationScenario);
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取当前登陆人id及姓名
|
|
|
+ PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
+ event
|
|
|
+ .setCreatePersonId(personnelVO.getId())
|
|
|
+ .setCreatePersonName(personnelVO.getName());
|
|
|
+
|
|
|
+ log.info("数据入事件表");
|
|
|
+ //this.save(event);
|
|
|
+ int rows = eventMapper.insert(event);
|
|
|
+ if (rows != 1) {
|
|
|
+ ThrowException.throwXiaoShiException("新增事件失败,服务器忙请稍后再次尝试");
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("新增事件完成");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String query(EventQueryPageDTO eventQueryPageDTO) {
|
|
|
+ log.info("开始处理【分页查询事件】的业务,参数为:{}", eventQueryPageDTO);
|
|
|
+
|
|
|
+ Integer projectId = eventQueryPageDTO.getProjectId();
|
|
|
+ Integer current = eventQueryPageDTO.getCurrent();
|
|
|
+ Integer size = eventQueryPageDTO.getSize();
|
|
|
+ LambdaQueryWrapper<Event> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if (projectId != null) {
|
|
|
+ queryWrapper.eq(Event::getProjectId, projectId);
|
|
|
+ }
|
|
|
+ if (current != null && size != null) {
|
|
|
+ return Response.success(this.page(new Page<>(current, size), queryWrapper.orderByDesc(Event::getCreateTime)));
|
|
|
+ }
|
|
|
+ List<Event> events = eventMapper.selectList(queryWrapper);
|
|
|
+ for (Event event : events) {
|
|
|
+ String applicationScenario = event.getApplicationScenario();
|
|
|
+ if (applicationScenario != null && !applicationScenario.equals("")) {
|
|
|
+ List<Integer> applicationScenarios = Arrays.stream(applicationScenario.split(",")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
+ event.setApplicationScenarios(applicationScenarios);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Response.success(events);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|