/// 推送预约消息至微信 /// </summary> /// <param name="apt"></param> /// <param name="url"></param> /// <param name="code"></param> /// <param name="log"></param> /// <returns></returns> public bool WxToMessage(AptInfo apt, string url, string code, Log log) { var tDate = apt.APT_DATE.ToString("yyyy-MM-dd") + " " + apt.APT_TIMESPAN; var dic = new Dictionary <string, object>(); dic.Add("name", apt.APT_CLASS); dic.Add("orgNo", apt.orgNo); dic.Add("url", url); dic.Add("time", tDate); dic.Add("openId", apt.openId); dic.Add("remark", "备注:" + apt.APT_RMK + ""); switch (code) { case "success": dic.Add("result", "已预约!"); break; case "fail": dic.Add("result", "预约失败!"); break; default: dic.Add("result", "预约失败!"); break; } string json = JsonConvert.SerializeObject(dic); var ret = SendAptMessage(json, log); return(ret); }
/// <summary> /// 推送异常消息提醒 /// </summary> /// <param name="apt"></param> /// <param name="log"></param> /// <returns></returns> public bool WxToErrMessage(AptInfo apt, Log log) { var tDate = apt.APT_DATE.ToString("yyyy-MM-dd") + " " + apt.APT_TIMESPAN; var dic = new Dictionary <string, object>(); dic.Add("name", apt.APT_CLASS); dic.Add("result", "预约失败!"); dic.Add("orgNo", apt.orgNo); dic.Add("remark", "\r\n该时段预约人数已满,请您更改预约时段,\n给您带来的不便非常抱歉"); dic.Add("openId", apt.openId); dic.Add("url", ""); dic.Add("time", tDate); string json = JsonConvert.SerializeObject(dic); var ret = SendAptMessage(json, log); return(ret); }
/// <summary> /// 预约服务-预约推送ERP /// </summary> /// <param name="config"></param> /// <param name="apt"></param> /// <param name="log"></param> /// <returns></returns> public bool AptToErp(WctBasConfig config, AptInfo apt, Log log) { var creator = config.CREATOR; var tDate = apt.APT_DATE.ToString("yyyy-MM-dd"); var dic = new Dictionary <string, object>(); dic.Add("storeNo", apt.orgNo); dic.Add("cusNo", apt.CUS_NO); dic.Add("appointmentMode", "微信"); dic.Add("appointmentSource", apt.APT_CLASS); dic.Add("appointmentType", "主动预约"); dic.Add("receiveHead", apt.USR_ID); dic.Add("Creator", creator); dic.Add("appointmentDate", Convert.ToDateTime(tDate)); dic.Add("Consigner", apt.NAME); dic.Add("consignerPhone", apt.CUS_PHONE_NO); dic.Add("Remark", apt.APT_RMK); dic.Add("carId", apt.CAR_ID); dic.Add("Vin", apt.VIN); dic.Add("AppointmentPeriod", apt.APT_TIMESPAN); dic.Add("WorkingHoursDiscount", string.IsNullOrEmpty(apt.DISCOUNT) ? "" : (Convert.ToDouble(apt.DISCOUNT) / 10) + ""); dic.Add("appointmentProject", apt.APT_PROJECT); var json = JsonConvert.SerializeObject(dic); var url = ""; var msg = ""; var getUrl = _wxHelper.GetErpApiUrl(apt.orgNo, ref url, ref msg); if (!getUrl) { log.Write("getUrl:" + msg + ""); return(false); } var result = HttpRequest.ErpRequestApi(json, "CRM/SaveAfterSaleAppointMentInfo", url, apt.orgNo); JObject jo = (JObject)JsonConvert.DeserializeObject(result); if (!Convert.ToBoolean(jo["IsSuccess"])) { log.Write("AptToErp:" + jo["msg"].ToString() + ""); return(false); } return(true); }
/// <summary> /// 推送预约单到odm /// </summary> /// <param name="basConfig"></param> /// <param name="aptInfo"></param> /// <param name="log"></param> /// <param name="method"></param> /// <returns></returns> private bool PushAptInfoToOdm(WctBasConfig basConfig, AptInfo aptInfo, Log log, string method = "CrmAptMstr/SaveCrmAptMstrInfo") { string url = basConfig.IBZT_URL + method; string msg = ""; string token = OdmCarRequest.GetToken(basConfig, ref msg); CrmAptInputModel crmAptInputModel = new CrmAptInputModel() { CusNo = aptInfo.CUS_NO, CusName = aptInfo.NAME, CusMobile = aptInfo.CUS_PHONE_NO, CusSex = string.IsNullOrEmpty(aptInfo.SEX) ? "3" : aptInfo.SEX, OpenId = aptInfo.openId, AptClass = aptInfo.APT_CLASS, AptDate = aptInfo.APT_DATE, AptTimeSpan = aptInfo.APT_TIMESPAN, AptItem = aptInfo.APT_PROJECT, AptContent = aptInfo.APT_RMK, CarId = aptInfo.CAR_ID, Vin = aptInfo.VIN, BuNo = aptInfo.orgNo, ScrmAptNo = aptInfo.APT_TYPE.ToString() }; string json = JsonConvert.SerializeObject(crmAptInputModel); Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("Authorization", token); string result = HttpRequest.Post(url, json, dic); var data = Newtonsoft.Json.Linq.JObject.Parse(result)["Data"] + ""; var code = Newtonsoft.Json.Linq.JObject.Parse(result)["Code"] + ""; msg = Newtonsoft.Json.Linq.JObject.Parse(result)["Message"] + ""; if (code == "1") { return(true); } log.Write(msg); return(false); }
/// <summary> /// 发送短信通知 /// </summary> /// <param name="apt"></param> /// <param name="mobile"></param> /// <param name="basConfig"></param> /// <param name="log"></param> /// <returns></returns> public bool SendMessage(AptInfo apt, string mobile, WctBasConfig basConfig, Log log) { BaseConfig config = new BaseConfig() { AppKey = basConfig.SMS_APP_KEY, MasterSecret = basConfig.SMS_MASTER_SECRET }; //发送营销类短信 var cusInfo = "客户姓名:" + apt.NAME + "" + (apt.APT_TYPE == 2 ? ",车牌号:" + apt.CAR_ID + "" : ""); Dictionary <string, string> extraParam = new Dictionary <string, string>(); extraParam.Add("projectName", apt.APT_CLASS); extraParam.Add("cusInfo", cusInfo); extraParam.Add("timeSpan", apt.APT_DATE.ToString("yyyy-MM-dd") + " " + apt.APT_TIMESPAN); var ret = Utils.Jg.Sms.SmsHelper.SendMarketing(config, mobile, Convert.ToInt32(basConfig.SMS_MSG_CODE), extraParam, out Utils.Common.NetHelper.HttpHelper.Model.HttpResult result); if (!ret) { log.Write("发送短消息失败"); } return(ret); }
/// <summary> /// 推送预约成功消息至微信 /// </summary> /// <param name="apt"></param> /// <param name="url"></param> /// <param name="log"></param> /// <returns></returns> public bool SendAptSuccessMessage(AptInfo apt, string url, Log log) { var buInfo = _mdmBuMstrRepository.FirstOrDefault(c => c.Id == apt.orgNo); if (buInfo == null) { log.Write("该门店不存在"); return(false); } if (string.IsNullOrEmpty(buInfo.BU_PHONE)) { log.Write("请先维护门店电话"); return(false); } var first = "您好,您已预约成功!\r\n"; var remark = "\r\n请在约定时间内准时到店,\n超时将不保留工位,如需更改时间,\n请重新预约或拨打客服电话" + buInfo.BU_PHONE + ""; var tDate = apt.APT_DATE.ToString("yyyy-MM-dd") + " " + apt.APT_TIMESPAN; var dic = new Dictionary <string, object>(); dic.Add("first", first); dic.Add("cusName", apt.NAME); dic.Add("aptServiceName", apt.APT_TYPE == 1 ? "试驾" : apt.APT_PROJECT); dic.Add("aptDate", tDate); dic.Add("mobile", apt.CUS_PHONE_NO); dic.Add("orgNo", apt.orgNo); dic.Add("orgName", apt.BU_NAME); dic.Add("url", url); dic.Add("openId", apt.openId); dic.Add("remark", remark); dic.Add("bgNo", apt.BG_NO); string json = JsonConvert.SerializeObject(dic); var ret = SendAptSuccessMessageInfo(json, log); return(ret); }
/// <summary> /// 分配预约专员 /// </summary> /// <param name="obj"></param> /// <param name="basInfo"></param> /// <param name="log"></param> /// <param name="userInfo"></param> /// <returns></returns> public bool GetWxUsrAptInfo(AptInfo obj, WctBasConfig basInfo, Log log, ref SysUsrMstr userInfo) { bool ret = true; try { var usrList = new List <SysUsrMstr>(); var job = obj.APT_TYPE == 1 ? basInfo.SALE_APT : basInfo.AFTER_SALE_APT; var salescode = ""; //查询微信粉丝信息 string where = string.Format(" OPEN_ID='{0}' and BG_NO='{1}' and FOLLOW_STATUS=1 and DEL_FLAG=1", obj.openId, obj.BG_NO); var wctInfo = _sysUsrWctRepository.FirstOrDefault(c => c.OPEN_ID == obj.openId && c.BG_NO == obj.BG_NO && c.DEL_FLAG == 1); if (wctInfo == null) { ret = false; log.Write("该粉丝信息不存在或未关注公众号!"); return(ret); } var sql = string.Format("ORG_NO='{0}' and DEL_FLAG=1", obj.orgNo); usrList = _sysUsrMstrRepository.GetAllList(c => c.ORG_NO == obj.orgNo && c.USR_TYPE == "2" && c.DEL_FLAG == 1); //未绑定预约专员 if (string.IsNullOrEmpty(obj.APT_TYPE == 1 ? wctInfo.CUS_SVC_CODE : wctInfo.AFTER_SALE_CODE)) { //绑定销售顾问 userInfo = GetAptUser(usrList, wctInfo, job); if (userInfo != null) { log.Write("绑定成功"); } else { log.Write("绑定失败"); ret = false; return(ret); } salescode = userInfo.ERP_EMP_ID;//赋值预约专员erp编码 } else { //查询绑定的预约专员是否存在 salescode = obj.APT_TYPE == 1 ? wctInfo.CUS_SVC_CODE : wctInfo.AFTER_SALE_CODE; userInfo = usrList.Where(c => c.ERP_EMP_ID == salescode && c.USR_JOB == job).FirstOrDefault(); if (userInfo == null) { //重新绑定销售顾问 userInfo = GetAptUser(usrList, wctInfo, job); if (userInfo != null) { log.Write("更新绑定成功"); } else { log.Write("更新绑定失败"); ret = false; return(ret); } salescode = userInfo.ERP_EMP_ID; } else { salescode = userInfo.ERP_EMP_ID; log.Write("该粉丝已绑定预约专员"); } } if (obj.APT_TYPE == 1 && wctInfo.CUS_SVC_CODE != salescode) { wctInfo.CUS_SVC_CODE = salescode; _sysUsrWctRepository.Update(wctInfo); } if (obj.APT_TYPE == 2 && wctInfo.AFTER_SALE_CODE != salescode) { wctInfo.AFTER_SALE_CODE = salescode; _sysUsrWctRepository.Update(wctInfo); } } catch (Exception ex) { log.Write("" + ex.Message + ""); } return(ret); }
/// <summary> /// 新增预约信息 /// </summary> /// <param name="obj"></param> /// <param name="log"></param> /// <returns></returns> public bool InsertCRM_APT_Info(AptInfo obj, Log log) { var pk = _wxHelper.CreatePK("APT"); bool ret = true; using (var unitOfWork = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew)) { try { var apt = new CrmAptMstr(); apt.Id = pk; apt.APT_NO = pk;//预约单号 apt.APT_TYPE = "主动"; apt.APT_CLASS = obj.APT_CLASS; apt.APT_CHANNEL = "微信"; apt.CUS_NAME = obj.NAME; //客户姓名 apt.UDF1 = obj.SEX; //性别 apt.CUS_NO = obj.CUS_NO; apt.CUS_PHONE_NO = obj.CUS_PHONE_NO; apt.UDF2 = obj.MILEAGE; apt.UDF3 = obj.BRAND_NAME; //品牌 apt.UDF4 = obj.CARCLASS_NAME; //车系 apt.UDF5 = obj.CARTYPE_NAME; //车型 apt.UDF6 = obj.CARTYPEDET_NAME; //车型细分 apt.VIN = obj.VIN; //vin码 apt.CAR_ID = obj.CAR_ID; //车牌号 apt.UDF8 = obj.BU_NAME; //门店名称 apt.UDF9 = obj.DISCOUNT; //工时折扣 apt.UDF10 = obj.APT_PROJECT; //预约项目 apt.APT_DATE = obj.APT_DATE; apt.APT_TIMESPAN = obj.APT_TIMESPAN; //时段 apt.IS_SA_APPOINT = 0; apt.SERVICE_DESK = obj.CONSULTANT_NAME; apt.APT_BU_NO = obj.orgNo; apt.APT_STATUS = "未完成"; apt.APT_RMK = obj.APT_RMK; apt.CREATE_ORG_NO = obj.orgNo; apt.CREATE_PSN = obj.BPM_USRID; apt.CREATE_DATE = DateTime.Now; apt.UPDATE_PSN = obj.BPM_USRID; apt.UPDATE_DATE = DateTime.Now; apt.DEL_FLAG = 1; apt.BG_NO = obj.BG_NO; apt.BOOKING_TYPE = obj.APT_TYPE; apt.OPENID = obj.openId; _crmAptMstrRepository.Insert(apt); SysUsrMstr userInfo = new SysUsrMstr(); var basInfo = _wxHelper.GetBasConfig(obj.BG_NO); if (obj.APT_TYPE == 1)//售前 { if (basInfo != null) { if (basInfo.IS_IRIS == 1)//对接iris { //预约试驾调用iris接口 string url = basInfo.IRIS_APT_URL; log.Write("url:" + url + ""); Dictionary <string, object> dic = new Dictionary <string, object>(); //obj.APT_TIMESPAN; 预约时间段解析 string[] arr = obj.APT_TIMESPAN.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); string aptDate = obj.APT_DATE.ToString("yyyy-MM-dd"); string startTime = aptDate + " " + arr[0]; string endTime = aptDate + " " + arr[1]; dic.Add("appCode", "iris"); dic.Add("custName", obj.NAME); dic.Add("custSex", obj.SEX == "女" ? 0 : 1); dic.Add("custMobile", obj.CUS_PHONE_NO); dic.Add("startTime", startTime); dic.Add("endTime", endTime); dic.Add("storeCode", obj.orgNo); dic.Add("brandCode", obj.BRAND_CODE); dic.Add("brandName", obj.BRAND_NAME); dic.Add("seriesCode", obj.CARCLASS_CODE); dic.Add("seriesName", obj.CARCLASS_NAME); dic.Add("carType", obj.CARTYPE_CODE); dic.Add("carCode", obj.CARTYPEDET_CODE); dic.Add("displayName", obj.CARTYPEDET_NAME); string json = JsonConvert.SerializeObject(dic); string result = IrisHelper.RequestIrisApi(url, basInfo.IRIS_CHAT_URL, json, log); log.Write("预约试驾推送Iris接口结果:" + result); var code = JObject.Parse(result)["code"] + ""; obj.APT_RMK = code == "fail" ? "预约试驾推送Iris失败" : obj.APT_RMK; //推送微信公众号模板消息 if (code == "fail") { ret = false; ret = WxToMessage(obj, basInfo.APT_URL, code, log); } else { ret = SendAptSuccessMessage(obj, basInfo.APT_URL, log); } } else { if (basInfo.IS_SEND_MSG == 1) { ret = GetWxUsrAptInfo(obj, basInfo, log, ref userInfo); if (!ret) { return(ret); } ret = _smsHelper.SendMessage(obj, userInfo.USR_MOBILE, basInfo, log); if (!ret) { log.Write("发送短消息失败"); } //推送微信公众号模板消息 ret = SendAptSuccessMessage(obj, basInfo.APT_URL, log); if (!ret) { log.Write("发送模板消息失败"); } } else { //推送微信公众号模板消息 ret = SendAptSuccessMessage(obj, basInfo.APT_URL, log); } } } else { ret = false; log.Write("请先维护基础配置"); return(ret); } } else if (obj.APT_TYPE == 2)//售后 { if (basInfo.IS_TOERP == 1) { ret = AptToErp(basInfo, obj, log); } else if (basInfo.IS_BZT == 1) { ret = PushAptInfoToOdm(basInfo, obj, log); } if (ret) { if (basInfo == null) { ret = false; log.Write("请先维护基础配置"); return(ret); } if (basInfo.IS_SEND_MSG == 1) { ret = GetWxUsrAptInfo(obj, basInfo, log, ref userInfo); if (!ret) { return(ret); } ret = _smsHelper.SendMessage(obj, userInfo.USR_MOBILE, basInfo, log); if (!ret) { log.Write("发送短消息失败"); } ret = SendAptSuccessMessage(obj, basInfo.APT_URL, log); if (!ret) { log.Write("发送模板消息失败"); } } else { ret = SendAptSuccessMessage(obj, basInfo.APT_URL, log); } } } } catch (Exception ex) { ret = false; log.Write("预约服务-" + ex.Message + ""); return(ret); } unitOfWork.Complete(); } return(ret); }