From daec4b1d2cce358233109fb282aa4d5be31da559 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 15 七月 2024 17:43:41 +0800
Subject: [PATCH] 通知

---
 src/main/java/com/mindskip/xzs/domain/enums/NotifyRefType.java                   |   27 +++
 src/main/java/com/mindskip/xzs/domain/vo/AdminNotifyVO.java                      |   42 ++++++
 src/main/resources/mapper/NotifyMapper.xml                                       |   42 ++++++
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java |   20 ++
 src/main/java/com/mindskip/xzs/controller/admin/NotifyController.java            |   60 ++++++++
 src/main/resources/application-dev.yml                                           |    4 
 src/main/java/com/mindskip/xzs/domain/Notify.java                                |   43 ++++++
 src/main/java/com/mindskip/xzs/service/impl/NotifyServiceImpl.java               |   42 ++++++
 src/main/java/com/mindskip/xzs/repository/NotifyMapper.java                      |   43 ++++++
 src/main/java/com/mindskip/xzs/service/NotifyService.java                        |   38 +++++
 src/main/java/com/mindskip/xzs/service/impl/FeedbackServiceImpl.java             |   18 ++
 11 files changed, 378 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java
index e4cbe61..c005913 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentExamineController.java
@@ -5,13 +5,18 @@
 import com.mindskip.xzs.base.BaseApiController;
 import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.DepartmentExamine;
+import com.mindskip.xzs.domain.Notify;
+import com.mindskip.xzs.domain.enums.NotifyRefType;
 import com.mindskip.xzs.domain.vo.DepartmentExamineVO;
 import com.mindskip.xzs.service.DepartmentExamineService;
+import com.mindskip.xzs.service.NotifyService;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * <p>
@@ -27,6 +32,7 @@
 public class DepartmentExamineController extends BaseApiController {
 
     private final DepartmentExamineService departmentExamineService;
+    private final NotifyService notifyService;
 
     @RequestMapping(value = "list", method = RequestMethod.POST)
     public RestResponse<PageInfo<DepartmentExamineVO>> list(@RequestBody DepartmentExamineVO departmentExamineVO) {
@@ -34,11 +40,23 @@
         return RestResponse.ok(departmentExamineService.pageInfo(departmentExamineVO));
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @RequestMapping(value = "save", method = RequestMethod.POST)
     public RestResponse<Boolean> save(@RequestBody DepartmentExamine departmentExamine) {
         departmentExamine.setCreateTime(LocalDateTime.now());
         departmentExamine.setCreateUser(getCurrentUser().getId());
-        return RestResponse.ok(departmentExamineService.save(departmentExamine));
+
+        departmentExamineService.save(departmentExamine);
+
+        // 娣诲姞閫氱煡
+        Notify notify = new Notify();
+        notify.setCreateTime(new Date());
+        notify.setReadStatus(2);
+        notify.setRefId(departmentExamine.getId());
+        notify.setRefType(NotifyRefType.FEEDBACK.getValue());
+        notify.setCreateUserId(webContext.getCurrentUser().getId());
+        notifyService.add(notify);
+        return RestResponse.ok();
     }
 
     @RequestMapping(value = "delete/{id}", method = RequestMethod.POST)
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/NotifyController.java b/src/main/java/com/mindskip/xzs/controller/admin/NotifyController.java
new file mode 100644
index 0000000..6506dd3
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/admin/NotifyController.java
@@ -0,0 +1,60 @@
+package com.mindskip.xzs.controller.admin;
+
+import com.mindskip.xzs.base.RestResponse;
+import com.mindskip.xzs.domain.Notify;
+import com.mindskip.xzs.domain.enums.NotifyRefType;
+import com.mindskip.xzs.domain.vo.AdminNotifyVO;
+import com.mindskip.xzs.service.NotifyService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/15 15:05
+ */
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/admin/notify")
+public class NotifyController {
+
+    private final NotifyService notifyService;
+
+    /**
+     * 绠$悊鍛橀�氱煡鍒楄〃
+     *
+     * @return
+     */
+    @GetMapping("/admin")
+    public RestResponse adminNotifyList() {
+        List<Notify> notifies = notifyService.adminNotifyList();
+        AdminNotifyVO data = new AdminNotifyVO();
+        data.setTotal(notifies.size());
+        long feedback = notifies.stream().filter(notify -> NotifyRefType.FEEDBACK.getValue().equals(notify.getRefType())).count();
+        long mobilize = notifies.stream().filter(notify -> NotifyRefType.MOBILIZE.getValue().equals(notify.getRefType())).count();
+        long status = notifies.stream().filter(notify -> NotifyRefType.STATUS.getValue().equals(notify.getRefType())).count();
+        data.setFeedBack(feedback);
+        data.setMobilize(mobilize);
+        data.setStatus(status);
+        List<Integer> ids = notifies.stream().map(Notify::getId).collect(Collectors.toList());
+        data.setIds(ids);
+        return RestResponse.ok(data);
+    }
+
+    @GetMapping("/me")
+    public RestResponse notifyMeList() {
+        return RestResponse.ok(notifyService.notifyMeList());
+    }
+
+
+    @PostMapping("/read")
+    public RestResponse readNotify(@RequestBody @NotEmpty List<Integer> ids) {
+        notifyService.setHasRead(ids);
+        return RestResponse.ok();
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/Notify.java b/src/main/java/com/mindskip/xzs/domain/Notify.java
new file mode 100644
index 0000000..d1aba3d
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/Notify.java
@@ -0,0 +1,43 @@
+package com.mindskip.xzs.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 閫氱煡
+ *
+ * @author锛歺p
+ * @date锛�2024/7/15 14:23
+ */
+@Data
+public class Notify {
+
+    private Integer id;
+
+    /** 閫氱煡璋� */
+    private Integer notifyWho;
+
+    /** 鍏宠仈鏁版嵁 */
+    private Integer refId;
+
+    /** 鍏宠仈鏁版嵁绫诲瀷 */
+    private String refType;
+
+    /** 閫氱煡鏃堕棿 */
+    private Date createTime;
+
+    /** 閫氱煡绫诲瀷 */
+    private String notifyType;
+
+    /** 閫氱煡璋� */
+    private Integer readStatus;
+
+    /** 鍙戣捣浜篒D */
+    private Integer createUserId;
+
+    /** 鍙戣捣浜洪儴闂↖D */
+    private Integer createDeptId;
+
+    private Integer deleted;
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/NotifyRefType.java b/src/main/java/com/mindskip/xzs/domain/enums/NotifyRefType.java
new file mode 100644
index 0000000..4ac0661
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/NotifyRefType.java
@@ -0,0 +1,27 @@
+package com.mindskip.xzs.domain.enums;
+
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/15 15:30
+ */
+@Getter
+public enum NotifyRefType {
+
+    FEEDBACK("feedback", "閿欓鍙嶉"),
+
+    MOBILIZE("mobilize", "璋冨姩閮ㄩ棬"),
+
+    STATUS("status", "鐘舵�佽缃�"),
+
+    ;
+
+    private final String value;
+    private final String desc;
+
+    NotifyRefType(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/AdminNotifyVO.java b/src/main/java/com/mindskip/xzs/domain/vo/AdminNotifyVO.java
new file mode 100644
index 0000000..200aa81
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/AdminNotifyVO.java
@@ -0,0 +1,42 @@
+package com.mindskip.xzs.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 绠$悊鍛橀�氱煡
+ *
+ * @author锛歺p
+ * @date锛�2024/7/15 16:45
+ */
+@Data
+public class AdminNotifyVO {
+
+    private List<Integer> ids;
+
+    /**
+     * 鎵�鏈変唬鍔�
+     *
+     */
+    private Integer total;
+
+    /**
+     * 閿欓鍙嶉浠e姙
+     *
+     */
+    private Long feedBack;
+
+    /**
+     * 閮ㄩ棬璋冨姩浠e姙
+     *
+     */
+    private Long mobilize;
+
+    /**
+     * 鐘舵�佽缃�
+     *
+     */
+    private Long status;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/NotifyMapper.java b/src/main/java/com/mindskip/xzs/repository/NotifyMapper.java
new file mode 100644
index 0000000..28a068c
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/NotifyMapper.java
@@ -0,0 +1,43 @@
+package com.mindskip.xzs.repository;
+
+import com.mindskip.xzs.domain.Notify;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/15 14:36
+ */
+@Mapper
+public interface NotifyMapper {
+
+    /**
+     * 娣诲姞
+     *
+     * @param notify
+     */
+    void add(Notify notify);
+
+    /**
+     * 鏌ヨ閫氱煡鎴戠殑
+     *
+     * @return
+     */
+    List<Notify> notifyMeList(@Param("userId") Integer userId);
+
+    /**
+     * 璁剧疆涓哄凡璇�
+     *
+     * @param ids
+     */
+    void setHasRead(@Param("ids") List<Integer> ids);
+
+    /**
+     * 绠$悊鍛橀�氱煡鍒楄〃
+     *
+     * @return
+     */
+    List<Notify> adminNotifyList();
+}
diff --git a/src/main/java/com/mindskip/xzs/service/NotifyService.java b/src/main/java/com/mindskip/xzs/service/NotifyService.java
new file mode 100644
index 0000000..71a7b2c
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/NotifyService.java
@@ -0,0 +1,38 @@
+package com.mindskip.xzs.service;
+
+import com.mindskip.xzs.domain.Notify;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/15 15:00
+ */
+public interface NotifyService {
+
+    /**
+     * 娣诲姞
+     *
+     * @param notify
+     */
+    void add(Notify notify);
+
+    /**
+     * 閫氱煡鎴戠殑
+     *
+     */
+    List<Notify> notifyMeList();
+
+    /**
+     * 宸茶
+     *
+     */
+    void setHasRead(List<Integer> ids);
+
+    /**
+     * 绠$悊鍛橀�氱煡
+     *
+     * @return
+     */
+    List<Notify> adminNotifyList();
+}
diff --git a/src/main/java/com/mindskip/xzs/service/impl/FeedbackServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/FeedbackServiceImpl.java
index 06be31e..e3f02c0 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/FeedbackServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/FeedbackServiceImpl.java
@@ -4,18 +4,25 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.context.WebContext;
 import com.mindskip.xzs.domain.Feedback;
+import com.mindskip.xzs.domain.Notify;
+import com.mindskip.xzs.domain.enums.NotifyRefType;
 import com.mindskip.xzs.domain.question.QuestionObject;
 import com.mindskip.xzs.domain.vo.FeedbackVO;
 import com.mindskip.xzs.repository.FeedbackMapper;
+import com.mindskip.xzs.repository.UserMapper;
 import com.mindskip.xzs.service.FeedbackService;
+import com.mindskip.xzs.service.NotifyService;
 import com.mindskip.xzs.utility.JsonUtil;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.stream.Collectors;
 
 /**
@@ -28,12 +35,23 @@
 public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> implements FeedbackService {
 
     private final FeedbackMapper feedbackMapper;
+    private final WebContext webContext;
+    private final NotifyService notifyService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void saveFeedback(FeedbackVO feedbackVO) {
         Feedback feedback = new Feedback();
         BeanUtils.copyProperties(feedbackVO, feedback);
         feedbackMapper.insert(feedback);
+        // 娣诲姞閫氱煡
+        Notify notify = new Notify();
+        notify.setCreateTime(new Date());
+        notify.setReadStatus(2);
+        notify.setRefId(feedback.getId());
+        notify.setRefType(NotifyRefType.FEEDBACK.getValue());
+        notify.setCreateUserId(webContext.getCurrentUser().getId());
+        notifyService.add(notify);
     }
 
     @Override
diff --git a/src/main/java/com/mindskip/xzs/service/impl/NotifyServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/NotifyServiceImpl.java
new file mode 100644
index 0000000..cdd78f8
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/impl/NotifyServiceImpl.java
@@ -0,0 +1,42 @@
+package com.mindskip.xzs.service.impl;
+
+import com.mindskip.xzs.context.WebContext;
+import com.mindskip.xzs.domain.Notify;
+import com.mindskip.xzs.repository.NotifyMapper;
+import com.mindskip.xzs.service.NotifyService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/15 15:02
+ */
+@Service
+@RequiredArgsConstructor
+public class NotifyServiceImpl implements NotifyService {
+
+    private final NotifyMapper notifyMapper;
+    private final WebContext webContext;
+
+    @Override
+    public void add(Notify notify) {
+        notifyMapper.add(notify);
+    }
+
+    @Override
+    public List<Notify> notifyMeList() {
+        return notifyMapper.notifyMeList(webContext.getCurrentUser().getId());
+    }
+
+    @Override
+    public void setHasRead(List<Integer> ids) {
+        notifyMapper.setHasRead(ids);
+    }
+
+    @Override
+    public List<Notify> adminNotifyList() {
+        return notifyMapper.adminNotifyList();
+    }
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index d82e26a..d9b2931 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -11,3 +11,7 @@
     username: root
     password: 321$YcYl@1970!
     driver-class-name: com.mysql.cj.jdbc.Driver
+#    url: jdbc:mysql://127.0.0.1:3306/xzsqy?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=true
+#    username: root
+#    password: 123456
+#    driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/src/main/resources/mapper/NotifyMapper.xml b/src/main/resources/mapper/NotifyMapper.xml
new file mode 100644
index 0000000..8b7bf04
--- /dev/null
+++ b/src/main/resources/mapper/NotifyMapper.xml
@@ -0,0 +1,42 @@
+<?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="com.mindskip.xzs.repository.NotifyMapper">
+
+    <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.Notify">
+        <id property="id" column="id"/>
+        <result property="notifyWho" column="notify_who"/>
+        <result property="refId" column="ref_id"/>
+        <result property="refType" column="ref_type"/>
+        <result property="createTime" column="create_time"/>
+        <result property="notifyType" column="notify_type"/>
+        <result property="readStatus" column="read_status"/>
+        <result property="createUserId" column="create_user_id"/>
+        <result property="createDeptId" column="create_dept_id"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,question_id,content_id,
+        describe,user_id,fix,
+            fix_time
+    </sql>
+
+    <insert id="add" keyProperty="id" useGeneratedKeys="true" keyColumn="id" parameterType="com.mindskip.xzs.domain.Notify">
+        insert into t_notify(notify_who, ref_id, ref_type, create_time, notify_type, read_status, create_user_id, create_dept_id) value (
+            #{notifyWho}, #{refId}, #{refType}, #{createTime}, #{notifyType}, #{readStatus}, #{createUserId}, #{createDeptId}
+        )
+    </insert>
+
+    <select id="notifyMeList" resultMap="BaseResultMap">
+        SELECT * FROM t_notify WHERE notify_who = #{userId} AND deleted = 0 ORDER BY read_status,create_time DESC
+    </select>
+
+    <select id="adminNotifyList" resultMap="BaseResultMap">
+        SELECT * FROM t_notify WHERE read_status = 2 AND deleted = 0 ORDER BY read_status,create_time DESC
+    </select>
+
+    <update id="setHasRead" parameterType="integer">
+        update t_notify set read_status = 1 where id in <foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach>
+    </update>
+</mapper>

--
Gitblit v1.8.0