likes
comments
collection
share

企业级应用之用户操作网站实时情况展示

作者站长头像
站长
· 阅读数 58

​本文源自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 &lt;= 10
</select>

该查询从数据库中检索名称、类型、审计结果、更新日期和更新依据信息,以获取最近 10 行数据,其中 traumatask 表中的 del_flag 值为“0”。

该查询使用内部联接根据 traumatasktm_task_belongsys_user 表的公共字段(例如 taskidbussinessid)检索数据。

将输出的数据全部写入一个JavaRealTimeInfoDTO中。

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
评论
请登录