ComplianceServer/oldcode/WeChatServerServices/WeiXin/GenHtml/GenGhHtml.cs

140 lines
6.6 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 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;
}
}
}
}