/// <summary> /// 请求token接口 /// </summary> /// <param name="basConfig"></param> /// <param name="method"></param> /// <param name="msg"></param> /// <returns></returns> public static string PostBztToken(WctBasConfig basConfig, string method, ref string msg) { string url = basConfig.IBZT_URL + method; //请求参数 Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("username", basConfig.TOKEN_USR_NAME); dic.Add("password", basConfig.TOKEN_USR_PWD); dic.Add("grant_type", basConfig.GRANT_TYPE); dic.Add("client_id", basConfig.CLIENT_ID); dic.Add("client_secret", basConfig.CLIENT_SECRET); string param = JsonConvert.SerializeObject(dic); string result = HttpRequest.Post(url, param, null); var jobj = Newtonsoft.Json.Linq.JObject.Parse(result); var token = jobj["Data"]["access_token"].ToString(); var type = jobj["Data"]["token_type"].ToString(); if (!string.IsNullOrEmpty(token) && !string.IsNullOrEmpty(type)) { basConfig.BZT_TOKEN_TIME = DateTime.Now; basConfig.BZT_TOKEN = type + " " + token; //new WCT_BAS_CONFIGBLL().UpdateWCT_BAS_CONFIG(basConfig); return(type + " " + token); } else { msg = jobj["Message"] + ""; } return(""); }
/// <summary> /// 二手车库存信息 /// </summary> /// <param name="basConfig"></param> /// <param name="msg"></param> /// <param name="method"></param> /// <returns></returns> public List <UseCarStockModel> GetUseCarStockInfo(WctBasConfig basConfig, string buNo, ref string msg, string method = "v1.0/InvStockMstr/GetUseCarListByPage") { List <UseCarStockModel> list = new List <UseCarStockModel>(); string token = GetToken(basConfig, ref msg); if (!string.IsNullOrEmpty(token)) { string url = basConfig.IBZT_URL + method + "?STOCK_STATUS=在库&GOODS_TYPE=4&BuSource=SCRM&BU_NO=" + buNo + ""; Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("Authorization", token); string result = HttpRequest.Get(url, dic); var data = Newtonsoft.Json.Linq.JObject.Parse(result)["Data"]["Result"] + ""; if (!string.IsNullOrEmpty(data) && data != "[]") { list = JsonConvert.DeserializeObject <List <UseCarStockModel> >(data); foreach (var item in list) { item.CarDisplay = item.GOODS_CLASS1_NAME + " " + item.GOODS_CLASS2_NAME + " " + item.GOODS_CLASS3_NAME + " " + item.GOODS_NAME + " " + item.VIN; } } else { msg = Newtonsoft.Json.Linq.JObject.Parse(result)["Message"] + ""; } } return(list); }
/// <summary> /// 保存基础配置信息 /// </summary> /// <param name="dto"></param> /// <returns></returns> public ReturnMsg SaveWctBasConfigInfo(WctBasConfigDto dto) { var rm = new ReturnMsg(); var entity = new WctBasConfig(); var redis = _redisHelper.GetRedisClient(Convert.ToInt(dto.REDIS_NUM)); if (string.IsNullOrEmpty(dto.Id)) { _initHelper.InitAdd(dto, AbpSession.USR_ID, AbpSession.ORG_NO, AbpSession.BG_NO); entity = dto.ToEntity(); _wctBasConfigRepository.Insert(entity); redis.Add(AbpSession.BG_NO + "-CONFIG_ID", dto); } else { _initHelper.InitUpdate(dto, AbpSession.USR_ID); entity = dto.ToEntity(); _wctBasConfigRepository.Update(entity); //redis集团缓存配置修改 if (redis.Exists(AbpSession.BG_NO + "-CONFIG_ID") != 1) { redis.Add(AbpSession.BG_NO + "-CONFIG_ID", dto); } else { redis.Set(AbpSession.BG_NO + "-CONFIG_ID", dto); } } rm.IsSuccess = true; return(rm); }
/// <summary> /// 获取ODM请求的token /// </summary> public static string GetToken(WctBasConfig basConfig, ref string msg, string method = "v1.0/Token") { if (basConfig.BZT_TOKEN_TIME != null) { var expTime = (DateTime.Now - basConfig.BZT_TOKEN_TIME).Value.TotalHours; if (expTime > 12 || string.IsNullOrEmpty(basConfig.BZT_TOKEN)) { var token = PostBztToken(basConfig, method, ref msg); return(token); } return(basConfig.BZT_TOKEN); } else { var token = PostBztToken(basConfig, method, ref msg); return(token); } }
/// <summary> /// 获取ODM车辆信息 /// </summary> /// <param name="level">车等级</param> /// <param name="parentids">父级id</param> /// <returns></returns> public List <CarInfoModel> GetODMCarInfo(WctBasConfig basConfig, int level, string parentids, ref string msg, string ids = "", string method = "v1.0/CarType/GetCarClassList") { //List<CarInfoModel> list = new List<CarInfoModel>(); string token = GetToken(basConfig, ref msg); if (!string.IsNullOrEmpty(token)) { string url = basConfig.IBZT_URL + method; Dictionary <string, object> dic = new Dictionary <string, object>(); dic.Add("CLASS_LEVEL", level); dic.Add("CLASS_STATUS", 1); if (!string.IsNullOrEmpty(parentids)) { List <string> list = parentids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); dic.Add("parentids", list); } if (!string.IsNullOrEmpty(ids)) { List <string> list = ids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); dic.Add("CarIds", list); } Dictionary <string, string> header = new Dictionary <string, string>(); header.Add("Authorization", token); string result = HttpRequest.Post(url, JsonConvert.SerializeObject(dic), header); var data = Newtonsoft.Json.Linq.JObject.Parse(result)["Data"] + ""; if (!string.IsNullOrEmpty(data)) { List <CarInfoModel> carlist = JsonConvert.DeserializeObject <List <CarInfoModel> >(data); return(carlist); } else { msg = Newtonsoft.Json.Linq.JObject.Parse(result)["Message"] + ""; } } return(null); }
/// <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="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="entity">实体</param> public static WctBasConfigDto ToDto(this WctBasConfig entity) { if (entity == null) { return(new WctBasConfigDto()); } return(new WctBasConfigDto { Id = entity.Id, SMS_APP_KEY = entity.SMS_APP_KEY, SMS_MASTER_SECRET = entity.SMS_MASTER_SECRET, SMS_CODE_ID = entity.SMS_CODE_ID, IS_TOERP = entity.IS_TOERP, CREATOR = entity.CREATOR, OPRATOR_NO = entity.OPRATOR_NO, MEMBER_LEVEL = entity.MEMBER_LEVEL, CREATE_DATE = entity.CREATE_DATE, UPDATE_PSN = entity.UPDATE_PSN, UPDATE_DATE = entity.UPDATE_DATE, OPEN_IS_ENABLED = entity.OPEN_IS_ENABLED, OPEN_APP_ID = entity.OPEN_APP_ID, OPEN_APP_SECRET = entity.OPEN_APP_SECRET, OPEN_APP_TOKEN = entity.OPEN_APP_TOKEN, OPEN_SECRET_KEY = entity.OPEN_SECRET_KEY, CLIENT_IP = entity.CLIENT_IP, ERP_API_OURL = entity.ERP_API_OURL, ERP_API_NURL = entity.ERP_API_NURL, DEL_FLAG = entity.DEL_FLAG, BG_NO = entity.BG_NO, IS_GROUP = entity.IS_GROUP, IS_APPCONFIG = entity.IS_APPCONFIG, UDF1 = entity.UDF1, UDF2 = entity.UDF2, UDF3 = entity.UDF3, UDF4 = entity.UDF4, UDF5 = entity.UDF5, IS_ONLYSTORE = entity.IS_ONLYSTORE, IS_IRIS = entity.IS_IRIS, ERP_APP_ID = entity.ERP_APP_ID, ERP_APP_KEY = entity.ERP_APP_KEY, ERP_APP_SECRET = entity.ERP_APP_SECRET, WXPAY_RETURNURL = entity.WXPAY_RETURNURL, IRIS_APT_URL = entity.IRIS_APT_URL, IRIS_CHAT_URL = entity.IRIS_CHAT_URL, APT_URL = entity.APT_URL, IS_TRANSFER = entity.IS_TRANSFER, IS_SEND_MSG = entity.IS_SEND_MSG, SMS_MSG_CODE = entity.SMS_MSG_CODE, IS_EXCHANGE_TICKET = entity.IS_EXCHANGE_TICKET, REDIS_NUM = entity.REDIS_NUM, SALE_APT = entity.SALE_APT, AFTER_SALE_APT = entity.AFTER_SALE_APT, IS_BZT = entity.IS_BZT, TOKEN_USR_NAME = entity.TOKEN_USR_NAME, TOKEN_USR_PWD = entity.TOKEN_USR_PWD, GRANT_TYPE = entity.GRANT_TYPE, CLIENT_ID = entity.CLIENT_ID, CLIENT_SECRET = entity.CLIENT_SECRET, IBZT_URL = entity.IBZT_URL, GOODS_FROM = entity.GOODS_FROM, CAR_FROM = entity.CAR_FROM, BZT_TOKEN = entity.BZT_TOKEN, BZT_TOKEN_TIME = entity.BZT_TOKEN_TIME, IS_RANDOMSALE = entity.IS_RANDOMSALE, IS_CAR_BIND = entity.IS_CAR_BIND, IS_APT_REMIND = entity.IS_APT_REMIND, IS_APT_GROUP = entity.IS_APT_GROUP }); }