设计消息模块的持久层

news2024/10/7 3:17:08

一、创建MessageDao类 

 

在 com.example.emos.wx.db.dao 包中创建 MessageDao.java 类

@Repository
public class MessageDao {
    @Autowired
    private MongoTemplate mongoTemplate;

    public String insert(MessageEntity entity){
        Date sendTime=entity.getSendTime();
        sendTime=DateUtil.offset(sendTime, DateField.HOUR,8);
        entity.setSendTime(sendTime);
        entity=mongoTemplate.save(entity);
        return entity.get_id();
    }

    public List<HashMap> searchMessageByPage(int userId,long start,int length){
        JSONObject json=new JSONObject();
        json.set("$toString","$_id");
        Aggregation aggregation=Aggregation.newAggregation(
                Aggregation.addFields().addField("id").withValue(json).build(),
                Aggregation.lookup("message_ref","id","messageId","ref"),
                Aggregation.match(Criteria.where("ref.receiverId").is(userId)),
                Aggregation.sort(Sort.by(Sort.Direction.DESC,"sendTime")),
                Aggregation.skip(start),
                Aggregation.limit(length)
        );
        AggregationResults<HashMap> results=mongoTemplate.aggregate(aggregation,"message",HashMap.class);
        List<HashMap> list=results.getMappedResults();
        list.forEach(one->{
            List<MessageRefEntity> refList= (List<MessageRefEntity>) one.get("ref");
            MessageRefEntity entity=refList.get(0);
            boolean readFlag=entity.getReadFlag();
            String refId=entity.get_id();
            one.put("readFlag",readFlag);
            one.put("refId",refId);
            one.remove("ref");
            one.remove("_id");
            Date sendTime= (Date) one.get("sendTime");
            sendTime=DateUtil.offset(sendTime,DateField.HOUR,-8);

            String today=DateUtil.today();
            if(today.equals(DateUtil.date(sendTime).toDateStr())){
                one.put("sendTime",DateUtil.format(sendTime,"HH:mm"));
            }
            else{
                one.put("sendTime",DateUtil.format(sendTime,"yyyy/MM/dd"));
            }
        });
        return list;
    }

    public HashMap searchMessageById(String id){
        HashMap map=mongoTemplate.findById(id,HashMap.class,"message");
        Date sendTime= (Date) map.get("sendTime");
        sendTime=DateUtil.offset(sendTime,DateField.HOUR,-8);
        map.replace("sendTime",DateUtil.format(sendTime,"yyyy-MM-dd HH:mm"));
        return map;
    }
}

二、创建MessageRefDao类 

 

在 com.example.emos.wx.db.dao 包中创建 MessageRefDao.java 类

@Repository
public class MessageRefDao {
    @Autowired
    private MongoTemplate mongoTemplate;

    public String insert(MessageRefEntity entity) {
        entity = mongoTemplate.save(entity);
        return entity.get_id();
    }

    public long searchUnreadCount(int userId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("readFlag").is(false).and("receiverId").is(userId));
        long count = mongoTemplate.count(query, MessageRefEntity.class);
        return count;
    }

    public long searchLastCount(int userId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("lastFlag").is(true).and("receiverId").is(userId));
        Update update = new Update();
        update.set("lastFlag", false);
        UpdateResult result = mongoTemplate.updateMulti(query, update, "message_ref");
        long rows = result.getModifiedCount();
        return rows;
    }

    public long updateUnreadMessage(String id){
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(id));
        Update update = new Update();
        update.set("readFlag", true);
        UpdateResult result = mongoTemplate.updateFirst(query, update, "message_ref");
        long rows = result.getModifiedCount();
        return rows;
    }

    public long deleteMessageRefById(String id){
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(id));
        DeleteResult result=mongoTemplate.remove(query,"message_ref");
        long rows=result.getDeletedCount();
        return rows;
    }

    public long deleteUserMessageRef(int userId){
        Query query = new Query();
        query.addCriteria(Criteria.where("receiverId").is(userId));
        DeleteResult result=mongoTemplate.remove(query,"message_ref");
        long rows=result.getDeletedCount();
        return rows;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【day4】类和对象

#include <iostream> using namespace std;class Complex {int real;int vir; public:Complex(){}Complex(int a,int b):real(a),vir(b){}void show(){cout << real << "" << vir << "i" << endl;}//成员函数版的运算…

Java基础-lambda表达式

简化匿名内部类的书写 下面两种写法均可&#xff1b; Arrays.sort(arr, new Comparator<Integer>() {Overridepublic int compare(Integer o1, Integer o2) {return o1 - o2;} }); Arrays.sort(arr, (Integer o1, Integer o2) -> {return o1 - o2;} );函数式编程思想&…

山西电力市场日前价格预测【2023-07-01】

日前价格预测 预测明日&#xff08;2023-07-01&#xff09;山西电力市场全天平均日前电价为364.57元/MWh。其中&#xff0c;最高日前价格为451.88元/MWh&#xff0c;预计出现在21: 30。最低日前电价为309.59元/MWh&#xff0c;预计出现在13: 30。以上预测仅供学习参考&#xff…

LabVIEW开发工业物联网状态监测

物理对象的网络&#xff0c;允许在它们之间传输数据。信息通常保存在集中式云数据库中。由于物联网&#xff0c;我们现在可以从远处进行监控和感知。由于网络和通信的增加&#xff0c;越来越多的流程可能会自动化。 调度、维护管理和质量改进等关键领域的决策正受到大数据技术…

python接口自动化(六)--发送get请求接口(详解)

简介 如果想用python做接口测试&#xff0c;我们首先有不得不了解和学习的模块。它就是第三方模块&#xff1a;Requests。 虽然Python内置的urllib模块&#xff0c;用于访问网络资源。但是&#xff0c;它用起来比较麻烦&#xff0c;而且&#xff0c;缺少很多实用的高级功能。更…

Git入门级指南

Git入门级指南 在软件开发和版本控制中&#xff0c;Git是一种非常流行且强大的工具。本文将为你提供关于Git的基本知识&#xff0c;并提 供一些实例来演示如何正确使用Git来管理代码。 关于git的简介 Git是一种分布式版本控制系统&#xff0c;它可以跟踪和管理项目中的代码…

前端安全问题及解决方案

随着互联网的高速发展&#xff0c;信息安全问题已经成为行业最为关注的焦点之一。总的来说安全是很复杂的一个领域&#xff0c;在移动互联网时代&#xff0c;前端人员除了传统的 XSS、CSRF 等安全问题之外&#xff0c;还时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。…

(2023最新)互联网1010道Java面试真题汇总

我相信各位小伙伴们都发现了&#xff0c;现在的 IT 的环境并不如以前了&#xff0c;似乎是迎来“寒冬”&#xff0c;再加上最近上热搜的阿里云大裁员事件&#xff0c;又将 Java 开发岗推上了一个新的难度。而被裁员的人&#xff0c;不得不降薪重新找到一份工作&#xff0c;而经…

Django框架-5

路由系统 通过URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;可以访问互联网上的资源——用户通过 浏览器向指定URL发起请求&#xff0c;Web服务器接收请求并返回用户请求的资源&#xff0c;因此可以将URL视为用户与服务器之间交互的桥梁。 …

MATLAB中scatter函数用法

目录 语法 说明 ​示例 scatter函数的功能是绘制散点图。 语法 scatter(x,y) scatter(x,y,sz) scatter(x,y,sz,c) scatter(___,"filled") scatter(___,mkr) scatter(tbl,xvar,yvar) scatter(tbl,xvar,yvar,"filled") scatter(ax,___) scatter(___,Nam…

Mybatis面试题--MyBatis延迟加载

Mybatis是否支持延迟加载&#xff1f; 答&#xff1a;Mybatis支持延迟记载&#xff0c;但默认没有开启 什么叫做延迟加载&#xff1f; 查询用户的时候&#xff0c;把用户所属的订单数据也查询出来&#xff0c;这个是立即加载 查询用户的时候&#xff0c;暂时不查询订单数据&…

【C/C++】拷贝构造函数的调用 使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Linux--询问符:-i

功能&#xff1a; 执行某个操作时&#xff0c;Linux会询问用户是否确定执行操作。只有输入yes或者y才能成功执行操作。输入no或者n或者enter则操作失败 示例&#xff1a; ①确认操作 ②反悔操作

美工面试题目(合集)

美工面试题目篇1 1、目前常用的WEB标准静态页面语言是。(4分) 2、改变元素的外边距用&#xff0c;改变元素的内填充用。(6分) 3、在Table中&#xff0c;TR是&#xff0c;TD是。(6分) 4、如果给一行两列的表格(table)定义高度样式&#xff0c;在标签中定义最合理&#xff0c…

js中改变this指向的三种方式

js中改变this指向的三种方式 1、call方法2、apply方法3、bind方法 1、call方法 使用 call 方法调用函数&#xff0c;同时指定函数中 this 的值&#xff0c;使用方法如下代码所示&#xff1a; <script>const obj {uname: 刘德华}function fn(x, y) {console.log(this) …

Java Stream 流进行根据元素某一属性过滤计算其他属性实例

设计一个测试类Tuser package org.example;import com.alibaba.fastjson.annotation.JSONField;import java.io.Serializable;public class Tuser implements Serializable {//用户名private String name;//平台名称private String sys;//登录次数private int times;//一个合并…

如何使用计算机视觉检测钓鱼攻击?

无论你是喜欢、还是厌恶、亦或害怕&#xff0c;以ChatGPT为代表的新兴人工智能&#xff08;AI&#xff09;平台&#xff0c;目前正在更加深入地迈向公共领域。它们不仅表现为各种聪明的聊天机器人&#xff0c;而且能够在幕后以多种创新方式被广泛使用。其中&#xff0c;最为典型…

audio2face 与ue5结合实时语音嘴型同步

audio2face部分 1.安装audio2face以及localserver 2.打开streamingplayer的demo场景 3.localhost/NVIDIA/Assets/Audio2face/blendshape_solve目录下找到male_bs_arkit.usd拖拽到场景 4.选中场景中的male_bs_arkit.usd将分页切换到A2F data convert分页 5.参数设置 6.设置…

mysql用户相关操作

一、如何查看系统存在多少用户&#xff1f; 相关命令&#xff1a; SELECT COUNT(*) FROM mysql.user; SELECT User FROM mysql.user; DESC mysql.user; 二、如何查看用户是否设置密码&#xff1f; 在 MySQL 中&#xff0c;用户密码是被加密的&#xff0c;不可以直接查看用户…

cmake构建一个项目,同时依赖一个静态库项目和一个动态库项目

目录切到build中&#xff0c;然后cmake ..&#xff0c;生成VS解决方案 chengChu 文件夹 SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) #windows构建动态库时 , 加上这个会生成dll文件的同时生成lib文件&#xff0c;否则只…