using NetCore.BLL; using NetCore.Common; using NetCore.Model; using NetCore.Model.enums; using NetCore.Model.qw; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace NetCore.Service.QW { /// /// 补充关键字 /// public class MakeUpThread { public string corpid { get; set; } /// /// 生成的ID /// public int seq { get; set; } /// /// 最大得补充序号 /// public int maxseq { get; set; } /// /// 表名称 /// public string tablename { get; set; } /// /// 企业名称 /// public string name { get; set; } /// /// 随机数 /// public string matchstr { get; set; } /// /// 合规清洗取得数据量 /// public int hgclearcount { get; set; } /// /// 客户发得消息是否需要合规,默认0不需要 1需要 /// public int cusmsgdeedhg { get; set; } /// /// 执行得makeupid /// public int makeupid { get; set; } public hg_excute_log log { get; set; } public List words { get; set; } public string keyName { get; set; } /// /// 需要补充得集合 /// public List makeuplist { get; set; } /// /// 是否需要sleep /// private bool needSleep { get; set; } public string comcode { get; set; } public void execute() { bas_config_bll _config_bll = new bas_config_bll(comcode); bool isFinish = false; while (isFinish == false) { needSleep = false; int sleepTime = _config_bll.GetIntConfig(BasConfigEnum.MakeUpSleepTime); try { bas_config config = _config_bll.GetConfig(BasConfigEnum.HgClearCount); hgclearcount = config != null ? Convert.ToInt32(config.value) : 1000;//重配置中获取最新的数量配置 int SeqMax = seq; hg_make_up_bll _makeupbll = new hg_make_up_bll(comcode); bas_config_bll _configbll = new bas_config_bll(comcode); ww_message_bll _msgbll = new ww_message_bll(comcode); hg_message_bll _hgmsgbll = new hg_message_bll(comcode); hg_message_word_bll _hgmsgwordbll = new hg_message_word_bll(comcode); log = new hg_excute_log() { corpid = corpid, starttime = DateTime.Now, name = name, seq = seq, tablename = tablename }; Console.WriteLine(string.Format("补充线程开始:corpid:{0},name:{1},seq:{2},talename:{3},matchstr:{4}", corpid, name, seq, tablename, matchstr)); List nowtable = _configbll.GetCorpTable(corpid);//本月及本月之前的表 if (!nowtable.Any()) { Console.WriteLine(string.Format("没有消息表,corpid:{0},name:{1},seq:{2},talename:{3},matchstr:{4}", corpid, name, seq, tablename, matchstr)); log.status = 500; log.message = "can't find message tables!"; GoLog(); return; } string nowtablename = string.Format("ww_message_{0}", DateTime.Now.ToString("yyyyMM"));//当前时间应该的名称 if (string.IsNullOrEmpty(tablename)) { tablename = nowtable.OrderBy(m => m.table_name).FirstOrDefault().table_name; } List hgmsgList = _msgbll.GetList(tablename, corpid, hgclearcount, seq,0,DateTime.Now);///获取消息数据量 int hegRows = 0; if (hgmsgList.Any()) { foreach (ww_message item in hgmsgList) { SeqMax = item.seq > SeqMax ? item.seq : SeqMax; if (cusmsgdeedhg == 0 && item.fromer.Length == 32)//客户发得消息,不做合规 continue; bool weiguile = false;//违规了 List wordlist = new List(); foreach (hg_keyword word in words) { if (KeyWordHelper.IsViolation(item.content, word.keyword))//发现违规关键字 { wordlist.Add(new hg_message_word() { keyword = word.keyword, msgid = item.msgid }); weiguile = true; } } if (weiguile) { hegRows++; _hgmsgwordbll.AddList(wordlist.ToArray());//新增消息违规关键字表 hg_message msg = new hg_message() { action = item.action, //fromer = item.fromer, //tolist = item.tolist, content = item.content, corpid = corpid, cusname = "", ext = item.ext, hgstatus = 90, //issend = 1, kehuname = "", msgid = item.msgid, msgtype = item.msgtype, nfile = item.nfile, roomid = item.roomid, seq = item.seq, msgtime = item.msgtime, }; if (string.IsNullOrEmpty(item.roomid))//非群得合规表 { if (item.fromer.Length == 32)//客户发得消息 { msg.issend = 0; msg.fromer = item.tolist; msg.tolist = item.fromer; } else { msg.issend = 1; msg.fromer = item.fromer; msg.tolist = item.tolist; } _hgmsgbll.Add(msg); } else { _hgmsgbll.AddGroupMsg(msg); } } } _hgmsgbll.StartInsert(); } else { if (nowtablename != tablename)//找不到数据,将表修改到下一个表 { corptable nexttable = nowtable.Where(m => String.Compare(m.table_name, tablename) == 1).OrderBy(m => m.table_name).FirstOrDefault();//取大于当前tablename得数据 if (nexttable != null) { tablename = nexttable.table_name;//跳到下一个表 } } else { needSleep = true;//需要sleep } } _makeupbll.update(makeuplist, SeqMax, tablename);//修改执行状态 log.status = 200; log.message = string.Format("succed {2} rows:seq {0}~{1} ,and hg {3} rows", seq, SeqMax, hgmsgList.Count, hegRows); GoLog(); seq = SeqMax; if (seq >= maxseq) { isFinish = true; Program.ToFinishMakeUp(keyName);//修改完成状态 } _hgmsgbll.Clear(); } catch (Exception e) { Console.WriteLine(string.Format("补充线程错误:corpid:{0},name:{1},seq:{2},talename:{3},matchstr:{4},erro:", corpid, name, seq, tablename, matchstr, e.ToString())); log.status = 500; log.message = "system erro:" + e.ToString(); GoLog(); LogHelper.Error(e.ToString()); Program.ToFinishMakeUp(keyName);//完犊子了,修改状态 } finally { Console.WriteLine(string.Format("补充线程结束:corpid:{0},name:{1},seq:{2},talename:{3},matchstr:{4},信息:{5}", corpid, name, seq, tablename, matchstr, log.message)); } if (isFinish == false) { if (needSleep) { Thread.Sleep((sleepTime == 0 ? 5 : sleepTime) * 60 * 1000);//默认5分钟执行一次,从数据库获取 } else { Thread.Sleep(5000);//如果有数据就只休息5秒钟 } } } } /// /// 执行日志记录 /// public void GoLog() { log.endtime = DateTime.Now; log.exscend = (int)(log.endtime.Value - log.starttime.Value).TotalSeconds; hg_excute_log_bll bll = new hg_excute_log_bll(comcode); var picilist = makeuplist.GroupBy(m => new { m.pici }); foreach (var item in picilist) { log.pici = item.Key.pici;//执行入库 bll.Log(log); } } } }