From 0a49707dd4dbacf83935b8b00af27cdf29c02b10 Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期二, 23 四月 2024 15:59:38 +0800
Subject: [PATCH] 2024-4-23 消息通知后端开放

---
 framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java                                |   44 +++++++
 framework/src/main/java/com/yuanchu/mom/pojo/InformationNotification.java                    |   69 +++++++++++
 framework/src/main/java/com/yuanchu/mom/mapper/InformationNotificationMapper.java            |   22 +++
 framework/src/main/java/com/yuanchu/mom/service/InformationNotificationService.java          |   26 ++++
 framework/src/main/java/com/yuanchu/mom/service/impl/InformationNotificationServiceImpl.java |   61 ++++++++++
 system-run/src/main/resources/application.yml                                                |    3 
 framework/src/main/resources/mapper/InformationNotificationMapper.xml                        |   14 ++
 framework/src/main/java/com/yuanchu/mom/controller/InformationNotificationController.java    |   66 +++++++++++
 system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java                                  |    4 
 framework/src/main/java/com/yuanchu/mom/pojo/InformationNotificationDto.java                 |   10 +
 10 files changed, 317 insertions(+), 2 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java b/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java
index 329eeed..50d28d4 100644
--- a/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java
+++ b/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java
@@ -1,13 +1,29 @@
 package com.yuanchu.mom.config;
 
 import cn.hutool.log.Log;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 @Configuration
 public class OpenFifer extends WebMvcConfigurationSupport {
@@ -30,6 +46,9 @@
     @Value("${wordUrl}")
     private String wordUrl;
 
+    @Value("${spring.jackson.date-format}")
+    private String pattern;
+
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         //閰嶇疆鎷︽埅鍣ㄨ闂潤鎬佽祫婧�
         registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
@@ -49,4 +68,29 @@
         registry.addInterceptor(logConfig).addPathPatterns("/**");
         super.addInterceptors(registry);
     }
+
+    // 鍏ㄥ眬鏍煎紡鍖栧鐞�
+    @Override
+    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
+        // 杩斿洖缁欏墠绔幓闄ull
+        Jackson2ObjectMapperBuilder json = Jackson2ObjectMapperBuilder.json();
+        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+
+        //localDateTime鏍煎紡鍖�
+        JavaTimeModule module = new JavaTimeModule();
+        LocalDateTimeDeserializer dateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern));
+        LocalDateTimeSerializer dateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
+        module.addDeserializer(LocalDateTime.class, dateTimeDeserializer);
+        module.addSerializer(LocalDateTime.class, dateTimeSerializer);
+        ObjectMapper objectMapper = json.modules(module)
+                .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build();
+
+        //date鏃堕棿鏍煎紡鍖�
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        objectMapper.setDateFormat(new SimpleDateFormat(pattern));
+
+        // 璁剧疆鏍煎紡鍖栧唴瀹�
+        converter.setObjectMapper(objectMapper);
+        converters.add(0, converter);
+    }
 }
diff --git a/framework/src/main/java/com/yuanchu/mom/controller/InformationNotificationController.java b/framework/src/main/java/com/yuanchu/mom/controller/InformationNotificationController.java
new file mode 100644
index 0000000..d229273
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/controller/InformationNotificationController.java
@@ -0,0 +1,66 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.mapper.InformationNotificationMapper;
+import com.yuanchu.mom.pojo.InformationNotification;
+import com.yuanchu.mom.pojo.InformationNotificationDto;
+import com.yuanchu.mom.service.InformationNotificationService;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 娑堟伅閫氱煡 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-04-23 02:14:30
+ */
+@Api(tags = "娑堟伅閫氱煡")
+@RestController
+@RequestMapping("/informationNotification")
+public class InformationNotificationController {
+
+    @Autowired
+    private InformationNotificationService informationNotificationService;
+
+    @ApiOperation(value = "婊氬姩鍒嗛〉鏌ヨ")
+    @GetMapping("page")
+    public Result<?> getPage(Long size, Long current, String messageType) {
+        return Result.success(informationNotificationService.getPage(new Page<>(current, size), messageType));
+    }
+
+    @ApiOperation(value = "鏇存柊娑堟伅鐘舵�侊紙鎷掔粷銆佹帴鏀讹級")
+    @PutMapping("updateMessageStatus")
+    public Result<?> updateMessageStatus(@RequestBody InformationNotification informationNotification) {
+        informationNotificationService.updateById(informationNotification);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍囪鎵�鏈変俊鎭负宸茶/鍒犻櫎鎵�鏈夊凡璇绘秷鎭�")
+    @PutMapping("informationReadOrDelete/{isMarkAllInformationRead}")
+    public Result<?> markAllInformationReadOrDeleteAllReadMessages(@PathVariable("isMarkAllInformationRead") Boolean isMarkAllInformationRead) {
+        informationNotificationService.markAllInformationReadOrDeleteAllReadMessages(isMarkAllInformationRead);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍规嵁Id鍒犻櫎鏁版嵁")
+    @DeleteMapping("deleteDataBasedOnId")
+    public Result<?> deleteDataBasedOnId(Integer id) {
+        informationNotificationService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏌ヨ鏄惁瀛樺湪鏈鏁版嵁")
+    @GetMapping("checkForUnreadData")
+    public Result<?> checkForUnreadData() {
+        return Result.success(informationNotificationService.checkForUnreadData());
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/mapper/InformationNotificationMapper.java b/framework/src/main/java/com/yuanchu/mom/mapper/InformationNotificationMapper.java
new file mode 100644
index 0000000..d0d26a6
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/mapper/InformationNotificationMapper.java
@@ -0,0 +1,22 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.InformationNotification;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.InformationNotificationDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 娑堟伅閫氱煡 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-04-23 02:14:30
+ */
+public interface InformationNotificationMapper extends BaseMapper<InformationNotification> {
+
+    IPage<InformationNotificationDto> getPage(Page page, String messageType);
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/pojo/InformationNotification.java b/framework/src/main/java/com/yuanchu/mom/pojo/InformationNotification.java
new file mode 100644
index 0000000..db0c348
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/pojo/InformationNotification.java
@@ -0,0 +1,69 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 娑堟伅閫氱煡
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-04-23 02:14:30
+ */
+@Getter
+@Setter
+@TableName("information_notification")
+@ApiModel(value = "InformationNotification瀵硅薄", description = "娑堟伅閫氱煡")
+public class InformationNotification implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭ID")
+    private Integer id;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    private String createUser;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿/鍙戦�佹椂闂�")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("寰呭姙銆佹帴鏀躲�佸鏍搞�佹壒鍑嗐�侀璀︽彁閱掋�侀�氱煡鍏憡")
+    private String messageType;
+
+    @ApiModelProperty("涓婚")
+    private String theme;
+
+    @ApiModelProperty("鍐呭")
+    private String content;
+
+    @ApiModelProperty("鍙戦�佷汉Id")
+    private Integer senderId;
+
+    @ApiModelProperty("鏀朵欢浜�")
+    private Integer consigneeId;
+
+    @ApiModelProperty("鏌ョ湅鐘舵�侊細宸茶锛屾湭璇�")
+    private Boolean viewStatus;
+
+    @ApiModelProperty("娑堟伅鐘舵�侊紙鎷掔粷銆佹帴鏀讹級锛堟牴鎹秷鎭被鍨嬪睍绀猴級")
+    private Boolean messageStatus;
+
+    @ApiModelProperty("璺宠浆璺緞")
+    private String jumpPath;
+
+    @ApiModelProperty("璺宠浆Id")
+    private String jumpId;
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/pojo/InformationNotificationDto.java b/framework/src/main/java/com/yuanchu/mom/pojo/InformationNotificationDto.java
new file mode 100644
index 0000000..12e5fc5
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/pojo/InformationNotificationDto.java
@@ -0,0 +1,10 @@
+package com.yuanchu.mom.pojo;
+
+import lombok.Data;
+
+@Data
+public class InformationNotificationDto extends InformationNotification{
+    private String senderUser;
+
+    private String consigneeUser;
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/service/InformationNotificationService.java b/framework/src/main/java/com/yuanchu/mom/service/InformationNotificationService.java
new file mode 100644
index 0000000..a11d10a
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/service/InformationNotificationService.java
@@ -0,0 +1,26 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.InformationNotification;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.InformationNotificationDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 娑堟伅閫氱煡 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-04-23 02:14:30
+ */
+public interface InformationNotificationService extends IService<InformationNotification> {
+
+    IPage<InformationNotificationDto> getPage(Page page, String messageType);
+
+    void markAllInformationReadOrDeleteAllReadMessages(Boolean isMarkAllInformationRead);
+
+    Boolean checkForUnreadData();
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/service/impl/InformationNotificationServiceImpl.java b/framework/src/main/java/com/yuanchu/mom/service/impl/InformationNotificationServiceImpl.java
new file mode 100644
index 0000000..153c74a
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/service/impl/InformationNotificationServiceImpl.java
@@ -0,0 +1,61 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.pojo.InformationNotification;
+import com.yuanchu.mom.mapper.InformationNotificationMapper;
+import com.yuanchu.mom.pojo.InformationNotificationDto;
+import com.yuanchu.mom.service.InformationNotificationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 娑堟伅閫氱煡 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-04-23 02:14:30
+ */
+@Service
+public class InformationNotificationServiceImpl extends ServiceImpl<InformationNotificationMapper, InformationNotification> implements InformationNotificationService {
+
+    @Autowired
+    private GetLook getLook;
+
+    @Override
+    public IPage<InformationNotificationDto> getPage(Page page, String messageType) {
+        return baseMapper.getPage(page, messageType);
+    }
+
+    @Override
+    public void markAllInformationReadOrDeleteAllReadMessages(Boolean isMarkAllInformationRead) {
+        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+        if (isMarkAllInformationRead) {
+            baseMapper.update(new InformationNotification(), Wrappers.<InformationNotification>lambdaUpdate()
+                    .set(InformationNotification::getViewStatus, true)
+                    .eq(InformationNotification::getConsigneeId, map1.get("userId")));
+        } else {
+            baseMapper.delete(Wrappers.<InformationNotification>lambdaUpdate()
+                    .eq(InformationNotification::getConsigneeId, map1.get("userId"))
+                    .eq(InformationNotification::getViewStatus, true));
+        }
+    }
+
+    @Override
+    public Boolean checkForUnreadData() {
+        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+        List<InformationNotification> informationNotifications = baseMapper.selectList(
+                Wrappers.<InformationNotification>lambdaQuery()
+                        .eq(InformationNotification::getConsigneeId, map1.get("userId"))
+                        .eq(InformationNotification::getViewStatus, false)
+                        .last("limit 1"));
+        return !informationNotifications.isEmpty();
+    }
+}
diff --git a/framework/src/main/resources/mapper/InformationNotificationMapper.xml b/framework/src/main/resources/mapper/InformationNotificationMapper.xml
new file mode 100644
index 0000000..8141046
--- /dev/null
+++ b/framework/src/main/resources/mapper/InformationNotificationMapper.xml
@@ -0,0 +1,14 @@
+<?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.yuanchu.mom.mapper.InformationNotificationMapper">
+
+    <select id="getPage" resultType="com.yuanchu.mom.pojo.InformationNotificationDto">
+        select i.*, u.name senderUser, u2.name consigneeUserr
+        from information_notification i
+                 left join user u on i.sender_id = u.id
+                 left join user u2 on u2.id = i.consignee_id
+        <if test="messageType != '' and messageType != null">
+            where i.message_type = #{messageType}
+        </if>
+    </select>
+</mapper>
diff --git a/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java b/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
index ebee0b5..e69e903 100644
--- a/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
+++ b/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
@@ -19,11 +19,10 @@
     public static String database_username = "root";
     public static String database_password= "123456";
     public static String author = "姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃";
-    public static String model_name = "/cnas-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
+    public static String model_name = "/framework"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
     public static String setParent = "com.yuanchu.mom"; // 鍖呰矾寰�
     public static void main(String[] args) {
         String projectPath = System.getProperty("user.dir");
-        System.out.println(projectPath+"===================");
         FastAutoGenerator.create(database_url, database_username, database_password)
                 // 鍏ㄥ眬閰嶇疆
                 .globalConfig(builder -> {
@@ -69,6 +68,7 @@
                             // Controller 绛栫暐閰嶇疆
                             .controllerBuilder()
                             .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠�
+                            .enableRestStyle() // 寮�鍚敓鎴怈RestController 鎺у埗鍣�
                     ;
                 })
                 //5銆佹ā鏉垮紩鎿�
diff --git a/system-run/src/main/resources/application.yml b/system-run/src/main/resources/application.yml
index 648b09f..821c7ce 100644
--- a/system-run/src/main/resources/application.yml
+++ b/system-run/src/main/resources/application.yml
@@ -3,6 +3,9 @@
 spring:
   profiles:
     active: dev
+  jackson: # 鍏ㄥ眬鏃堕棿澶勭悊 LocalDateTime鏃堕棿搴忓垪鍙�
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
   servlet:
     multipart:
       max-file-size: 20MB # 鍗曚釜鏂囦欢澶у皬

--
Gitblit v1.9.3