Example #1
0
        public void Execute(XmlNode node)
        {
            ErrorLog.Write("start go WXMsgRecordJob");
            DateTime startTime = DateTime.Now;
            DateTime endTime   = DateTime.Now;
            int      pageSize  = 50;
            bool     update    = false;
            WXLog    log       = WXHelper.GetWXLog("IsSuccess=0 ORDER BY StartTime ASC");

            if (log.Id != 0)
            {
                update    = true;
                startTime = log.StartTime;
            }
            else
            {
                log = WXHelper.GetWXLog("IsSuccess=1 ORDER BY StartTime DESC");
                if (log.Id != 0)
                {
                    if (log.StartTime.Date.AddDays(1) == DateTime.Now.Date)
                    {
                        return;
                    }
                    startTime = log.EndTime.AddSeconds(1);
                }
                else
                {
                    startTime = startTime.AddDays(-1).Date;
                }
            }
            endTime = startTime.Date.AddDays(1).AddSeconds(-1);


            SiteSettings masterSettings = SettingsManager.GetMasterSettings(false);
            WebUtils     webUtils       = new WebUtils();
            string       returnString   = string.Empty;
            DataTable    dtMsg          = CreateEmptyDataTable();
            DataRow      dr             = null;

            for (int i = 0; i < 2147483647; i++)
            {
                StringBuilder strJson = new StringBuilder();
                strJson.Append("{");
                strJson.AppendFormat("\"endtime\":{0},", DataHelper.ConvertUniversalTime(endTime));
                strJson.AppendFormat("\"pageindex\":{0},", i + 1);
                strJson.AppendFormat("\"pagesize\":{0},", pageSize);
                strJson.AppendFormat("\"starttime\":{0}", DataHelper.ConvertUniversalTime(startTime));
                strJson.Append("}");
                ErrorLog.Write("请求微信服务器,获取客服聊天记录" + strJson.ToString());
                returnString = webUtils.DoPost(string.Format(wx_MsgRecord_URL, TokenApi.GetToken_Message(masterSettings.WeixinAppId, masterSettings.WeixinAppSecret)), strJson.ToString());
                ErrorLog.Write(returnString);
                WXMsgPackage package = null;
                try
                {
                    package = Newtonsoft.Json.JsonConvert.DeserializeObject <WXMsgPackage>(returnString);
                }
                catch (Exception ex)
                {
                    ErrorLog.Write(ex.ToString());
                }

                if (package == null || package.RecordList == null || package.RecordList.Length == 0)
                {
                    break;
                }

                foreach (WXMsgRecord record in package.RecordList)
                {
                    dr             = dtMsg.NewRow();
                    dr["Id"]       = i;
                    dr["OpenId"]   = record.OpenId;
                    dr["OperCode"] = record.OperCode;
                    dr["Text"]     = record.Text;
                    dr["Worker"]   = record.Worker;
                    if (string.IsNullOrEmpty(record.Worker) || record.Worker.Trim() == "")
                    {
                        dr["WorkerNo"] = "";
                    }
                    else
                    {
                        dr["WorkerNo"] = record.Worker.Substring(0, record.Worker.IndexOf('@'));
                    }
                    DateTime d = DataHelper.ConvertTimeFromUniversal(record.UniversalTime);
                    dr["Time"]        = d;
                    dr["HappenDate"]  = d.Date;
                    dr["HappenMonth"] = d.ToString("yyyy-MM");
                    dtMsg.Rows.Add(dr);
                }
                //break;
            }
            WXLog newLog = new WXLog();

            newLog.AddTime    = DateTime.Now;
            newLog.UpdateTime = DateTime.Now;
            newLog.StartTime  = startTime;
            newLog.EndTime    = endTime;
            newLog.Type       = 1;
            if (dtMsg.Rows.Count <= 0)
            {
                newLog.IsSuccess = true;
                newLog.Remark    = "当前查询时间没有记录";
                WXHelper.InsertLog(newLog);
                return;
            }

            bool b = WXHelper.BathAddWXMsgRecord(dtMsg);

            ErrorLog.Write(Newtonsoft.Json.JsonConvert.SerializeObject(newLog));
            if (b)
            {
                newLog.IsSuccess = true;
                if (update)
                {
                    newLog.Id     = log.Id;
                    newLog.Remark = "修复聊天记录成功";
                    WXHelper.UpdateLog(newLog);
                }
                else
                {
                    newLog.Remark = "更新聊天记录完成";
                    WXHelper.InsertLog(newLog);
                }
            }
            else
            {
                newLog.IsSuccess = false;
                if (update)
                {
                    newLog.Id     = log.Id;
                    newLog.Remark = "修复聊天记录失败";
                    WXHelper.UpdateLog(newLog);
                }
                else
                {
                    newLog.Remark = "更新聊天记录失败";
                    WXHelper.InsertLog(newLog);
                }
            }
        }