TG.WXCRM.V4/NetCore.Service/WX/wxFilesThread.cs

210 lines
10 KiB
C#
Raw Permalink 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 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());
}
}
}
}