chendayu пре 2 година
родитељ
комит
c4f3d32d2f

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java

@@ -6,7 +6,7 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
-    @Bean
+    //@Bean
     public ServerEndpointExporter serverEndpointExporter() {
         return new ServerEndpointExporter();
     }

+ 44 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/EventAddNewDTO.java

@@ -0,0 +1,44 @@
+package cn.cslg.pas.common.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 新增事件的DTO类
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Accessors(chain = true)
+@Data
+public class EventAddNewDTO implements Serializable {
+    /**
+     * 事件名称
+     */
+    private String questionName;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 应用场景
+     */
+    private List<Integer> applicationScenarios;
+    /**
+     * 时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime eventDate;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+
+}

+ 17 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/EventQueryPageDTO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+
+/**
+ * 事件的分页查询DTO类
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Data
+public class EventQueryPageDTO extends PageDTO2 {
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+}

+ 18 - 0
PAS/src/main/java/cn/cslg/pas/common/utils/ThrowException.java

@@ -0,0 +1,18 @@
+package cn.cslg.pas.common.utils;
+
+import cn.cslg.pas.exception.XiaoShiException;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Slf4j
+public class ThrowException {
+
+    public static void throwXiaoShiException(String message) {
+        log.info("{}", message);
+        throw new XiaoShiException(message);
+    }
+
+}

+ 52 - 0
PAS/src/main/java/cn/cslg/pas/controller/EventController.java

@@ -0,0 +1,52 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.dto.EventAddNewDTO;
+import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.IEventService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 事件的Controller层
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Tag(name = "事件的管理模块")
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(Constants.API_VERSION_V2 + "/event")
+@RestController
+public class EventController {
+    private final IEventService eventService;
+
+    @Operation(summary = "新增事件")
+    @PostMapping("/addNew")
+    public String addNew(@RequestBody EventAddNewDTO eventAddNewDTO) {
+        log.info("开始处理【新增事件】的请求,请求参数为:{}", eventAddNewDTO);
+        try {
+            eventService.addNew(eventAddNewDTO);
+        } catch (XiaoShiException e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("新增事件完成");
+    }
+
+    @Operation(summary = "查询事件")
+    @PostMapping("/query")
+    public String query(@RequestBody EventQueryPageDTO eventQueryPageDTO) {
+        log.info("开始处理【分页查询事件】的业务,参数为:{}", eventQueryPageDTO);
+        return eventService.query(eventQueryPageDTO);
+
+    }
+
+}

+ 81 - 0
PAS/src/main/java/cn/cslg/pas/domain/Event.java

@@ -0,0 +1,81 @@
+package cn.cslg.pas.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 事件表的实体类
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@TableName(value = "event")
+@Accessors(chain = true)
+@Data
+public class Event implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 事件名称
+     */
+    @TableField(value = "question_name")
+    private String questionName;
+    /**
+     * 描述
+     */
+    @TableField(value = "description")
+    private String description;
+    /**
+     * 应用场景
+     */
+    @TableField(value = "application_scenario")
+    private String applicationScenario;
+    /**
+     * 应用场景(Integer集合形式)
+     */
+    private List<Integer> applicationScenarios;
+    /**
+     * 时间
+     */
+    @TableField(value = "event_date")
+    private LocalDateTime eventDate;
+    /**
+     * 专题库id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_person_id")
+    private Integer createPersonId;
+    /**
+     * 创建人名称
+     */
+    @TableField(value = "create_person_name")
+    private String createPersonName;
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+    /**
+     * 最后修改时间
+     */
+    @TableField(value = "modified_time")
+    private LocalDateTime modifiedTime;
+
+}

+ 27 - 0
PAS/src/main/java/cn/cslg/pas/mapper/EventMapper.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.Event;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 事件表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+@Repository
+public interface EventMapper extends BaseMapper<Event> {
+    /**
+     * 根据名称和专题库ids统计数量
+     *
+     * @param questionName 事件名称
+     * @param projectIds   专题库ids
+     * @return 返回统计到的数量
+     */
+    int countByNameAndProjectIds(String questionName, List<Integer> projectIds);
+
+
+}

+ 31 - 0
PAS/src/main/java/cn/cslg/pas/service/IEventService.java

@@ -0,0 +1,31 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.model.dto.EventAddNewDTO;
+import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
+import cn.cslg.pas.domain.Event;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 事件的Service层接口
+ *
+ * @Author chenyu
+ * @Date 2023/4/2
+ */
+public interface IEventService extends IService<Event> {
+    /**
+     * 新增事件
+     *
+     * @param eventAddNewDTO 新增事件的DTO类对象
+     */
+    @Transactional
+    void addNew(EventAddNewDTO eventAddNewDTO);
+
+    /**
+     * 分页查询事件
+     *
+     * @param eventQueryPageDTO 事件的分页查询DTO类对象
+     */
+    String query(EventQueryPageDTO eventQueryPageDTO);
+
+}

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/service/IPatentMarketDataService.java

@@ -7,7 +7,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.List;
 
 /**
- * 专利价值曲线的Service层
+ * 专利价值曲线的Service层接口
  *
  * @Author xiexiang
  * @Date 2023/3/15

+ 123 - 0
PAS/src/main/java/cn/cslg/pas/service/impl/EventServiceImpl.java

@@ -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);
+    }
+
+
+}

+ 18 - 0
PAS/src/main/resources/mapper/EventMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="cn.cslg.pas.mapper.EventMapper">
+    <!--根据名称和专题库ids统计数量-->
+    <!--int countByNameAndProjectIds(String questionName, List<Integer> projectIds);-->
+    <select id="countByNameAndProjectIds" resultType="int">
+        select count(*)
+        from pas.event
+        where question_name = #{questionName}
+        and project_id in (
+        <foreach collection="projectIds" item="n" separator=",">
+            #{n}
+        </foreach>
+        )
+    </select>
+
+</mapper>