企业级应用之用户操作网站实时情况展示
本文源自Recently祝祝,创自Recently祝祝。转载请标注出处。
此解决方式在企业中有所应用,适合Java初级开发学习,参考。
本文字数与行数,耐心阅读必有收获。
1.为什么要进行用户操作网站实时情况展示
在企业中会有一个需求,就是对用户实时操作进行展示,每一个时间发生了什么,最近一个时间段内发生了什么,了解用户操作情况,展示用户在网站上的操作情况。但是这个发生了什么需要根据项目类型来决定的,比如一个电商网站,就会展示:XXX时间 某某提交了订单;XXX时间 某某支付成功等等、具有审核性质的网站,就能看出来某个时刻是谁审核了案件,如果案件出错应该找谁。所以大多数网站都会对用户操作网站实时情况进行展示。
而实现用户操作网站实时情况展示方式也有很多,例如实时数据监控页面,实时日志监控页面,实时通知和提醒页面等,而我下边说的也只是展示的方式中的一种,该方法在企业中有所应用,也是一个初级开发能想到的最优解决方式。
2.实现
不同项目的项目情景、对应的用户、用途是不一样的,而这个实施情况需要根据项目需求来定,像下边的这个需求,就是一个审核项目,用户登录,对申请进行操作,而相关操作也会在主要的两张表里边体现。
根据相关的表里的数据,对数据库进行查询,并且根据时间排序,只需要最近时间段的十条数据进行展示即可,并且关联人员id到用户表,就可以知道:“谁在那个时间进行了什么样的操作”,并且根据查询出来的数据,进行处理并且输出
1.1 Mapper实现
#TraumaTaskMapper类
List<RealTimeInfoDTO> realTimeSituation() throws Exception;
#DAO实现
<select id="realTimeSituation" resultType="com.interfaces.dto.analysis.RealTimeInfoDTO">
select * from
(select t.name,b.type,b.auditresult,c.name update_by,b.update_date
from traumatask t,tm_task_belong b, sys_user c
where t.id=b.taskid
and b.bussinessid = c.id
and t.del_flag='0'
order by b.update_date desc)
where rownum <= 10
</select>
该查询从数据库中检索名称、类型、审计结果、更新日期和更新依据信息,以获取最近 10 行数据,其中 traumatask
表中的 del_flag 值为“0”。
该查询使用内部联接根据 traumatask
、tm_task_belong
和 sys_user
表的公共字段(例如 taskid
和 bussinessid
)检索数据。
将输出的数据全部写入一个Java
类RealTimeInfoDTO
中。
resultType
属性指示此查询的结果将映射到应用程序代码中的 RealTimeInfoDTO
对象。
1.2 Service层实现
注意点:下边代码中,类型属性被定义为字符型,并使用字符'1'和'2'来表示类型,可以将类型属性定义为一个枚举类型,并使用枚举值来表示不同的类型。这样的话可读性更强,所以一般企业中都是使用枚举类型,这个比较符合规范
#Service层
List<String> realTimeSituation() throws Exception;
#Sevice层实现
@Autowired
private TraumaTaskMapper traumaTaskMapper;
@Override
public List<String> realTimeSituation() throws Exception {
List<String> list = new ArrayList<>();
List<RealTimeInfoDTO> taskList = traumaTaskMapper.realTimeSituation();
String dates = "";
for (RealTimeInfoDTO task : taskList) {
StringBuffer sb = new StringBuffer();
dates = DateUtils.getStringDate(task.getUpdateDate());
if ('1'.equals(task.getType())) {
sb.append(dates);
sb.append(" ");
sb.append(task.getUpdateBy());
sb.append("领取了");
sb.append(task.getName());
sb.append("的调查,进入审核");
} else if ('2'.equals(task.getType())) {
sb.append(dates);
sb.append(" ");
sb.append(task.getUpdateBy());
sb.append("提交了");
sb.append(task.getName());
sb.append("的审核");
}
list.add(sb.toString());
}
return list;
}
这段代码的作用是返回一个包含最近任务操作的字符串列表,以便管理员或运营人员了解网站上最近发生的事件。
接收不带参数的realTimeSituation()方法调用,并抛出任何异常。这个方法从一个名为traumaTaskMapper的对象调用realTimeSituation()方法,返回一个RealTimeInfoDTO对象列表。接着,该方法遍历该列表,并根据每个RealTimeInfoDTO对象的属性生成一个字符串,将其添加到名为list的字符串列表中。在遍历完成后,该方法返回list。
在生成字符串时,该方法检查RealTimeInfoDTO对象的类型属性。如果类型为'1',则生成一个包含“领取了调查,进入审核”的字符串;如果类型为'2',则生成一个包含“提交了审核”的字符串。在生成这些字符串时,该方法还使用了一个名为DateUtils的工具类,将日期属性转换为字符串。
这个方式是一个简单易于理解的解决方式,如果有更好更严谨的方式,你可以换一种方式,这个方式目前是已经可以解决实时需求了所以我就用了这个方式。
凭着一股干劲,不断往上冲
转载自:https://juejin.cn/post/7224314619867070501