コード例 #1
0
        /// 推送预约消息至微信
        /// </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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
ファイル: SmsHelper.cs プロジェクト: TravelerJ/myProject
        /// <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);
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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);
        }