109 lines
4.9 KiB
C#
109 lines
4.9 KiB
C#
using System;
|
||
using System.Data;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using WX.CRM.BLL.Base;
|
||
using WX.CRM.DAL;
|
||
|
||
namespace WX.CRM.CRMServices.WeiXin
|
||
{
|
||
public static class WWHHuserMonitor
|
||
{
|
||
private static BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL();
|
||
private static MySqlDbHelper mySqlhelper = new MySqlDbHelper("MysqlQWConn");
|
||
public static void Monitor()
|
||
{//6:30 -10
|
||
|
||
//dingtalk("企业号[ww796732d1128554fc],超30分钟没有聊天互动!");
|
||
var syskey = paramter_bl.GetModel_Patameter("WW_Hhuser_Monitor");//获取监听聊天记录 配置
|
||
var corpIds = paramter_bl.GetModel_Patameter("WW_Hhuser_Monitor_corpIds");//监听企业微信
|
||
string sql = $@"select corpId,max(lmsgtime) maxlmsgtime from ww_hhuser where corpId in ('" + string.Join("','", corpIds.PARAVALUE.Split(',')) + "') group by corpId";//查找最新时间数据
|
||
string msgStr = "";
|
||
var now = DateTime.Now;
|
||
//9.00-12.00-30; 开始监听时间-结束监听时间-超时分钟
|
||
//13.00-18.00-30;
|
||
//18.30-22.00-30
|
||
//周六日不判断
|
||
if (now.DayOfWeek == DayOfWeek.Sunday || now.DayOfWeek == DayOfWeek.Saturday) return;
|
||
foreach (var str in syskey.PARAVALUE.Trim().Split(';'))
|
||
{
|
||
var valArry = str.Split('-');
|
||
var startHour = valArry[0];//监听开始小时
|
||
var endHour = valArry[1];//监听结束小时
|
||
var limitMon = Convert.ToInt32(valArry[2]);//监听判断离线分钟数
|
||
|
||
if (CreateTime(startHour) < now && now < CreateTime(endHour))
|
||
{
|
||
DataSet table = mySqlhelper.ExecuteDataTable(sql);//查询数据
|
||
foreach (DataRow row in table.Tables[0].Rows)
|
||
{
|
||
var corpId = row["corpId"].ToString();
|
||
var maxlmsgtime = Convert.ToDateTime(row["maxlmsgtime"].ToString());
|
||
if ((now - maxlmsgtime).TotalMinutes > limitMon)
|
||
{
|
||
msgStr += "企业号[" + corpId + "],超" + limitMon + "分钟没有聊天互动!";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(msgStr))
|
||
{
|
||
//钉钉推送
|
||
var key = "WW_Hhuser_Monitor_Msg";
|
||
if (!Common.CacheHelper.Exists(key))
|
||
{
|
||
//钉钉通知
|
||
dingtalk(msgStr);
|
||
//缓存20分钟//缓存内容直接用key
|
||
Common.CacheHelper.Set(key, key, DateTime.Now.AddMinutes(20));
|
||
}
|
||
}
|
||
}
|
||
//钉钉通知
|
||
private static void dingtalk(string content)
|
||
{
|
||
string secret = "SEC492a12483adb64be903b54c716ce4e4be09ade0b79f061520a17f98952dc25f3";//机器人令牌
|
||
var timeStamp = getTimeStamp();
|
||
var sign = getSign(timeStamp, secret);
|
||
var dingtalk = $"https://oapi.dingtalk.com/robot/send?access_token=9f414d80a708399e7350e59daecae9ffb92ec1d1788eac5414e43f9b2d753c27×tamp={timeStamp}&sign={sign}";
|
||
var postBody = "{\"at\": {\"atMobiles\":[\"15710171652\"],\"atUserIds\":[],\"isAtAll\": false},\"text\": { \"content\":\"" + content + "\"},\"msgtype\":\"text\"}";
|
||
var res = Common.Utility.PostAjaxData(dingtalk, postBody, Encoding.UTF8);
|
||
}
|
||
|
||
private static string getSign(string timeStamp, string secret)
|
||
{
|
||
string stringToSign = timeStamp + "\n" + secret;
|
||
var encoding = new System.Text.ASCIIEncoding();
|
||
byte[] keyByte = encoding.GetBytes(secret);
|
||
byte[] messageBytes = encoding.GetBytes(stringToSign);
|
||
using (var hmacsha256 = new HMACSHA256(keyByte))
|
||
{
|
||
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
|
||
return System.Web.HttpUtility.UrlEncode(Convert.ToBase64String(hashmessage), Encoding.UTF8);
|
||
}
|
||
}
|
||
private static string getTimeStamp()
|
||
{
|
||
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
|
||
long shijianchuo = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000);
|
||
return shijianchuo.ToString();
|
||
}
|
||
private static DateTime CreateTime(string str)
|
||
{
|
||
var now = DateTime.Now;
|
||
if (str.IndexOf(".") > -1)
|
||
{
|
||
var H = Convert.ToInt32(str.Split('.')[0]);
|
||
var m = Convert.ToInt32(str.Split('.')[1]);
|
||
return new DateTime(now.Year, now.Month, now.Day, H, m, 0);
|
||
}
|
||
else
|
||
{
|
||
|
||
return new DateTime(now.Year, now.Month, now.Day, Convert.ToInt32(str), 0, 0);
|
||
}
|
||
}
|
||
}
|
||
}
|