TG.WXCRM.V4/CRMServices/WeiXin/WWHHuserMonitor.cs

109 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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&timestamp={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);
}
}
}
}