using CRM.Core.DTO;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using WX.CRM.BLL.Base;
using WX.CRM.BLL.Csvr;
using WX.CRM.Common;
using WX.CRM.Model.Entity;
using System.Threading;
using WX.CRM.BLL.Util;
using WX.CRM.BLL.Res;
namespace WX.CRM.CRMServices.WeiXin
{
public static class UCRDingDingPush
{
private static BAS_PARAMETER_BL _BAS_PARAMETER_Q = new BAS_PARAMETER_BL();
private static CSVR_CALLRECORD_BL _CSVR_CALLRECORD_BL = new CSVR_CALLRECORD_BL();
private static RES_CUSTOMER_BL _RES_CUSTOMER_BL = new RES_CUSTOMER_BL();
///
/// 推送
///
public static void Push() {
var dingTalkRemindTimeStr = _BAS_PARAMETER_Q.GetModel_Patameter("DingTalkRemindTime");
if (dingTalkRemindTimeStr == null)
return;
var dingTalk = Utility.JSONToObject(dingTalkRemindTimeStr.PARAVALUE);
var now = DateTime.Now;
var everyHour = 0;
//判断工作时间,休息时间
var isWorkDay = false;
var webApi = _BAS_PARAMETER_Q.GetModel_Patameter("Hg_Core_WebApi");
var url = $"{webApi.PARAVALUE}/api/OutComplaint/WorkDay";
var para = $"dateTime={now.ToString("yyyy-MM-dd")}";
var dataStr = Utility.GetData(url, para, Encoding.UTF8);
var data = JsonConvert.DeserializeObject>(dataStr);
if (data.code == 0)
isWorkDay = data.data;
//if (now.DayOfWeek != DayOfWeek.Saturday && now.DayOfWeek != DayOfWeek.Sunday)
// isWorkDay = true;
if (isWorkDay)
{
if (now.Hour >= 9 && now.Hour < 24)
everyHour = dingTalk.WorkDayHour;
else
{
everyHour = dingTalk.ResDayHour;
isWorkDay = false;
}
}
else
everyHour = dingTalk.ResDayHour;
//var CallRecordunList = _CSVR_CALLRECORD_BL.GetUNCallBackList(Convert.ToInt32(ddTimeout),10);//获取所有
//获取所有未回访通话
var CallRecordunList = _CSVR_CALLRECORD_BL.GetUNCallRemindList(dingTalk.StartTime,dingTalk.DaysAgo);
LogHelper.Info("回访数量:" + CallRecordunList.Count());
if (!CallRecordunList.Any()) return;
foreach (var unc in CallRecordunList)
{
try
{
//非工作时间如果提醒过了就不再提醒
if (!isWorkDay && unc.PUSHED == 1)
continue;
if (!unc.REMINDTIME.HasValue || (unc.REMINDTIME.HasValue && unc.REMINDTIME.Value.AddHours(everyHour) < now))
{
var count = _CSVR_CALLRECORD_BL.GetNotHFCount(unc.RESID, dingTalk.StartTime, dingTalk.DaysAgo);
PushOne(unc, count);
Thread.Sleep(100);
unc.REMINDTIME = now;
if(!isWorkDay)
unc.PUSHED = 1;
}
}
catch (Exception ex)
{
LogHelper.Error("【" + unc.PKID + "】未接电话通知钉钉失败:" + ex.Message);
}
}
_CSVR_CALLRECORD_BL.BathUpdateReCallRecordUn(CallRecordunList);
}
private static void PushOne(CSVR_CALLRECORDUN unModel,int count) {
//var url = "http://192.168.11.81:8086/api/CsvrMessageComtroller/Push";
Dictionary msgParam = new Dictionary();
var _msg_url_encypt = _BAS_PARAMETER_Q.GetModel_Patameter("Hg_Core_WebApi");
if (_msg_url_encypt != null)
{
//获取umid
var customer = _RES_CUSTOMER_BL.getResCustomerByResId(unModel.RESID);
var url = _msg_url_encypt.PARAVALUE + "/api/CsvrMessageComtroller/Push";
string msg = "【未接电话】回访通知";
//msg += "\r\n客户ID:" + unModel.RESID;
msg += "\r\n客户ID:" + customer?.UMID;
msg += "\r\n事业部:" + unModel.DEPTNAME;
msg += "\r\n呼入时间:" + unModel.TIMESTART.Value.ToString("yyyy-MM-dd HH:mm:ss");
msg += "\r\n分配回访人:" + unModel.ENAME;
msg += "\r\n回访状态:未回访";
msg += "\r\n呼入次数:" + count;
msgParam.Add("msgcode", "WJDH");
msgParam.Add("title", "未接电话通知!");
msgParam.Add("fromer", "");
msgParam.Add("eid", unModel.EID.ToString());
msgParam.Add("param", "");
msgParam.Add("companycode", "");
msgParam.Add("sendDingDing", true);
msgParam.Add("dingDingContent", msg);
var str = Utility.PostAjaxData(url, JsonConvert.SerializeObject(msgParam), Encoding.UTF8);//请求线索接口 获取事业部信息
var qtr = JsonConvert.DeserializeObject>(str);
if (qtr.code != 0)
{
LogHelper.Error("【" + unModel.PKID + "】未接电话通知钉钉失败:" + qtr.message);
}
}
}
}
public class MSG_API_Result
{
public T data { get; set; }
public string message { get; set; }
public int code { get; set; }
}
public class DingTalkRemindTime
{
public DateTime StartTime { get; set; }
public int DaysAgo { get; set; }
public int WorkDayHour { get; set; }
public int ResDayHour { get; set; }
}
}