ComplianceServer/oldcode/WeChatServerServices/WeWork/WorkGenHtml.cs

156 lines
6.7 KiB
C#
Raw 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 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;
}
}
}
}