using NetCore.BLL;
using NetCore.Common;
using NetCore.Model.crm;
using NetCore.Model.enums;
using NetCore.Model.qw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace NetCore.Service.RC
{
///
/// 录音翻译线程
///
public class ReCoredThread
{
///
/// 生成的ID
///
public decimal seq { get; set; }
public string threadKey { get; set; }
///
/// 随机数
///
public string matchstr { get; set; }
///
/// 合规清洗取得数据量
///
public int hgclearcount { get; set; }
///
/// 客户发得消息是否需要合规,默认0不需要 1需要
///
public int cusmsgdeedhg { get; set; }
public hg_excete_log_crm log { get; set; }
public string keyName { get; set; }
public DateTime checkdate { 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);
crm_hg_record_config_bll _manconfigbll = new crm_hg_record_config_bll(comcode);
//hg_message_word_bll _hgmsgwordbll = new hg_message_word_bll();
try
{
while (true)
{
needSleep = false;//默认不需要 睡眠
int sleepTime = _config_bll.GetIntConfig(BasConfigEnum.ManThreadSleepTime);
string recordUrl = ConfigHelper.GetSectionValue($"{comcode}_Config:fileConfig:recordUrl");
//将数据入库
try
{
//Console.WriteLine(string.Format("---关键词数量:{0}", words.Count));
bas_config config = _config_bll.GetConfig(BasConfigEnum.PhoneRecordTransCount);
hgclearcount = config != null ? Convert.ToInt32(config.value) : 1000;//重配置中获取最新的数量配置
decimal SeqMax = seq;
crm_callrecord_bll _msgbll = new crm_callrecord_bll(comcode);
//hg_message_bll _hgmsgbll = new hg_message_bll();
//hg_ordervoice_bll _ordervoice = new hg_ordervoice_bll();
hg_record_config manconfig = _manconfigbll.GetNowManConfig();//获取企业微信的当前配置
#region 初始化属性
DateTime now = DateTime.Now;//如果没有配置,那就从今天开始运算
var todaytime = new DateTime(now.Year, now.Month, now.Day);
if (manconfig == null)//找不到配置,进行插入操作
{
_manconfigbll.Add(new hg_record_config()
{
checkdate = todaytime,
ctime = DateTime.Now,
pkid = 0,
status = 0
});
manconfig = _manconfigbll.GetNowManConfig();//获取企业微信的当前配置
}
seq = manconfig.pkid;
checkdate = manconfig.checkdate;
#endregion
log = new hg_excete_log_crm()
{
starttime = DateTime.Now,
type = "tran"
};
Console.WriteLine(string.Format("电话录音入库线程开始:matchstr:{0}", matchstr));
List hgmsgList = _msgbll.GetList(hgclearcount, seq, checkdate);///获取消息数据量
if (hgmsgList.Any())
{
foreach (crm_callrecord item in hgmsgList)
{
SeqMax = item.pkid > SeqMax ? item.pkid : SeqMax;
var voiceUrl = recordUrl + item.filename;
_msgbll.Add(new hg_order_record()
{
checkdate = checkdate,
filename = item.filename,
voiceurl = voiceUrl,
resid = item.resid,
pkid = item.pkid,
saleseid = item.saleseid,
timelength = item.timelength
});
}
_msgbll.StartInsert();
//_ordervoice.StartInsert();
}
else
{
if (todaytime != checkdate)//比如过度到了第二天
{
//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;//跳到下一个表
//}
_manconfigbll.update(new hg_record_config() { checkdate = checkdate, status = 1, pkid = SeqMax, id = manconfig.id });//这天进行完成
_manconfigbll.Add(new hg_record_config()
{
pkid = seq,
status = 0,
ctime = DateTime.Now,
checkdate = checkdate.AddDays(1)//下一天
});
checkdate = checkdate.AddDays(1);
}
else
{
needSleep = true;
}
}
seq = SeqMax;//修改最大值,下次继续
_manconfigbll.update(new hg_record_config() { checkdate = checkdate, status = 0, pkid = SeqMax, id = manconfig.id, utime = DateTime.Now });
log.status = 200;
log.message = string.Format("seq {0}~{1},rows count {2} ,checkdate:{3}", seq, SeqMax, hgmsgList.Count, checkdate.ToString("yyyy-MM-dd"));
GoLog();
_msgbll.Clear();
}
catch (Exception e)
{
Console.WriteLine(string.Format("电话录音入库线程错误:pkid:{0},matchstr:{1}erro:", seq, matchstr, e.ToString()));
log.status = 500;
log.message = "system erro:" + e.ToString();
GoLog();
LogHelper.Error(e.ToString());
}
finally
{
Console.WriteLine(string.Format("电话录音入库线程结束:pkid:{0},matchstr:{1},信息:{2},checkdate:{3}", seq, matchstr, log.message, checkdate.ToString("yyyy-MM-dd")));
}
//将数据进行翻译
try
{
}
catch (Exception e)
{
}
if (needSleep)
{
Console.WriteLine(string.Format("电话录音入库线程没数据了休息{0}分钟", 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());
}
}
///
/// 执行日志记录
///
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);
bll.LogCrm(log);
}
}
}