140 lines
6.6 KiB
C#
140 lines
6.6 KiB
C#
using Quartz;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Data.SqlClient;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using WeChatServerServices.Model;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.DAL;
|
||
|
||
namespace WeChatServerServices.WeiXin.GenHtml
|
||
{
|
||
public class GenGhHtml
|
||
{
|
||
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();
|
||
public void GenHtmlFile()
|
||
{
|
||
try
|
||
{
|
||
string rootPath = Utility.GetSettingByKey("WxGenChatGhHtmlRootPath"); //html文件生成的根目录
|
||
|
||
string maxPkidStr = paraq.GetModel_Patameter("WxGenGhHtmlMaxRecordPkid").PARAVALUE;
|
||
if (string.IsNullOrEmpty(maxPkidStr))
|
||
throw new Exception("没配置WxGenHtmlMaxRecordPkid参数!");
|
||
int maxPkid = int.Parse(maxPkidStr);
|
||
var waitGenHtmlList = GetWaitMessage(maxPkid);
|
||
if (waitGenHtmlList == null || !waitGenHtmlList.Any())
|
||
return;
|
||
maxPkid = waitGenHtmlList.Select(p => p.ID).Max();
|
||
#region 写入文本库 普通文本
|
||
List<string> toUserNames = waitGenHtmlList.Where(p => p.ToUserName.Contains("gh_")).Select(p => p.ToUserName).Distinct().ToList();
|
||
List<string> fromUserNames = waitGenHtmlList.Where(p => p.FromUserName.Contains("gh_")).Select(p => p.FromUserName).Distinct().ToList();
|
||
var usernames = toUserNames.Union(fromUserNames);
|
||
foreach (string username in usernames)
|
||
{
|
||
var genList = waitGenHtmlList.Where(p => p.ToUserName == username || p.FromUserName == username).OrderBy(o => o.CreateTime).ToList();
|
||
foreach (var genMessage in genList)
|
||
{
|
||
try
|
||
{
|
||
var time = DateTimeTool.GetTimeFromLinuxShortTime(genMessage.CreateTime);
|
||
var dir = string.Format("{0}/{1}", rootPath, username);
|
||
var path = string.Format("{0}_{1}.json", username == genMessage.ToUserName ? genMessage.FromUserName : genMessage.ToUserName, time.Year.ToString() + time.Month.ToString());
|
||
var content = Utility.ConvertToJSON(genMessage);
|
||
if (File.Exists(Path.Combine(dir, path)))
|
||
FileUnit.AppendFile(dir, path, "," + content);
|
||
else
|
||
FileUnit.AppendFile(dir, path, content);
|
||
}
|
||
catch
|
||
{
|
||
LogHelper.Error("出错消息记录【id:" + genMessage.ID + "msgSvrId:" + "rootPath:" + rootPath + ",username:" + username + "】");
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
para.Update_ParameterValueByKey("WxGenGhHtmlMaxRecordPkid", maxPkid.ToString());
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error("【WX.CRM.CRMServices.WeiXin.GenHtml.GenHtml.GenHtmlFile()】" + ex.Message + ex.StackTrace);
|
||
}
|
||
}
|
||
|
||
private IList<GenGhMessage> GetWaitMessage(int maxPkid)
|
||
{
|
||
try
|
||
{
|
||
var sql = "select top 50000 m.*,f.Path from weapp_message m left join weapp_filepath f on m.MediaId = f.MediaId where m.id > @maxPkid and (Event is null or Event not in ('VIEW','TEMPLATESENDJOBFINISH')) order by m.id";
|
||
var p = new List<SqlParameter>() { new SqlParameter("@maxPkid", maxPkid) };
|
||
var ds = SqlHelper.GetDataSet(SqlHelper.DatabaseType.AYCRM, sql, CommandType.Text, p.ToArray());
|
||
//var list = ds.Tables[0].ToList<GenGhMessage>();
|
||
var list = new List<GenGhMessage>();
|
||
if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
|
||
{
|
||
foreach (DataRow dataRow in ds.Tables[0].Rows)
|
||
{
|
||
var message = new GenGhMessage
|
||
{
|
||
ID = int.Parse(string.Format("{0}", dataRow["ID"])),
|
||
ToUserName = string.Format("{0}", dataRow["ToUserName"]),
|
||
FromUserName = string.Format("{0}", dataRow["FromUserName"]),
|
||
CreateTime = long.Parse(string.Format("{0}", dataRow["CreateTime"])),
|
||
MsgType = string.Format("{0}", dataRow["MsgType"]),
|
||
Content = string.Format("{0}", dataRow["Content"]),
|
||
MsgId = dataRow["MsgId"].ToString(),
|
||
PicUrl = string.Format("{0}", dataRow["PicUrl"]),
|
||
MediaId = string.Format("{0}", dataRow["MediaId"]),
|
||
Ctime = DateTime.Parse(dataRow["Ctime"].ToString()),
|
||
EID = int.Parse(string.Format("{0}", dataRow["EID"])),
|
||
IsSend = int.Parse(string.Format("{0}", dataRow["IsSend"])),
|
||
IsRead = dataRow.IsNull("IsRead") ? 0 : int.Parse(string.Format("{0}", dataRow["IsRead"])),
|
||
Event = string.Format("{0}", dataRow["Event"]),
|
||
Ticket = string.Format("{0}", dataRow["Ticket"]),
|
||
Latitude = string.Format("{0}", dataRow["Latitude"]),
|
||
Longitude = string.Format("{0}", dataRow["Longitude"]),
|
||
Precision = string.Format("{0}", dataRow["Precision"]),
|
||
Path = string.Format("{0}", dataRow["Path"])
|
||
};
|
||
list.Add(message);
|
||
}
|
||
}
|
||
return list;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Info(ex.ToString());
|
||
throw;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
public class GenGhHtmlJob : IJob
|
||
{
|
||
static bool isRuning = false;
|
||
public void Execute(JobExecutionContext context)
|
||
{
|
||
if (isRuning)
|
||
return;
|
||
isRuning = true;
|
||
try
|
||
{
|
||
new GenGhHtml().GenHtmlFile();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
LogHelper.Error("【AY.CRM.CRMServices.CRMJobs.WxGenHtmlJob.Execute()】 " + e);
|
||
}
|
||
finally
|
||
{
|
||
isRuning = false;
|
||
}
|
||
}
|
||
}
|
||
}
|