156 lines
6.7 KiB
C#
156 lines
6.7 KiB
C#
using Quartz;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Data.SqlClient;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.DAL;
|
||
using WX.CRM.Model.DTO.wework;
|
||
|
||
namespace WeChatServerServices.WeWork
|
||
{
|
||
public class WorkGenHtml
|
||
{
|
||
//WX.CRM.IBLL.Wx.IWX_MESSAGE bll = new WX.CRM.BLL.Wx.WX_MESSAGE_BL();
|
||
WX.CRM.IBLL.Base.IBAS_PARAMETER_Q paraq = new WX.CRM.BLL.Base.BAS_PARAMETER_BL();
|
||
WX.CRM.IBLL.Base.IBAS_PARAMETER para = new WX.CRM.BLL.Base.BAS_PARAMETER_BL();
|
||
//private readonly object _lockObj = new object();
|
||
|
||
|
||
|
||
public void GenHtmlFile()
|
||
{
|
||
try
|
||
{
|
||
string rootPath = Utility.GetSettingByKey("WeWorkGenChatHtmlRootPath"); //html文件生成的根目录
|
||
var tableName = string.Empty;
|
||
|
||
string maxPkidStr = paraq.GetModel_Patameter("WeWorkGenHtmlMaxRecordPkid").PARAVALUE;
|
||
if (string.IsNullOrEmpty(maxPkidStr))
|
||
throw new Exception("没配置WeWorkGenHtmlMaxRecordPkid参数!");
|
||
int maxPkid = int.Parse(maxPkidStr);
|
||
|
||
IList<GenWorkMessage> waitGenHtmlList = GetWaitMessage(maxPkid);
|
||
if (waitGenHtmlList == null || !waitGenHtmlList.Any())
|
||
return;
|
||
maxPkid = waitGenHtmlList.Select(p => p.pkid).Max();
|
||
|
||
#region 写入文本库 普通文本
|
||
List<string> vids = waitGenHtmlList.Select(p => p.vid).Distinct().ToList();
|
||
foreach (string vid in vids)
|
||
{
|
||
var genLis = waitGenHtmlList.Where(p => p.vid == vid).OrderBy(o => o.createTime).ToList();
|
||
foreach (var genMessage in genLis)
|
||
{
|
||
try
|
||
{
|
||
if (genMessage.conversationId != genMessage.sender && genMessage.conversationId != genMessage.receiver)//不等于发送人,也不等于接收人,证明是群消息,不做生成
|
||
{
|
||
continue;
|
||
}
|
||
var time = DateTimeTool.GetTimeFromLinuxShortTime(genMessage.createTime);
|
||
var timeforder = time.ToString("yyyyMM");
|
||
var dir = string.Format("{0}/{1}/{2}", rootPath, timeforder, vid);
|
||
string talker = string.Empty;
|
||
if (genMessage.vid == genMessage.sender)
|
||
{
|
||
talker = genMessage.receiver;
|
||
}
|
||
else
|
||
{
|
||
talker = genMessage.sender;
|
||
}
|
||
|
||
var path = string.Format("{0}.json", talker);
|
||
var content = Utility.ConvertToJSON(genMessage);
|
||
if (File.Exists(Path.Combine(dir, path)))
|
||
FileUnit.AppendFile(dir, path, "," + content);
|
||
else
|
||
FileUnit.AppendFile(dir, path, content);
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
LogHelper.Error("出错消息记录【pkid:" + genMessage.pkid + ",id:" + genMessage.id + ",rootPath:" + rootPath + ",receiver:" + genMessage.receiver + ",sender:" + genMessage.sender + "】");
|
||
LogHelper.Error(e);
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
para.Update_ParameterValueByKey("WeWorkGenHtmlMaxRecordPkid", maxPkid.ToString());
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error("【WX.CRM.CRMServices.WeiXin.WorkGenHtml.WeGenHtml()】" + ex.ToString());
|
||
}
|
||
}
|
||
|
||
|
||
#region 获取待生成消息
|
||
private IList<GenWorkMessage> GetWaitMessage(int maxPkid)
|
||
{
|
||
var tableName = "wework_message";
|
||
var sql = "select top 50000 * from " + tableName + " where pkid > @maxPkid order by pkid asc";
|
||
var p = new List<SqlParameter>() { new SqlParameter("@maxPkid", maxPkid) };
|
||
var ds = SqlHelper.GetDataSet(SqlHelper.DatabaseType.WeWork, sql, CommandType.Text, p.ToArray());
|
||
var list = new List<GenWorkMessage>();
|
||
if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
|
||
{
|
||
foreach (DataRow dataRow in ds.Tables[0].Rows)
|
||
{
|
||
DateTime sendtime = Convert.ToDateTime(dataRow["sendTime"]);
|
||
var message = new GenWorkMessage
|
||
{
|
||
pkid = int.Parse(string.Format("{0}", dataRow["pkid"])),
|
||
id = string.Format("{0}", dataRow["id"]),
|
||
appinfo = string.Format("{0}", dataRow["appinfo"]),
|
||
contentType = int.Parse(string.Format("{0}", dataRow["contentType"])),
|
||
convType = int.Parse(string.Format("{0}", dataRow["convType"])),
|
||
content = string.Format("{0}", dataRow["content"]),
|
||
conversationId = string.Format("{0}", dataRow["conversationId"]),
|
||
fileMd5 = string.Format("{0}", dataRow["fileMd5"]),
|
||
receiver = string.Format("{0}", dataRow["receiver"]),
|
||
sender = string.Format("{0}", dataRow["sender"]),
|
||
sendername = string.Format("{0}", dataRow["sendername"]),
|
||
sendTime = sendtime.ToUnityString(6),
|
||
createTime = long.Parse(string.Format("{0}", dataRow["createTime"])),
|
||
vid = string.Format("{0}", dataRow["vid"]),
|
||
url = string.Format("{0}", dataRow["url"]),
|
||
maxMd5 = string.Format("{0}", dataRow["maxmd5"]),
|
||
smallMd5 = string.Format("{0}", dataRow["smallMd5"])
|
||
};
|
||
|
||
|
||
list.Add(message);
|
||
}
|
||
}
|
||
return list;
|
||
}
|
||
#endregion
|
||
|
||
}
|
||
public class WorkGenHtmlJob : IJob
|
||
{
|
||
static bool isRuning = false;
|
||
public void Execute(JobExecutionContext context)
|
||
{
|
||
if (isRuning)
|
||
return;
|
||
isRuning = true;
|
||
try
|
||
{
|
||
new WorkGenHtml().GenHtmlFile();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
LogHelper.Error("【WX.CRM.CRMServices.WeiXin.WeWork.WorkGenHtml.Execute()】 " + e);
|
||
}
|
||
finally
|
||
{
|
||
isRuning = false;
|
||
}
|
||
}
|
||
}
|
||
}
|