using NetCore.BLL; using NetCore.BLL.wx; using NetCore.Common; using NetCore.Model; using NetCore.Model.enums; using NetCore.Model.qw; using NetCore.Model.wx; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Web; namespace NetCore.Service.WX { public class wxFilesThread { /// /// 表名称 /// public string tablename { get; set; } public string threadKey { get; set; } /// /// 随机数 /// public string matchstr { get; set; } /// /// 合规清洗取得数据量 /// public int hgclearcount { get; set; } //public List words { get; set; } public string keyName { get; set; } /// /// 是否需要sleep /// private bool needSleep { get; set; } public string comcode { get; set; } public void execute() { hg_keyword_bll _keyword = new hg_keyword_bll(comcode); bas_config_bll _config_bll = new bas_config_bll(comcode); wx_hg_man_config_bll _manconfigbll = new wx_hg_man_config_bll(comcode); //hg_man_config_bll _manconfigbll = new hg_man_config_bll(); //ww_message_bll _msgbll = new ww_message_bll(); //hg_message_word_bll _hgmsgwordbll = new hg_message_word_bll(); wx_hg_ordervoice_bll _ordervoice = new wx_hg_ordervoice_bll(comcode); try { string coreVoiceUrl = ConfigHelper.GetSectionValue($"{comcode}_Config:fileConfig:coreVoiceUrl"); string wxUrl = ConfigHelper.GetSectionValue($"{comcode}_Config:fileConfig:wxUrl"); string wxPath = ConfigHelper.GetSectionValue($"{comcode}_Config:fileConfig:wxPath"); string transBackUrl = ConfigHelper.GetSectionValue($"{comcode}_Config:fileConfig:transBackUrl"); while (true) { needSleep = false;//默认不需要 睡眠 int sleepTime = _config_bll.GetIntConfig(BasConfigEnum.ManThreadSleepTime); try { //第一步进行获取配置,查看wx_filepath到那个位置了 wx_hg_man_config manconfig = _manconfigbll.GetFilePathConfig();//获取微信的当前配置 DateTime now = DateTime.Now;//如果没有配置,那就从今天开始运算 var todaytime = new DateTime(now.Year, now.Month, now.Day); if (manconfig == null)//没数据就插入数据 { _manconfigbll.Add(new wx_hg_man_config() { pkid = 0, tablename = "wx_filepath", checkdate = todaytime, status = 0 }); manconfig = _manconfigbll.GetFilePathConfig();//获取微信的当前配置 } wx_hgmaxfileid maxidinfo = _ordervoice.GetMaxFilePathId(manconfig); if (maxidinfo != null && manconfig.pkid <= maxidinfo.maxid)//不为空将继续读取数据修改到voice表中 { List uplist = _ordervoice.UpdateFileInVoice(manconfig, maxidinfo.maxid); if (uplist.Any()) { _ordervoice.UpdateFile(uplist); _manconfigbll.updateFile(new wx_hg_man_config() { pkid = maxidinfo.maxid, tablename = "wx_filepath", checkdate = manconfig.checkdate, status = 0 });//这天进行完成 } else { if (todaytime != manconfig.checkdate) { _manconfigbll.updateFile(new wx_hg_man_config() { pkid = maxidinfo.maxid, tablename = "wx_filepath", checkdate = manconfig.checkdate, status = 1 });//完成一天数据 _manconfigbll.Add(new wx_hg_man_config() { pkid = maxidinfo.maxid, tablename = "wx_filepath", checkdate = manconfig.checkdate.AddDays(1), status = 0 });//这天进行完成 } else { _manconfigbll.updateFile(new wx_hg_man_config() { pkid = maxidinfo.maxid, tablename = "wx_filepath", checkdate = manconfig.checkdate, status = 0 });//这天进行完成 } } } //words = _keyword.GetWordListByParameter();//查询重新查询出所有的关键词 //if (words.Any())//有关键词才开始行动 //{ //Console.WriteLine(string.Format("---关键词数量:{0}", words.Count)); bas_config config = _config_bll.GetConfig(BasConfigEnum.HgClearCount); hgclearcount = config != null ? Convert.ToInt32(config.value) : 1000;//重配置中获取最新的数量配置 List ordvoiceList = _ordervoice.GetNeedTransList(hgclearcount); Console.WriteLine(string.Format("微信翻译线程:matchstr:{0},数据量", matchstr, ordvoiceList.Count)); if (ordvoiceList.Any()) { foreach (wx_hg_ordervoice item in ordvoiceList)//循环调用中心点进行数据翻译 { try { string getdata = HttpHelper.GetData(wxUrl, $"url={wxPath}{item.nfile}", Encoding.UTF8); ApiResult nowdata = Newtonsoft.Json.JsonConvert.DeserializeObject(getdata); if (nowdata.result == true && nowdata.retcode == 10000)//返回数据 { string voiceUrl = nowdata.retmsg;//返回的数据 string st = HttpHelper.GetData(coreVoiceUrl, $"voiceUrl={HttpUtility.UrlEncode(voiceUrl)}&returnUrl={HttpUtility.UrlEncode(transBackUrl + "?type=wx&voiceid=" + item.id + "&comcode=" + comcode)}", Encoding.UTF8); Console.WriteLine($"地址:{voiceUrl}\n 返回结果 {st}"); ApiResult result = Newtonsoft.Json.JsonConvert.DeserializeObject(st); if (result.result) { if (result.retcode == 10001)//已经翻译过,直接入库修改数据 { _ordervoice.ToTrans(item.id, 3);//已经开始翻译了 int transstatus = 0; dynamic info = result.retData; if (info.StatusText == "SUCCESS") { transstatus = 1; } else { transstatus = 2; } _ordervoice.TransBack((string)info.voicetext, item.id, transstatus); } else { _ordervoice.ToTrans(item.id, 3);//已经开始翻译了 } } } else { continue; } } catch (Exception e) { LogHelper.Error(e.ToString()); } Thread.Sleep(500); } } else { needSleep = true;//没有数据,进行休眠 } //} //else //{ // Console.WriteLine("无关键词"); //} } catch (Exception e) { Console.WriteLine(string.Format("微信翻译线程错误matchstr:{0},erro:{1}", matchstr, e.ToString())); LogHelper.Error(e.ToString()); } finally { Console.WriteLine(string.Format("微信翻译线程结束 matchstr:{0}", matchstr)); } if (needSleep) { Console.WriteLine(string.Format("{0}没数据了休息{1}分钟", "微信翻译线程 ", sleepTime)); Thread.Sleep((sleepTime == 0 ? 3 : sleepTime) * 60 * 1000);//默认3分钟执行一次,从数据库获取 } else Thread.Sleep(5000);//如果有数据就只休息5秒钟 } } catch (Exception aa) { Program.ToFinishMan(threadKey); LogHelper.Error(aa.ToString()); } } } }