/// <summary> /// 获取酒店基础信息 /// </summary> /// <returns></returns> public DataResult GetHotelList() { var result = new DataResult(); var url = AtourAuth_URL + "hotel/getHotelList"; var citylist = AreaBll.GetCityList(); if (citylist != null && citylist.Any()) { foreach (var item in citylist) { Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("appid", AtourAuth_APPID); dic.Add("cityId", item.AA_CityId.ToString()); var sign = AtourSignUtil.GetSignUtil(dic); var hotellst = ApiHelper.HttpGet(url + "?appId=" + AtourAuth_APPID + "&cityId=" + item.AA_CityId.ToString() + "&sign=" + sign); if (!string.IsNullOrWhiteSpace(hotellst)) { var data = JsonConvert.DeserializeObject <AtourHotelResponse>(hotellst); if (data != null && data.msg == "success" && data.result.Any()) { foreach (var hotel in data.result) { } } } } } return(result); }
/// <summary> /// 获取Url参数 /// </summary> /// <param name="dic"></param> /// <returns></returns> private static string GetUrlPara(Dictionary <string, string> dic) { var rtn = string.Empty; var sign = AtourSignUtil.GetSignUtil(dic); dic.Add("sign", sign); foreach (var d in dic) { if (!string.IsNullOrEmpty(d.Value)) { rtn += $"&{d.Key}={d.Value}"; } } rtn = $"?{rtn.TrimStart('&')}"; return(rtn); }
//库存 baoku/hotel/getRoomInventoryList、 #region 城市匹配 /// <summary> /// 获取城市列表 /// </summary> /// <returns></returns> public static DataResult GetCityList() { var result = new DataResult(); var url = AtourSignUtil.AtourAuth_URL + "city/getCityList"; Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("appId", AtourSignUtil.AtourAuth_APPID); var sign = AtourSignUtil.GetSignUtil(dic); var citylist = ApiHelper.HttpGet(url + "?appId=" + AtourSignUtil.AtourAuth_APPID + "&sign=" + sign); if (string.IsNullOrWhiteSpace(citylist)) { result = new DataResult { Code = DataResultType.Fail, Message = "系统异常" }; } var oldList = new Sys_AreaInfoAccess2().Query().Where(x => x.type == 3).ToList(); var modellist = new List <Sys_AreaMatchModel>(); var data = citylist.ToObject <AtourCityResponse>(); data?.result?.ForEach(n => { var old = oldList.FirstOrDefault(x => x.name == n.cityName.Replace("市", "")); var model = new Sys_AreaMatchModel { OutProvId = 0, OutProvName = n.provinceName, OutCityId = n.cityId, OutCityName = n.cityName, HbId = old?.id ?? 0, OutType = 1 }; var db = new Sys_AreaMatchAccess(); var m = db.Query().Where(x => x.OutType == 1 && x.OutCityId == n.cityId).FirstOrDefault(); if (m == null || m.Id <= 0) { db.Add(model); result.Data += $"{old?.id}:{n.cityName};"; } else { } }); return(result); }
/// <summary> /// 酒店详情 /// </summary> /// <param name="maxId"></param> /// <param name="top"></param> /// <returns></returns> public static DataResult GetHotelDetail(int maxId, int top) { var result = new DataResult(); var hDb = new H_HotelInfoAccess(); var hotelList = hDb.Query().Where(h => h.Id >= maxId && h.HIOutType == 1).Top(top)?.ToList(); if (hotelList == null || hotelList.Count == 0) { return(result); } hotelList.ForEach(x => { var dic = new Dictionary <string, string>(); dic.Add("appId", AtourSignUtil.AtourAuth_APPID); dic.Add("hotelId", x.HIOutId.ToString()); var sign = AtourSignUtil.GetSignUtil(dic); var url = AtourSignUtil.AtourAuth_URL + "baoku/hotel/getHotel"; url += "?appId=" + AtourSignUtil.AtourAuth_APPID + "&hotelId=" + x.HIOutId + "&sign=" + sign; var rtn = ApiHelper.HttpGet(url)?.ToObject <AtourHotelDetailResponse>(); var hotel = rtn?.result; if (hotel?.hotelId > 0) { hDb.Update().Set(h => h.HIName == hotel.name && h.HIUpdateName == "亚朵数据更新" && h.HIUpdateTime == DateTime.Now ).Where(h => h.Id == x.Id).Execute(); logDb.AddLog(x.Id, $"亚朵更新酒店:{hotel.hotelId}:{hotel.name}", ResourceLogType.HotelUpdate); //更新图片 PidInit(hotel, x.Id); //会员 暂时未开发 } else { result.Message = rtn?.msg ?? "系统异常"; } }); return(result); }
/// <summary> /// 获取城市列表 /// </summary> /// <returns></returns> public DataResult GetCityList() { var result = new DataResult(); var url = AtourAuth_URL + "city/getCityList"; Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("appid", AtourAuth_APPID); var sign = AtourSignUtil.GetSignUtil(dic); var citylist = ApiHelper.HttpGet(url + "?appId=" + AtourAuth_APPID + "&sign=" + sign); if (!string.IsNullOrWhiteSpace(citylist)) { var data = JsonConvert.DeserializeObject <AtourCityResponse>(citylist); if (data != null && data.msg == "success" && data.result.Any()) { var modellist = new List <H_DistributorAreaInfoModel>(); foreach (var item in data.result) { var cityid = AreaBll.IsInTable(item.cityId); if (cityid == 0) { var model = new H_DistributorAreaInfoModel { AA_ProvinceId = 0, AA_ProvinceName = item.provinceName, AA_CityId = item.cityId, AA_CityName = item.cityName, AA_Type = 1 }; modellist.Add(model); } } var issuccess = AreaBll.Insert(modellist); result.Code = issuccess ? DataResultType.Sucess : DataResultType.Fail; } } return(result); }
/// <summary> /// 获取酒店列表 /// </summary> /// <returns></returns> public static DataResult GetHotelList(int maxId, int top) { var result = new DataResult() { Data = $"{maxId + top};" }; var citylist = new Sys_AreaMatchAccess().Query().Where(x => x.OutType == 1 && x.HbId > maxId).ToList(); if (citylist == null || !citylist.Any()) { result.Message = $"{maxId}未查询到数据"; result.Data = $"{maxId + top}"; return(result); } var log = string.Empty; foreach (var item in citylist) { result.Data += $"[{item.OutCityId}]:"; Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("appId", AtourSignUtil.AtourAuth_APPID); dic.Add("cityId", item.OutCityId.ToString()); var sign = AtourSignUtil.GetSignUtil(dic); var url = AtourSignUtil.AtourAuth_URL + "baoku/hotel/getHotelList"; url += "?appId=" + AtourSignUtil.AtourAuth_APPID + "&cityId=" + item.OutCityId.ToString() + "&sign=" + sign; var hotellst = ApiHelper.HttpGet(url); if (!string.IsNullOrWhiteSpace(hotellst)) { var baseCity = new Sys_AreaInfoAccess2().Query().FirstOrDefault(x => x.id == item.HbId); var baseProv = new Sys_AreaInfoAccess2().Query().FirstOrDefault(x => x.id == baseCity.pid); var data = hotellst.ToObject <AtourHotelResponse>(); result.Data += $"{baseCity.name}酒店数量:{data?.result?.Count};"; data?.result?.ForEach(x => { var hDb = new H_HotelInfoAccess(); var model = hDb.Query().Where(h => h.HIOutId == x.hotelId && h.HIOutType == 1).FirstOrDefault(); int id = model?.Id ?? 0; if (model == null || id <= 0) { model = new H_HotelInfoModel() { HIOutId = x.hotelId, HIOutType = 1, HIName = x.name ?? String.Empty, HIAddress = x.address ?? String.Empty, HILinkPhone = x.tel ?? string.Empty, HICity = baseCity.name, HICityId = baseCity.id, HIProvince = baseProv.name, HIProvinceId = baseCity.pid, HIAddName = "", HIAddTime = DateTime.Now, HICheckIn = string.Empty, HICheckOut = string.Empty, HIChildRemark = string.Empty, HICounty = string.Empty, HICountyId = 0, HIFacilities = string.Empty, HIHotelIntroduction = string.Empty, HIIsValid = 1, HIPetRemark = string.Empty, HIShoppingArea = string.Empty, HIShoppingAreaId = 0, HIUpdateName = string.Empty, HIUpdateTime = DateTime.Now, HIGdLonLat = $"{x.longitude},{x.latitude}" }; id = (int)(hDb.Add(model)); //OpenApi.SysInfo(id); OpenApi.HotelOffline(id, 1); logDb.AddLog(id, $"亚朵新增酒店:{x.hotelId}:{x.name}", ResourceLogType.HotelAdd); } else { //更新 //hDb.Update().Where(h=>h.Id==id) //.Set(h=>h.); } if (id > 0) { PidInit(x, id); } }); } else { result.Data += $"无数据;"; } } return(result); }
//房型 baoku/hotel/getRoomTypeList /// <summary> /// 酒店房型 /// </summary> /// <param name="maxId"></param> /// <param name="top"></param> /// <returns></returns> public static DataResult GetRoomType(int id, int top) { var result = new DataResult(); result.Data = string.Empty; var hDb = new H_HotelInfoAccess(); var hotelList = hDb.Query().Where(h => h.Id >= id && h.HIOutType == 1).Top(top)?.ToList(); if (hotelList == null || hotelList.Count == 0) { result.Message = "未查询到酒店"; return(result); } var indexCount = 0; hotelList.ForEach(x => { var dic = new Dictionary <string, string>(); dic.Add("appId", AtourSignUtil.AtourAuth_APPID); dic.Add("hotelId", x.HIOutId.ToString()); var sign = AtourSignUtil.GetSignUtil(dic); var url = AtourSignUtil.AtourAuth_URL + "baoku/hotel/getRoomTypeList"; url += "?appId=" + AtourSignUtil.AtourAuth_APPID + "&hotelId=" + x.HIOutId + "&sign=" + sign; var rtn = ApiHelper.HttpGet(url)?.ToObject <YdRoomTypeResponse>(); var list = rtn?.result; if (list?.Count > 0) { if (x.HIIsValid == 0) { hDb.Update().Where(h => h.Id == x.Id) .Set(h => h.HIIsValid == 1 && h.HIUpdateName == "亚朵更新有效" && h.HIUpdateTime == DateTime.Now) .Execute(); OpenApi.HotelOffline(x.Id, 1); logDb.AddLog(x.Id, $"亚朵更新有效:{x.HIOutId}:{x.HIName}", ResourceLogType.HotelUpdate); } var listId = list.Select(l => l.roomTypeId).ToList(); var db = new H_HotelRoomAccess(); var room = db.Query().Where(r => r.HIId == x.Id).ToList(); var updateList = room?.Where(r => listId.Contains(r.HROutId) && r.HROutType == 1)?.ToList(); result.Data += $"[{indexCount++}]{x.HIName}新增房型{list.Count()}个;"; list.ForEach(l => { var baseRoom = room?.Where(r => r.HROutId == l.roomTypeId && r.HIId == x.Id && r.HROutType == 1)?.FirstOrDefault(); if (baseRoom == null || baseRoom.Id <= 0) { var roomId = db.Add(new H_HotelRoomModel { Id = 0, HIId = x.Id, HROutType = 1, HROutId = l.roomTypeId, HRName = l.roomTypeName ?? string.Empty, HRRoomSIze = string.Empty, HRAddName = "亚朵新增", HRAddTime = DateTime.Now, HRBedType = GetBedType(l.bedRemark, l.roomTypeName ?? string.Empty), HRBedSize = GetBedSize(l.bedRemark, l.roomTypeName ?? string.Empty), HRFloor = string.Empty, HRIsValid = 1, HRPersonCount = 0, HRUpdateName = string.Empty, HRUpdateTime = DateTime.Now, HRWindowsType = 0 }); logDb.AddLog(x.Id, $"亚朵新增房型:{x.HIOutId}:{x.HIName};{l.roomTypeId}", ResourceLogType.RoomAdd); } else { if (baseRoom.HRBedType == 0) { db.Update().Set(rr => rr.HRBedType == GetBedType(l.bedRemark, l.roomTypeName ?? string.Empty)) .Set(rr => rr.HRBedSize == GetBedSize(l.bedRemark, l.roomTypeName ?? string.Empty)) .Set(rr => rr.HRUpdateTime == DateTime.Now) .Where(rr => rr.Id == baseRoom.Id).Execute(); logDb.AddLog(x.Id, $"亚朵更新房型床型:{x.HIOutId}:{x.HIName};{l.roomTypeId}", ResourceLogType.RoomUpdate); } } //是否要修改 }); OpenApi.AddRoomInfo(x.Id); } else { //房型数量为0 酒店无效 hDb.Update().Where(h => h.Id == x.Id) .Set(h => h.HIIsValid == 0 && h.HIUpdateName == "亚朵无房型更新" && h.HIUpdateTime == DateTime.Now) .Execute(); OpenApi.HotelOffline(x.Id, 0); result.Message = rtn?.msg ?? "系统异常"; logDb.AddLog(x.Id, $"亚朵无房型更新:{x.HIOutId}:{x.HIName}", ResourceLogType.HotelDelete); } //查询最近三天的价格和库存 var rrRtn = GetRoomRate(x.HIOutId, DateTime.Now, 7); result.Data += rrRtn.Message?.ToString() ?? string.Empty; }); return(result); }
/// <summary> /// 亚朵查询订单 /// </summary> /// <returns></returns> public DataResult AtourSearchOrder(string orderid) { var result = new DataResult(); var ordermodel = OrderBll.GetModel(orderid); //日志 var logmodel = new HO_HotelOrderLogModel { HOLOrderId = orderid, HOLLogType = 1,//订单日志 HOLAddId = 0, HOLAddName = "系统", HOLAddDepartId = 0, HOLAddDepartName = "系统", HOLAddTime = DateTime.Now }; if (ordermodel.Id > 0 && !string.IsNullOrWhiteSpace(ordermodel.HOSupplierSerialId)) { Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("orderNo", orderid); dic.Add("atourOrderNo", ordermodel.HOSupplierSerialId); dic.Add("appId", AtourAuth_APPID); var sign = AtourSignUtil.GetSignUtil(dic); var url = AtourAuth_URL + "baoku/order/queryOrder"; var orderrequest = new { orderNo = orderid, atourOrderNo = ordermodel.HOSupplierSerialId, appId = AtourAuth_APPID, sign = sign }; StringBuilder parm = new StringBuilder(); PropertyInfo[] request = orderrequest.GetType().GetProperties(); int j = 0; foreach (var t in request) { if (j > 0) { parm.Append("&"); } parm.AppendFormat("{0}={1}", t.Name, t.GetValue(orderrequest, null)); j++; } var orderresponse = ApiHelper.HttpPost(url, parm.ToString(), "application/x-www-form-urlencoded"); if (!string.IsNullOrWhiteSpace(orderresponse)) { var searchstatus = ""; var data = JsonConvert.DeserializeObject <JObject>(orderresponse); if (data["msg"].ToString().ToLower() == "success") { result.Code = DataResultType.Sucess; var oldstatus = GetStatus(ordermodel.HOStatus); if (data["result"] != null && data["result"].Any()) { var updatestatus = data["result"].FirstOrDefault(); if (updatestatus != null) { searchstatus = updatestatus["status"].ToString(); } } var up = OrderBll.UpdateAutorSataus(orderid, searchstatus); var neworder = OrderBll.GetModel(orderid); var newstatus = GetStatus(neworder.HOStatus); if (oldstatus != newstatus) { logmodel.HOLRemark = "亚朵查询订单接口返回:" + JsonConvert.SerializeObject(orderresponse); OrderLogBll.AddOrderModel(logmodel); logmodel.HOLRemark = "亚朵订单更新:亚朵返回订单状态" + searchstatus + "(1-预定 2-取消 3-夜审取消(即noshow) 4-入住 5-离店)" + "我方订单状态:" + oldstatus; OrderLogBll.AddOrderModel(logmodel); logmodel.HOLRemark = "我方订单更新:更新结果=" + (up > 0 ? "更新成功" : "更新失败") + "当前订单状态:" + newstatus; OrderLogBll.AddOrderModel(logmodel); //状态通知 int status = 0; switch (data["result"]["status"].ToString()) { case "1": status = 2; break; case "2": status = 1; break; case "3": status = 5; break; case "4": status = 3; break; case "5": status = 4; break; } if (status > 0) { var api = OpenApi.HotelOrderStatus(orderid, status); logmodel.HOLRemark = "状态更改通知飞猪:请求参数{id=" + orderid + ",状态:" + status + "};返回结果:" + api; OrderLogBll.AddOrderModel(logmodel); } } } else { result.Code = DataResultType.Fail; result.Message = data["msg"].ToString(); logmodel.HOLRemark = "亚朵订单更新:接口返回失败,失败原因:" + data["msg"].ToString(); OrderLogBll.AddOrderModel(logmodel); } } } return(result); }
/// <summary> /// 亚朵操作订单 /// </summary> /// <returns></returns> public DataResult AtourCancelOrder(string orderid) { var result = new DataResult(); result.Code = DataResultType.Fail; //日志 var logmodel = new HO_HotelOrderLogModel { HOLOrderId = orderid, HOLLogType = 1,//订单日志 HOLAddId = 0, HOLAddName = "系统", HOLAddDepartId = 0, HOLAddDepartName = "系统", HOLAddTime = DateTime.Now, }; var ordermodel = OrderBll.GetModel(orderid); if (ordermodel.Id > 0 && !string.IsNullOrWhiteSpace(ordermodel.HOSupplierSerialId)) { Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("atourOrderNo", ordermodel.HOSupplierSerialId); dic.Add("appId", AtourAuth_APPID); var sign = AtourSignUtil.GetSignUtil(dic); var url = AtourAuth_URL + "baoku/order/cancelOrder"; var orderrequest = new { atourOrderNo = ordermodel.HOSupplierSerialId, appId = AtourAuth_APPID, sign = sign }; StringBuilder parm = new StringBuilder(); PropertyInfo[] request = orderrequest.GetType().GetProperties(); int j = 0; foreach (var t in request) { if (j > 0) { parm.Append("&"); } parm.AppendFormat("{0}={1}", t.Name, t.GetValue(orderrequest, null)); j++; } var orderresponse = ApiHelper.HttpPost(url, parm.ToString(), "application/x-www-form-urlencoded"); logmodel.HOLRemark = "亚朵取消请求:" + parm.ToString() + "||亚朵取消接口返回:" + JsonConvert.SerializeObject(orderresponse); OrderLogBll.AddOrderModel(logmodel); if (!string.IsNullOrWhiteSpace(orderresponse)) { var data = JsonConvert.DeserializeObject <JObject>(orderresponse); if (data["msg"].ToString().ToLower() == "success") { result.Code = DataResultType.Sucess; OrderBll.UpdateAutorSataus(orderid, "2"); OpenApi.HotelOrderStatus(orderid, 5);//noshow } else { result.Code = DataResultType.Fail; } } } return(result); }
/// <summary> /// 亚朵订单 /// </summary> /// <param name="createrequset"></param> /// <param name="orderseridid"></param> /// <param name="ruleid"></param> /// <param name="qlhotelid"></param> /// <returns></returns> public DataResult AtourOrder(CreateRequset createrequset, string orderseridid, int ruleid, int qlhotelid) { var result = new DataResult(); var item = createrequset.orderModel; var orderrequest = new OrderRequest { appId = AtourAuth_APPID, //sign = sign, hotelId = item.hotelId, mebId = Convert.ToInt32(AtourAuth_MebId), roomTypeId = item.roomTypeId, roomNum = item.roomNum, roomRateList = JsonConvert.SerializeObject(item.roomRateList), arrival = item.arrival, assureTime = item.assureTime, departure = item.departure, mobile = "18962529773", contactName = item.contactName, guestName = item.guestName, source = 10, subSource = 85, roomRateTypeId = item.roomRateTypeId, thirdOrderNo = item.thirdOrderNo, couponsList = item.couponsList, remark = item.remark, }; Dictionary <string, string> dic = new Dictionary <string, string>(); //dic.Add("appId", AtourAuth_APPID); Type entityType = orderrequest.GetType(); PropertyInfo[] properties = entityType.GetProperties(); for (int i = 0; i < properties.Length; i++) { if (properties[i].GetValue(orderrequest, null) != null) { dic.Add(properties[i].Name, properties[i].GetValue(orderrequest, null).ToString()); } } var sign = AtourSignUtil.GetSignUtil(dic); orderrequest.sign = sign; var url = AtourAuth_URL + "baoku/order/createOrder"; StringBuilder parm = new StringBuilder(); PropertyInfo[] request = orderrequest.GetType().GetProperties(); int j = 0; foreach (var t in request) { if (j > 0) { parm.Append("&"); } parm.AppendFormat("{0}={1}", t.Name, t.GetValue(orderrequest, null)); j++; } var orderresponse = ApiHelper.HttpPost(url, parm.ToString(), "application/x-www-form-urlencoded"); //日志 var logmodel = new HO_HotelOrderLogModel { HOLOrderId = orderseridid, HOLLogType = 1,//订单日志 HOLAddId = 0, HOLAddName = "系统", HOLAddDepartId = 0, HOLAddDepartName = "系统", HOLAddTime = DateTime.Now }; logmodel.HOLRemark = "亚朵下单请求:" + url + "||parm:" + parm.ToString() + "|| 接口返回:" + orderresponse; OrderLogBll.AddOrderModel(logmodel); if (!string.IsNullOrWhiteSpace(orderresponse)) { var data = JsonConvert.DeserializeObject <JObject>(orderresponse); var price = OrderBll.GetHotelPriceList(ruleid, Convert.ToDateTime(item.arrival), Convert.ToDateTime(item.departure)); if (data["msg"].ToString().ToLower() == "success") { var serialid = data["result"]["atourOrderNo"].ToString(); result.Code = DataResultType.Sucess; result.Data = orderseridid; logmodel.HOLRemark = "亚朵更新供应商订单流水号:流水号=" + serialid; var upserialid = OrderBll.UpdatesSupplier(orderseridid, serialid, 0); logmodel.HOLRemark = "更新结果:" + (upserialid > 0 ? "更新成功" : "更新失败"); OrderLogBll.AddOrderModel(logmodel); if (price != null && price.Any()) { foreach (var i in price) { logmodel.HOLRemark = "亚朵更新库存:原有库存=" + i.HRPCount; i.HRPCount = i.HRPCount - 1 >= 0 ? i.HRPCount - 1 : 0; var up = HotelRoomRuleBll.UpdateCount(i); logmodel.HOLRemark += ",更新后库存=" + i.HRPCount + ",更新结果:" + up.Msg; OrderLogBll.AddOrderModel(logmodel); } } //下单成功通知 //OpenApi.HotelOrderStatus(orderseridid, 2); } else { if (data["level"].ToString() == "80034")//满房 { var upstock = YaDuoApiService.GetRoomRate(item.hotelId, Convert.ToDateTime(item.arrival), 100000); logmodel.HOLRemark = "满房更新酒店库存和价格:酒店id:" + qlhotelid + ",更新结果:" + upstock.Code; OrderLogBll.AddOrderModel(logmodel); if (price != null && price.Any()) { var i = price.OrderBy(s => s.HRPDate).FirstOrDefault(); i.HRPCount = 0; var up = HotelRoomRuleBll.UpdateCount(i); logmodel.HOLRemark = "满房更新库存:待更新信息:" + JsonConvert.SerializeObject(i) + ",更新结果:" + up.IsSuccess; OrderLogBll.AddOrderModel(logmodel); } //满房通知 //OpenApi.HotelOrderStatus(orderseridid, 1); } //if (data["level"].ToString() == "1006")//报价不存在或者不可订 //{ // if (data["msg"].ToString().Contains("报价不可订")) // { // var neworder = OrderBll.GetModel(orderseridid); // var newprice = OrderBll.GetHotelPriceList(neworder.HRRId, neworder.HOCheckInDate, neworder.HOCheckOutDate); // if (price != null && price.Any()) // { // var total = price.Sum(s => s.HRPContractPrice) * neworder.HORoomCount; // createrequset.orderModel.roomPrice = total.ToString(); // if (createrequset.supplierSourceId == 1) // { // total = total * 0.97M; // } // if (neworder.HOSellPrice >= total) // { // AtourOrder(createrequset, orderseridid, ruleid, qlhotelid); // } // } // } //} result.Code = DataResultType.Fail; result.Message = data["msg"].ToString(); OrderBll.UpdatesSupplier(orderseridid, "", 2); } } return(result); }