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