cheng
2024-01-28 31016f01ec27432295e77d1720b19cd5fd37ce72
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
132
package com.product.data.center.service;
 
import java.util.Date;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.alibaba.fastjson.JSONObject;
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.websocket.service.WebsocketMesssageServiceThread;
import com.product.data.center.config.CmnConst;
import com.product.util.BaseUtil;
 
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
 
@Service("autoSendErrorLogMassage")
public class SendMessageTaskService extends AbstractBaseService{
 
    @Autowired
    BaseDao baseDao;
 
    /**
     *     获取周期内产生错误的日志信息(日志uuid,操作类型,操作表,操作时间区间)
     *     同操作、同表、同期内只取一次记录
     * @param period    周期(分钟)
     */
    public void getAllErrorLog(Integer period) {
        Date currentDate=new Date();
 
        StringBuilder sb = new StringBuilder(256);
        sb.append(" SELECT ")
        .append(" B.config_uuid,B.type,B.uuid,B.end_time,B.start_time,A.source_table ")
        .append(" FROM( ")
        .append(" SELECT ")
        .append(" config_uuid,type,uuid, ")
        .append(" DATE_FORMAT(Max(statistics_final_time),'%Y-%m-%d %H:%i:%s') end_time, ")
        .append(" DATE_FORMAT(Max(statistics_start_time),'%Y-%m-%d %H:%i:%s') start_time ")
        .append(" FROM product_sys_data_center_log ")
        .append(" WHERE result=0 AND (deal_flag=0 OR deal_flag IS NULL) ")
        .append(" AND created_utc_datetime>date_add(now(),interval -").append(period).append(" minute) AND created_utc_datetime<=now() ")
        .append(" GROUP BY config_uuid ")
        .append(" )B ")
        .append(" LEFT JOIN product_sys_data_center_config_view A ON a.uuid = B.config_uuid");
 
        DataTableEntity dtErrorLog = baseDao.listTable(sb.toString(), new Object[] {});
        if(!BaseUtil.dataTableIsEmpty(dtErrorLog)) {
 
            JSONObject allType = getAllOpreaType();
 
            // 发送给所有的管理员
            DataTableEntity managerDte = baseDao.listTable("product_sys_org_manager", "is_used=1");
            StringBuilder receiver = new StringBuilder(32);
            FieldSetEntity managerFse;
            for (int i = 0; i < managerDte.getRows(); i++) {
                managerFse = managerDte.getFieldSetEntity(i);
                if (receiver.length() > 0) {
                    receiver.append(",");
                }
                receiver.append(managerFse.getString("user_id"));
            }
 
            for (int i = 0; i < dtErrorLog.getRows(); i++) {
                createdAndSendMassage(dtErrorLog.getFieldSetEntity(i), allType, receiver.toString());
            }
 
        }
    }
 
    /**
     *     通过错误日志信息,生成消息
     * @param fseErrorLog
     * @param allType
     * @param receiver
     */
    public void createdAndSendMassage(FieldSetEntity fseErrorLog, JSONObject allType, String receiver) {
        //生成标题和内容
        StringBuilder massageTitle = new StringBuilder(64);
        StringBuilder massageContent = new StringBuilder(64);
 
        String sourceTable=fseErrorLog.getString(CmnConst.SOURCE_TABLE);
        if (!BaseUtil.strIsNull(sourceTable)) {
            massageTitle.append("《").append(sourceTable).append("表");
            massageContent.append(sourceTable).append("表");
        }
 
        String type = fseErrorLog.getString(CmnConst.TYPE);
        if (!BaseUtil.strIsNull(type)) {
            massageTitle.append(allType.get(type)).append("出错").append("》");
            massageContent.append(allType.get(type)).append("出错");
        }
 
 
        String startTime = fseErrorLog.getString(CmnConst.START_TIME);
        String endTime = fseErrorLog.getString(CmnConst.END_TIME);
        if (!BaseUtil.strIsNull(startTime) && !BaseUtil.strIsNull(endTime)) {
            massageContent.append("任务于")
            .append(startTime)
            .append("~")
            .append(endTime)
            .append("期间出现报错,请及时查看并处理!");
        }else {
            massageContent.append("任务出现报错,请及时查看并处理!");
        }
 
        String uuid = fseErrorLog.getString(CmnConst.UUID);
        if(!BaseUtil.strIsNull(uuid)) {
            WebsocketMesssageServiceThread.getInstance().appendMessage(receiver, massageContent.toString(), massageTitle.toString(), 1, "1",
                    "166269029153939a5ln9629?uuid="+uuid+"&config_uuid="+fseErrorLog.getString(CmnConst.CONFIG_UUID)+"&type="+type , CmnConst.PRODUCT_SYS_DATA_CENTER_LOG, uuid, 1, 0, 0);
        }
    }
 
    /**
     *     获取所有操作类型
     * @return
     */
    public JSONObject getAllOpreaType() {
        DataTableEntity dtAllType = baseDao.listTable(CmnConst.PRODUCT_SYS_DICT, " dict_name='journal_type' ");
        if (!BaseUtil.dataTableIsEmpty(dtAllType)) {
            JSONObject json = new JSONObject();
            for (int i = 0; i < dtAllType.getRows(); i++) {
                FieldSetEntity fseType = dtAllType.getFieldSetEntity(i);
                json.put(fseType.getString(CmnConst.DICT_VALUE), fseType.getString(CmnConst.DICT_LABEL));
            }
            return json;
        }
        return null;
    }
}