using System; using System.Collections.Generic; using System.Linq; using WX.CRM.DAL; namespace WX.CRM.CRMServices.WeiXin { public static class SummaryMessage { public static MySqlDbHelper mySqlhelper = new MySqlDbHelper("MysqlQWConn");//读取 /// /// 汇总 /// public static void Summary() { //所有企业 var allCorp = mySqlhelper.ExecuteDataDictionary("select * from ww_corp"); //设置缓存表内存 mySqlhelper.ExecuteScalar("SET GLOBAL tmp_table_size = 3 * 1024*1024*1024"); mySqlhelper.ExecuteScalar("SET GLOBAL innodb_buffer_pool_size = 3 * 1024*1024*1024"); //查询是否有数据 //判断昨天是否已有数据插入 var dataCountDic = mySqlhelper.ExecuteDataDictionary($"select Count(*) as count from ww_message_cacheLog where msgtime >= '{DateTime.Now.Date.AddDays(-1)}' and msgtime< '{DateTime.Now.Date}' "); var dataCount = Convert.ToInt32(dataCountDic.First()["count"]); if (dataCount == 0) { foreach (var item in allCorp) { var DBName = $"wework_{item["corpid"]}";//库名 var corpId = item["corpid"].ToString();//企业号id var tabName = $"{DBName}.ww_message_{DateTime.Now.ToString("yyyyMM")}"; //将昨日数据插入临时表 var sql = $@" insert into ww_message_cacheLog (`corpid`,`fromer`,`tolist`,msgtime) select '{corpId}' as `corpid`,fromer, tolist, msgtime from {tabName} where msgtime >= '{DateTime.Now.Date.AddDays(-1)}' and msgtime< '{DateTime.Now.Date}' and roomid = ''"; mySqlhelper.ExecuteNonQuery(sql, 600);//数据量较大 等待10分钟 } } } /// /// 统计并推送 /// public static void Push() { IList> dataList = new List>(); //发送记录 var pushList = mySqlhelper.ExecuteDataDictionary($@" SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; select a.corpid,fromer,tolist,count(*) as `sum` from ww_message_cacheLog a left join ww_hhuser b on a.fromer=b.userid and a.corpid=b.corpid where b.userid is not null group by a.corpid,fromer,tolist; COMMIT;", 30); //接受记录 var getList = mySqlhelper.ExecuteDataDictionary($@" SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; select a.corpid,fromer,tolist,count(*) as `sum` from ww_message_cacheLog a left join ww_hhuser b on a.tolist=b.userid and a.corpid=b.corpid where b.userid is not null group by a.corpid,fromer,tolist; COMMIT;", 30); //接受记录 tolist=> fromer颠倒 var getDic = getList.ToDictionary(m => $"{m["corpid"]}_{m["tolist"]}_{m["fromer"]}", n => n["sum"].ToString()); foreach (var item in pushList) { IDictionary r = new Dictionary(); var key = $"{item["corpid"]}_{item["fromer"]}_{item["tolist"]}"; r.Add("id", "LAST_INSERT_ID()"); r.Add("appid", item["corpid"].ToString()); r.Add("userid", item["fromer"].ToString()); r.Add("externaluserid", item["tolist"].ToString()); r.Add("pushCount", item["sum"].ToString()); if (getDic.TryGetValue(key, out string getCount)) { r.Add("getCount", getCount); } else { r.Add("getCount", "0"); } r.Add("ctime", DateTime.Now.ToString()); r.Add("smgDate", DateTime.Now.Date.AddDays(-1).ToString());//每次统计昨天 r.Add("ispush", "0");//是否推送 dataList.Add(r); } //清空本次请求需要入库的现有数据(当日重复触发时需要) mySqlhelper.ExecuteNonQuery($"delete from ww_message_summary where msgDate = '{DateTime.Now.Date.AddDays(-1)}'"); //插入dncms库 mySqlhelper.InsertBigList(dataList, "ww_message_summary"); //清空已经处理数据 mySqlhelper.ExecuteNonQuery($"truncate table ww_message_cacheLog"); } } }