Crunchy
2024-04-23 0a49707dd4dbacf83935b8b00af27cdf29c02b10
2024-4-23 消息通知后端开放
已修改3个文件
已添加7个文件
319 ■■■■■ 文件已修改
framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/controller/InformationNotificationController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mapper/InformationNotificationMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/pojo/InformationNotification.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/pojo/InformationNotificationDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/service/InformationNotificationService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/service/impl/InformationNotificationServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/InformationNotificationMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {
        // è¿”回给前端去除null
        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);
    }
}
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());
    }
}
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);
}
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;
}
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;
}
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();
}
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();
    }
}
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>
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、模板引擎
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 # å•个文件大小