shicf
2026-03-04 b3a7f85ace4913f1dbdf321a5ddd424192a8a06b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.product.mobile.core.service;
 
import com.product.admin.config.CmnConst;
import com.product.common.lang.StringUtils;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.service.support.AbstractBaseService;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.module.sys.entity.SystemUser;
import com.product.module.sys.service.UserService;
 
import java.util.ArrayList;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
/**
 * Copyright © 6c
 *
 * @Date: 2022-03-18 08:41
 * @Author: 6c
 * @Description:
 */
@Component
public class SysMessageService extends AbstractBaseService {
    @Autowired
    private BaseDao baseDao;
    @Autowired
    private UserService userService;
 
    /**
     * 列表-已读消息
     * @param fse
     * @return
     */
    public DataTableEntity listReadMessage(FieldSetEntity fse) {
        ArrayList <Object> ps= new ArrayList<Object>();
        String readType = StringUtils.isEmpty(fse.getString("read")) ? "1" : fse.getString("read");
        ps.add(readType);
        ps.add(SpringMVCContextHolder.getCurrentUserId());
        StringBuilder f=new StringBuilder();
        if(fse.getString("type")!=null) {
            f.append(" and SUBSTRING(m.message_type,1,1)=?");
            ps.add(fse.getString("type"));
        }
        if(!StringUtils.isEmpty(fse.getString("key"))) {
            f.append( " and (title like concat('%',?,'%') or content like concat('%',?,'%')  or user_name like concat('%',?,'%') ) ");
            ps.add(fse.getString("key"));
            ps.add(fse.getString("key"));
            ps.add(fse.getString("key"));
        }
        StringBuilder sql = new StringBuilder();
        sql.append("\nselect m.uuid,m.title,m.content,m.send_user_id,mu.user_name send_user_name,m.send_time,m.message_type,ifnull(m.url,'') url,source_table,source_uuid,thumbnail_img ");
        sql.append("\nfrom product_sys_message m");
        sql.append("\nleft join product_sys_users mu on mu.user_id=m.send_user_id ");
        sql.append("\ninner join product_sys_message_user u on u.message_uuid=m.uuid and ifnull(u.read_type, 0)=? and u.user_id=? ").append(f);
        sql.append("\norder by m.send_time desc");
        DataTableEntity dte = baseDao.listTable(sql.toString(), ps.toArray(), fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE));
        dte.getMeta().addAliasTable("product_sys_message", "m");
        baseDao.loadPromptData(dte);
 
        // 头像
        FieldSetEntity tempFse;
        for (int i = 0;i < dte.getRows();i++) {
            tempFse = dte.getFieldSetEntity(i);
            tempFse.setValue(com.product.core.websocket.config.CmnConst.SEND_THUMBNAIL_IMG, userService.getUserAvatar(tempFse.getString("send_user_id_save_value")));
        }
 
        return dte;
    }
    /**
     * 统计分类型消息
     * @param fse
     * @return
     */
    public DataTableEntity getTypeMessage(Object type,int read) {
 
        ArrayList<Object> ps= new ArrayList<Object>();
        ps.add(SpringMVCContextHolder.getCurrentUserId());
        ps.add(read);
        String f="";
        if(type!=null) {
            f=" and SUBSTRING(message_type,1,1)=?";
            ps.add(type);
        }
        StringBuilder sql = new StringBuilder();
        sql.append("\nselect  SUBSTRING(message_type,1,1)  message_type, count(*) num from product_sys_message m inner join product_sys_message_user u on u.message_uuid=m.uuid  \r\n"
                + "and u.user_id=? and u.read_type=?").append(f).append(" group by  SUBSTRING(message_type,1,1)  ");
        DataTableEntity dte = baseDao.listTable(sql.toString(),ps.toArray(),Integer.MAX_VALUE, 1);
        return dte;
    }
    /**
     * 统计分类型消息,会议、任务、最新消息、历史消息
     * @param fse
     * @return
     */
    public DataTableEntity getTypeMessage() {
 
        ArrayList<Object> ps= new ArrayList<Object>();
        SystemUser user=SpringMVCContextHolder.getCurrentUser();
        ps.add(user.getUser_id());
        StringBuilder sql = new StringBuilder();
        sql.append(" select  read_type  message_type, count(*) num from product_sys_message m inner join product_sys_message_user u on u.message_uuid=m.uuid  \r\n"
                + "and u.user_id=? ").append(" group by  read_type  ");
        ///我的会议
        sql.append( " union all select 2 as message_type,count(*) num from product_oa_conference_apply where ( CONCAT(',',meeting_master,',') like '%,")
        .append(user.getUser_id()).append(",%' ")
        .append(" or CONCAT(',',meeting_recorder,',') like '%,")
        .append(user.getUser_id()).append(",%'")
        .append(" or CONCAT(',',participator,',') like '%,")
        .append(user.getUser_id()).append(",%'")
        .append(" ) and (start_time>now() or (start_time<now() and now()<end_time))"
        );
        ///未结束的任务
        sql.append( " union all  select 3 as message_type,count(*) num from  product_oa_task_distribution where task_status=1 and finish_type=0 ");
        sql.append( " and  ( CONCAT(',',task_persons,',') like '%,").append(user.getUser_id()).append(",%' ");
        DataTableEntity dt=baseDao.listTable("product_sys_org_levels", "org_level_leader_uuid=?", new String[] {user.getUuid()});
        
        if(!DataTableEntity.isEmpty(dt)) {
            for(int i=0;i<dt.getRows();i++) {
                sql.append(" or CONCAT(',',task_org,',') like '%,").append(dt.getString(i, "uuid")).append(",%' ");
            }
        }
        sql.append(" )");
        
        DataTableEntity dte = baseDao.listTable(sql.toString(),ps.toArray());
        return dte;
    }
    
}