210 lines
10 KiB
C#
210 lines
10 KiB
C#
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
|
||
{
|
||
|
||
/// <summary>
|
||
/// 表名称
|
||
/// </summary>
|
||
public string tablename { get; set; }
|
||
public string threadKey { get; set; }
|
||
|
||
/// <summary>
|
||
/// 随机数
|
||
/// </summary>
|
||
public string matchstr { get; set; }
|
||
|
||
/// <summary>
|
||
/// 合规清洗取得数据量
|
||
/// </summary>
|
||
public int hgclearcount { get; set; }
|
||
|
||
//public List<hg_keyword> words { get; set; }
|
||
public string keyName { get; set; }
|
||
/// <summary>
|
||
/// 是否需要sleep
|
||
/// </summary>
|
||
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<wx_UploadedData> 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<wx_hg_ordervoice> 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<ApiResult>(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<ApiResult>(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());
|
||
}
|
||
}
|
||
}
|
||
} |