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 toUserNames = waitGenHtmlList.Where(p => p.ToUserName.Contains("gh_")).Select(p => p.ToUserName).Distinct().ToList(); List 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 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() { new SqlParameter("@maxPkid", maxPkid) }; var ds = SqlHelper.GetDataSet(SqlHelper.DatabaseType.AYCRM, sql, CommandType.Text, p.ToArray()); //var list = ds.Tables[0].ToList(); var list = new List(); 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; } } } }