private void InitPage() { Hashtable ht = new Hashtable(); string fieldName = EnumHelper.GetEnumShowName(typeof(BusinessFieldType), FieldType); if (Request["type"] == BusinessType.Vehicle.GetHashCode().ToString()) { // 车辆详细(介绍、价格体系、用户须知) VehicleManager vehicleManager = new VehicleManager(); ht = vehicleManager.GetVehicleInfoByID(Request["id"]); } else if (Request["type"] == BusinessType.ChargingPies.GetHashCode().ToString()) { // 充电桩/停车场 ServiceAreaManager chargingPiesManager = new ServiceAreaManager(); ht = chargingPiesManager.GetInfoByID(Request["id"]); } else if (Request["type"] == BusinessType.Pits.GetHashCode().ToString()) { // 维修站 PitsManager pitsManager = new PitsManager(); ht = pitsManager.GetPitsInfoByID(Request["id"]); } if (ht != null && ht.Count > 0) { this.divContent.InnerHtml = ht[fieldName].ToString(); } }
/// <summary> /// 根据城市获取停车网点 /// </summary> /// <param name="context"></param> private void GetForbidList(HttpContext context) { ObjectApiResp resp = new ObjectApiResp(); resp.Code = "-1"; resp.Message = ""; string citycode = ""; citycode = context.Request["city"].ToString().Trim(); SysSettingManager settingManager = new SysSettingManager(); string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); if (returnVehicleMode == "1") { ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable dt = areaManager.GetForbidListByCityCode(citycode); if (dt != null) { resp.Data = dt; resp.Code = "0"; } } context.Response.Write(JsonConvert.SerializeObject(resp)); }
private void BindParkList() { ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable parkingList = areaManager.GetAllParkings(1, 9999); ParkingList.DataSource = parkingList; ParkingList.DataTextField = "ThisName"; ParkingList.DataValueField = "ID"; ParkingList.DataBind(); }
/// <summary> /// 绑定数据源 /// </summary> private void DataBindGrid(bool isQuery = false) { ServiceAreaManager areaManager = new ServiceAreaManager(); int count = 0; int pageIndex = isQuery ? 1 : PageControl1.PageIndex; KeyValuePair <StringBuilder, IList <SqlParam> > keyValue = InitCondition(); DataTable dt = areaManager.GetInfoPage(keyValue.Key, keyValue.Value, pageIndex, PageControl1.PageSize, ref count); ControlBindHelper.BindRepeaterList(dt, rp_Item); this.PageControl1.PageIndex = pageIndex; this.PageControl1.RecordCount = Convert.ToInt32(count); this.PageControl1.PageChecking(); }
public string Execute(Hashtable res) { if (!string.IsNullOrEmpty(SiteHelper.GetAppsetString("NearParkingKM"))) { km = double.Parse(SiteHelper.GetAppsetString("NearParkingKM")); } if (!string.IsNullOrEmpty(SiteHelper.GetAppsetString("PageNum"))) { pageNum = int.Parse(SiteHelper.GetAppsetString("PageNum")); } if (res["Longitude"] == null || res["Longitude"].ToString().Trim().Length <= 0 || res["Latitude"] == null || res["Latitude"].ToString().Trim().Length <= 0 || res["PageNum"] == null || res["PageNum"].ToString().Trim().Length <= 0 || res["CurrentPage"] == null || res["CurrentPage"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { //pageNum = int.Parse(res["PageNum"].ToString().Trim()); currentPage = int.Parse(res["CurrentPage"].ToString().Trim()); string longitude = res["Longitude"].ToString().Trim(); string latitude = res["Latitude"].ToString().Trim(); ListApiResp resp = new ListApiResp(); resp.Code = "-1"; resp.Message = ""; int count = 0; ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable dt = areaManager.GetNearParking(km, longitude, latitude, currentPage, pageNum, ref count); if (dt != null && dt.Rows.Count > 0) { List <GetNearParkingResponseDataItem> list = new List <GetNearParkingResponseDataItem>(); foreach (DataRow dr in dt.Rows) { GetNearParkingResponseDataItem item = new GetNearParkingResponseDataItem(); item.name = dr["ThisName"].ToString(); item.center = dr["Longitude"].ToString() + "," + dr["Latitude"].ToString(); item.points = dr["Coordinates"].ToString(); list.Add(item); } resp.List = list; resp.Total = count; resp.Code = "0"; } return(JsonConvert.SerializeObject(resp)); } }
public ApiResp Execute(System.Collections.Hashtable params_ht) { ApiResp resp = new ApiResp(); resp.code = "-1"; string client_id = params_ht["client_id"].ToString(); long timestamp = long.Parse(params_ht["timestamp"].ToString()); string sign = params_ht["sign"].ToString(); List <GetStations_Item> data = new List <GetStations_Item>(); SysSettingManager settingManager = new SysSettingManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); DataTable dt = areaManager.GetAllParkings(1, 99999); if (returnVehicleMode == "1" && dt != null) { foreach (DataRow dr in dt.Rows) { GetStations_Item item = new GetStations_Item(); item.stationId = dr["ID"].ToString(); item.stationName = dr["ThisName"].ToString(); item.stationLat = double.Parse(dr["Latitude"].ToString()); item.stationLon = double.Parse(dr["Longitude"].ToString()); item.stationAddress = dr["Address"].ToString(); item.startTime = 0; item.endTime = 2400; item.radius = 0.00; item.parkType = 2; item.coordinatepoints = dr["Coordinates"].ToString().Replace(";", "|"); data.Add(item); } resp.code = "0"; resp.msg = "成功"; resp.data = data; } else { resp.code = "-1"; resp.msg = "未找到停车网点"; } return(resp); }
/// <summary> /// 根据城市获取运营区域 /// </summary> /// <param name="context"></param> private void GetServiceAreaByID(HttpContext context) { ObjectApiResp resp = new ObjectApiResp(); resp.Code = "-1"; resp.Message = ""; string vehicleID = context.Request["vehicleID"].ToString().Trim(); ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable dt = areaManager.GetServiceAreaListByID(vehicleID); if (dt != null) { resp.Data = dt; resp.Code = "0"; } context.Response.Write(JsonConvert.SerializeObject(resp)); }
public string Execute(Hashtable params_ht) { Hashtable res = params_ht; if (res["UID"] == null || res["UID"].ToString().Trim().Length <= 0 || res["VID"] == null || res["VID"].ToString().Trim().Length <= 0 || res["ParkingID"] == null || res["ParkingID"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { uid = res["UID"].ToString().Trim(); vid = res["VID"].ToString().Trim(); parkingid = res["ParkingID"].ToString().Trim(); VehicleManager vm = new VehicleManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); OPUserManager hum = new OPUserManager(); Hashtable vehicle_ht = vm.GetVehicleInfoByID(vid); if (vehicle_ht == null) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "未找到相关车辆信息")); } Hashtable parking_ht = areaManager.GetInfoByID(parkingid); if (parking_ht == null) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "未找到相关网点信息")); } Hashtable ht = new Hashtable(); ht["VehicleID"] = vehicle_ht["ID"]; ht["ParkingID"] = parking_ht["ID"]; bool isSuccess = vm.AddOrEditVehicleInfo(ht, vehicle_ht["ID"].ToString()); if (!isSuccess) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "绑定车辆与网点失败")); } else { return(SiteHelper.GetJsonFromHashTable(null, "success", "绑定车辆与网点成功")); } } }
/// <summary> /// 根据城市获取运营区域 /// </summary> /// <param name="context"></param> private void GetServiceArea(HttpContext context) { ObjectApiResp resp = new ObjectApiResp(); resp.Code = "-1"; resp.Message = ""; string citycode = ""; citycode = context.Request["city"].ToString().Trim(); ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable dt = areaManager.GetServiceAreaList(citycode);// areaManager.GetServiceAreaListByCityCode(citycode); if (dt != null) { resp.Data = dt; resp.Code = "0"; } context.Response.Write(JsonConvert.SerializeObject(resp)); }
public string Execute(Hashtable params_ht) { Hashtable res = params_ht; if (res["UID"] == null || res["UID"].ToString().Trim().Length <= 0 || res["PageNum"] == null || res["PageNum"].ToString().Trim().Length <= 0 || res["CurrentPage"] == null || res["CurrentPage"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { try { uid = res["UID"].ToString().Trim(); pageNum = int.Parse(res["PageNum"].ToString().Trim()); currentPage = int.Parse(res["CurrentPage"].ToString().Trim()); if (res["Keyword"] != null && res["Keyword"].ToString().Trim().Length > 0) { keyword = res["Keyword"].ToString().Trim(); } } catch { return(SiteHelper.GetJsonFromHashTable(null, "faild", "数据格式不正确")); } UserInfoManager uim = new UserInfoManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable parkings = areaManager.GetParkingList(keyword, currentPage, pageNum); if (parkings == null || parkings.Rows.Count <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "亲,没有数据了")); } else { return(JsonHelper.DataTableToJson("success", "获取数据成功", parkings, "GetParkingList")); } } }
public string Execute(Hashtable res) { if (res["Longitude"] == null || res["Longitude"].ToString().Trim().Length <= 0 || res["Latitude"] == null || res["Latitude"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { string longitude = res["Longitude"].ToString().Trim(); string latitude = res["Latitude"].ToString().Trim(); string citycode = "", cityname = "", districtcode = "", districtname = ""; string address = SiteHelper.GetAddressInfoByGPS(longitude, latitude, out citycode, out cityname, out districtcode, out districtname); ObjectApiResp resp = new ObjectApiResp(); resp.Code = "-1"; resp.Message = ""; ServiceAreaManager areaManager = new ServiceAreaManager(); Hashtable ht = areaManager.GetServiceAreaByCityCode(districtcode); if (ht == null || ht.Keys.Count == 0) { ht = areaManager.GetServiceAreaByCityCode(citycode); } if (ht != null && ht.Keys.Count > 0) { GetServiceAreaResponse data = new GetServiceAreaResponse(); data.city = cityname; data.points = SiteHelper.GetHashTableValueByKey(ht, "Coordinates"); data.longitude = SiteHelper.GetHashTableValueByKey(ht, "Longitude"); data.latitude = SiteHelper.GetHashTableValueByKey(ht, "Latitude"); resp.Data = data; resp.Code = "0"; } return(JsonConvert.SerializeObject(resp)); } }
private GetBatchOrderState_Item GetOrderState(string order_no) { BaoJiaManager mgr = new BaoJiaManager(); Hashtable ht = mgr.GetOrderInfo(order_no); if (ht == null) { return(null); } else { GetBatchOrderState_Item data = new GetBatchOrderState_Item(); decimal kmprice = 0.80m, minuteprice = 0.40m, mileage = 0, TotalMoney = 0.00m, SettlementMoney = 0.00m, outServiceAreaFee = 0.00m; int minutes = 0; string returnLocType = ""; ServiceAreaManager areaManager = new ServiceAreaManager(); SysSettingManager settingManager = new SysSettingManager(); VehiclePriceManager priceManager = new VehiclePriceManager(); Hashtable billing_ht = priceManager.GetOrderSettlement(SiteHelper.GetHashTableValueByKey(ht, "id")); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "KmPrice"), out kmprice); int.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "Minutes"), out minutes); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "TotalMoney"), out TotalMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(ht, "SettlementMoney"), out SettlementMoney); returnLocType = SiteHelper.GetHashTableValueByKey(ht, "ReturnLocType"); decimal.TryParse(SiteHelper.GetHashTableValueByKey(ht, "OutServiceAreaFee"), out outServiceAreaFee); string orderState = SiteHelper.GetHashTableValueByKey(ht, "OrderState"); if (orderState == "1") { SettlementMoney = TotalMoney; VehicleManager vm = new VehicleManager(); Hashtable vehicle_ht = vm.GetVehicleInfoByIDORNumber(SiteHelper.GetHashTableValueByKey(ht, "VehicleID")); string lat = vehicle_ht["LATITUDE"].ToString(); string lng = vehicle_ht["LONGITUDE"].ToString(); #region 判断还车点是否在运营区域内,运营区域外加收费用 Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(SiteHelper.GetHashTableValueByKey(ht, "VehicleID")); if (area_ht != null && area_ht.Keys.Count > 0) { returnLocType = "03"; List <LatLng> area_pts = new List <LatLng>(); string coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } LatLng vehicle_pt = new LatLng(double.Parse(lat), double.Parse(lng)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(lng, lat); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { returnLocType = "04"; string serviceFee = settingManager.GetValueByKey("OutServiceAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion #region 判断还车点是否在停车点内,否则加收费用 string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); if (outServiceAreaFee == 0 && returnVehicleMode == "1") { returnLocType = "01"; LatLng vehicle_pt = new LatLng(double.Parse(lat), double.Parse(lng)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(lng, lat); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); Hashtable parking_ht = areaManager.GetNearestParking(vehicle_pt.longitude.ToString(), vehicle_pt.latitude.ToString(), SiteHelper.GetHashTableValueByKey(ht, "VehicleID")); List <LatLng> parking_pts = new List <LatLng>(); if (parking_ht != null && parking_ht.Keys.Count > 0) { string coordinates = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); parking_pts.Add(pt); } } bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); if (!isInPoly) { returnLocType = "02"; string serviceFee = settingManager.GetValueByKey("OutParkingAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion } data.order_no = order_no; data.amount = (double)(SettlementMoney + outServiceAreaFee);; data.order_status = 10000; if (orderState == "1") { data.order_status = 10000; } else if (orderState == "0") { data.order_status = 10301; } else if (orderState == "2" || orderState == "5" || orderState == "3") { data.order_status = 80200; } data.timestamp = (long)(DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime()).TotalSeconds; return(data); } }
public string Execute(Hashtable params_ht) { Hashtable res = params_ht; if (res["UID"] == null || res["UID"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { uid = res["UID"].ToString().Trim(); if (res["Longitude"] != null && res["Longitude"].ToString().Trim().Length > 0) { userLng = res["Longitude"].ToString().Trim(); } if (res["Latitude"] != null && res["Latitude"].ToString().Trim().Length > 0) { userLat = res["Latitude"].ToString().Trim(); } cacheKey += uid; ICache cache = null; cache = CacheFactory.GetCache(); if (!string.IsNullOrEmpty(cache.Get <string>(cacheKey))) { if (cache != null) { cache.Dispose(); } Logger.Error("还车10秒内," + uid); return(SiteHelper.GetJsonFromHashTable(null, "faild", "还车处理中,请勿重复点击")); } else { DateTime dt = DateTime.Now.AddSeconds(10); cache.Set(cacheKey, uid, dt - DateTime.Now); //cache.Dispose(); } /*if (cache != null) * { * cache.Dispose(); * }*/ UserInfoManager uim = new UserInfoManager(); OrdersManager om = new OrdersManager(); VehicleManager vm = new VehicleManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); SysSettingManager settingManager = new SysSettingManager(); Hashtable order = om.GetUserCurrentOrderVehicle(uid); //判断是否有车 if (order == null) { if (cache != null) { cache.Dispose(); } return(SiteHelper.GetJsonFromHashTable(null, "faild", "您没有车辆无法还车")); } else { //车辆坐标 string longitude = SiteHelper.GetHashTableValueByKey(order, "Longitude"); string latitude = SiteHelper.GetHashTableValueByKey(order, "Latitude"); string orderNum = SiteHelper.GetHashTableValueByKey(order, "OrderNum"); Hashtable userht = uim.GetUserInfoByUserID(uid); decimal balance = 0.00m, raiseBalance = 0.00m; decimal.TryParse(SiteHelper.GetHashTableValueByKey(userht, "Balance"), out balance); decimal.TryParse(SiteHelper.GetHashTableValueByKey(userht, "RaiseBalance"), out raiseBalance); //处理订单 if (order == null) { if (cache != null) { cache.Dispose(); } return(SiteHelper.GetJsonFromHashTable(null, "faild", "还车操作失败,请联系管理员")); } else { int renttime = 0; int.TryParse(SiteHelper.GetHashTableValueByKey(order, "RentDuration"), out renttime); decimal hours = 0.00m; decimal kmprice = 0.80m; decimal minuteprice = 0.40m; decimal mileage = 0; int minutes = 0; decimal userprivilegeratio = 1; decimal raisecommisssionratio = 0.10m; decimal TotalMoney = 0.00m; decimal SettlementMoney = 0.00m; decimal occupyMoney = 0.0m; decimal payMoney = 0.00m; decimal RaiseCommissionMoney = 0.00m; decimal outServiceAreaFee = 0.00m; DateTime createtime = DateTime.Now; DateTime startTime = DateTime.Now; String returnParkingID = null, returnLocType = null; decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "KMPrice"), out kmprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "Mileage"), out mileage); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "UserPrivilegeRatio"), out userprivilegeratio); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "RaiseCommissionRatio"), out raisecommisssionratio); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "TotalMoney"), out TotalMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "SettlementMoney"), out SettlementMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "OccupyMoney"), out occupyMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "RaiseCommissionMoney"), out RaiseCommissionMoney); DateTime.TryParse(SiteHelper.GetHashTableValueByKey(order, "CreateTime"), out createtime); DateTime.TryParse(SiteHelper.GetHashTableValueByKey(order, "StartTime"), out startTime); int startminutes = 0; int.TryParse(SiteHelper.GetHashTableValueByKey(order, "StartMinutes"), out startminutes); string strStartTime = SiteHelper.GetHashTableValueByKey(order, "StartTime"); LatLng vehicle_pt = new LatLng(double.Parse(latitude), double.Parse(longitude)); //车辆GPS坐标转高德坐标 vehicle_pt = SiteHelper.GPSToGCJ02(longitude, latitude); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); string cityCacheKey = "Vehicle_City_" + SiteHelper.GetHashTableValueByKey(order, "VID"); string cityId = cache.Get <string>(cityCacheKey); if (string.IsNullOrEmpty(cityId)) { Hashtable vehicle_ht = vm.GetVehicleInfoByID(SiteHelper.GetHashTableValueByKey(order, "VID")); cityId = vehicle_ht["CITYID"].ToString(); DateTime timeSpan = DateTime.Now.AddHours(2); cache.Set(cityCacheKey, cityId, timeSpan - DateTime.Now); } string serviceAreaKey = "Service_Area_" + cityId; string coordinates = cache.Get <string>(serviceAreaKey); if (string.IsNullOrEmpty(coordinates)) { Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(SiteHelper.GetHashTableValueByKey(order, "VID")); if (area_ht != null && area_ht.Keys.Count > 0) { coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); if (!string.IsNullOrEmpty(coordinates)) { DateTime timeSpan = DateTime.Now.AddDays(10); cache.Set(serviceAreaKey, coordinates, timeSpan - DateTime.Now); } } } List <LatLng> area_pts = new List <LatLng>(); bool isInPoly = true; string outServiceAreaReturn = settingManager.GetValueByKey("OutServiceAreaReturn"); if (!string.IsNullOrEmpty(coordinates)) { foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly && "0".Equals(outServiceAreaReturn)) { if (cache != null) { cache.Dispose(); } Logger.Info("用户:" + uid + ",订单:" + orderNum + ",在运营区域外被禁止还车"); return(SiteHelper.GetJsonFromHashTable(null, "faild", "运营区域外禁止还车,请骑回运营区域再还车")); } } string gpsnum = SiteHelper.GetHashTableValueByKey(order, "VehicleGPSNum"); //锁车 bool isSuccess = vm.CloseVehicle(SiteHelper.GetHashTableValueByKey(order, "VID")); if (!isSuccess) { Logger.Error("用户:" + uid + ",订单:" + orderNum + ",还车锁车失败:" + gpsnum); } VehiclePriceManager priceManager = new VehiclePriceManager(); Hashtable billing_ht = priceManager.GetOrderSettlement(SiteHelper.GetHashTableValueByKey(order, "OrderID")); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "KmPrice"), out kmprice); int.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "Minutes"), out minutes); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "TotalMoney"), out TotalMoney); SettlementMoney = TotalMoney; #region 判断还车点是否在运营区域内,运营区域外加收费用 if (TotalMoney > 0 && !string.IsNullOrEmpty(coordinates)) { returnLocType = "03"; //bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); string vehicleInArea = isInPoly ? "在运营区域内还车" : "在运营区域外还车"; Logger.Info("用户:" + uid + ",订单:" + SiteHelper.GetHashTableValueByKey(order, "OrderID") + "," + vehicleInArea + "车辆GPS坐标:" + longitude + "," + latitude + ",高德坐标:" + vehicle_pt.longitude + "," + vehicle_pt.latitude); bool isInPoly2 = false;//用户坐标是否在区域内 if (!string.IsNullOrEmpty(userLng) && !string.IsNullOrEmpty(userLat)) { LatLng user_pt = new LatLng(double.Parse(userLat), double.Parse(userLng)); isInPoly2 = SiteHelper.IsPtInPoly(user_pt, area_pts); } //string userInArea = isInPoly2 ? "用户在运营区域内" : "用户在运营区域外"; //车辆在运营区域外,不判断用户位置 if (!isInPoly && !isInPoly2) if (!isInPoly) { returnLocType = "04"; string serviceFee = settingManager.GetValueByKey("OutServiceAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; Logger.Info("订单: " + orderNum + ",加收调度费值:" + serviceFee + ",加收调度费金额:" + outServiceAreaFee); } } #endregion #region 判断还车点是否在停车点内,否则加收费用 string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); if (TotalMoney > 0 && outServiceAreaFee == 0 && returnVehicleMode == "1") { returnLocType = "01"; DataTable parking_dt = areaManager.GetNearestParkingsByCity(vehicle_pt.longitude.ToString(), vehicle_pt.latitude.ToString(), cityId); if (parking_dt != null) { //bool isInPoly = false; bool isInPoly2 = false;//用户坐标是否在区域内 foreach (DataRow dr in parking_dt.Rows) { List <LatLng> parking_pts = new List <LatLng>(); returnParkingID = dr["ID"].ToString(); coordinates = dr["Coordinates"].ToString(); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); parking_pts.Add(pt); } isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); if (!string.IsNullOrEmpty(userLng) && !string.IsNullOrEmpty(userLat)) { LatLng user_pt = new LatLng(double.Parse(userLat), double.Parse(userLng)); isInPoly2 = SiteHelper.IsPtInPoly(user_pt, parking_pts); } string vehicleInArea = isInPoly ? "在停车点内还车" : "在停车点外还车"; string userInArea = isInPoly2 ? "用户在停车点内" : "用户在停车点外"; Logger.Info("用户:" + uid + ",订单:" + orderNum + "," + vehicleInArea + ",车辆GPS坐标:" + longitude + "," + latitude + ",高德坐标:" + vehicle_pt.longitude + "," + vehicle_pt.latitude + ",用户高德坐标:" + userLng + "," + userLat + "," + userInArea); if (isInPoly || isInPoly2) { break; } } if (!isInPoly && !isInPoly2) { returnLocType = "02"; returnParkingID = null; string serviceFee = settingManager.GetValueByKey("OutParkingAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; Logger.Info("用户:" + uid + ",订单:" + orderNum + "加收调度费值:" + serviceFee + ",加收调度费金额:" + outServiceAreaFee); } } } #endregion payMoney = TotalMoney; Hashtable userParm = new Hashtable(); userParm["VID"] = SiteHelper.GetHashTableValueByKey(order, "VID"); userParm["OrderNum"] = SiteHelper.GetHashTableValueByKey(order, "OrderNum"); userParm["TotalMoney"] = TotalMoney; userParm["SettlementMoney"] = SettlementMoney; userParm["PayMoney"] = payMoney; userParm["PayTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["EndTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["FinishedTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["OID"] = SiteHelper.GetHashTableValueByKey(order, "orderid"); userParm["ChangesAmount"] = -Math.Abs(TotalMoney); userParm["UserFinancialID"] = CommonHelper.GetGuid; userParm["UserID"] = uid; userParm["ChangesTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["ChangesType"] = UserFinancialChangesType.Consumption.GetHashCode().ToString(); userParm["OrderID"] = SiteHelper.GetHashTableValueByKey(order, "orderid"); userParm["RentDuration"] = hours; userParm["Remark"] = "用户还车"; userParm["Minutes"] = minutes; userParm["DiffMoney"] = TotalMoney; userParm["Operator"] = ""; userParm["OperatorType"] = UserFinancialOperatorType.Admin.GetHashCode().ToString(); userParm["State"] = UserFinancialState.Effect.GetHashCode().ToString(); userParm["MessageID"] = CommonHelper.GetGuid; userParm["OutServiceAreaFee"] = (int)outServiceAreaFee; userParm["ReturnParkingID"] = returnParkingID; userParm["ReturnLocType"] = returnLocType; if (cache != null) { cache.Dispose(); } bool isSettlementSuccess = uim.ReturnVehicle(userParm); if (isSettlementSuccess) { om.UpdateOrderGPS(SiteHelper.GetHashTableValueByKey(order, "orderid"), false); Hashtable ht = om.GetOrderByNum(SiteHelper.GetHashTableValueByKey(order, "OrderNum")); return(SiteHelper.GetJsonFromHashTable(ht, "success", "还车成功", "OrderInfo")); } else { return(SiteHelper.GetJsonFromHashTable(null, "faild", "还车失败,请联系管理员")); } } } } }
public string Execute(Hashtable params_ht) { try { Hashtable res = params_ht; if (res["UID"] == null || res["UID"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { uid = res["UID"].ToString().Trim(); OrdersManager om = new OrdersManager(); Hashtable ht = om.GetUserCurrentOrderVehicle(uid); if (ht == null) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您当前没有预约车辆")); } else { cacheKey += uid; string orderCacheKey = cacheKey; ICache cache = CacheFactory.GetCache(); /*string result = cache.Get<string>(orderCacheKey); * if (!string.IsNullOrEmpty(result)) * { * if (cache != null) * { * cache.Dispose(); * } * Logger.Error("获取订单信息120秒内," + uid); * return result; * } * else * {*/ string lat = ht["LATITUDE"].ToString(); string lng = ht["LONGITUDE"].ToString(); if (!string.IsNullOrEmpty(lng) && !string.IsNullOrEmpty(lat)) { if (res["Client"] != null && "iOS" == res["Client"].ToString()) { LatLng ll = new LatLng(double.Parse(lat), double.Parse(lng)); ll = SiteHelper.TransformFromWGSToGCJ(ll); ht["LONGITUDE"] = ll.longitude; ht["LATITUDE"] = ll.latitude; } else { /*LatLng latlng = SiteHelper.GetBaiduByGPS(lat, lng); * if (latlng != null) * { * ht["LATITUDE"] = latlng.latitude; * ht["LONGITUDE"] = latlng.longitude; * if (ht["ADDRESS"].ToString().Length <= 0) * { * ht["ADDRESS"] = SiteHelper.GetLocationByGPS(ht["LATITUDE"].ToString(), ht["LONGITUDE"].ToString()); * } * }*/ LatLng ll = new LatLng(double.Parse(lat), double.Parse(lng)); ll = SiteHelper.TransformFromWGSToGCJ(ll); ht["LONGITUDE"] = ll.longitude; ht["LATITUDE"] = ll.latitude; ht["ADDRESS"] = SiteHelper.GetLocationByGPS(ht["LATITUDE"].ToString(), ht["LONGITUDE"].ToString(), "wgs84ll"); } } decimal kmprice = 0.80m, minuteprice = 0.40m, mileage = 0, TotalMoney = 0.00m, SettlementMoney = 0.00m, outServiceAreaFee = 0.00m; int minutes = 0; ServiceAreaManager areaManager = new ServiceAreaManager(); SysSettingManager settingManager = new SysSettingManager(); VehiclePriceManager priceManager = new VehiclePriceManager(); Hashtable billing_ht = priceManager.GetOrderSettlement(SiteHelper.GetHashTableValueByKey(ht, "orderid")); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "KmPrice"), out kmprice); int.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "Minutes"), out minutes); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "TotalMoney"), out TotalMoney); SettlementMoney = TotalMoney; #region 判断还车点是否在运营区域内,运营区域外加收费用 string cityId = ht["CITYID"].ToString(); string serviceAreaKey = "Service_Area_" + cityId; string coordinates = cache.Get <string>(serviceAreaKey); if (string.IsNullOrEmpty(coordinates)) { Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(SiteHelper.GetHashTableValueByKey(ht, "VID")); if (area_ht != null && area_ht.Keys.Count > 0) { coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); if (!string.IsNullOrEmpty(coordinates)) { DateTime timeSpan = DateTime.Now.AddDays(10); cache.Set(serviceAreaKey, coordinates, timeSpan - DateTime.Now); } } } if (!string.IsNullOrEmpty(coordinates)) { List <LatLng> area_pts = new List <LatLng>(); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } LatLng vehicle_pt = new LatLng(double.Parse(lat), double.Parse(lng)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(lng, lat); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { string serviceFee = settingManager.GetValueByKey("OutServiceAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion #region 判断还车点是否在停车点内,否则加收费用 string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); if (TotalMoney > 0 && outServiceAreaFee == 0 && returnVehicleMode == "1") { LatLng vehicle_pt = new LatLng(double.Parse(lat), double.Parse(lng)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(lng, lat); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); /*Hashtable parking_ht = areaManager.GetNearestParking(vehicle_pt.longitude.ToString(), vehicle_pt.latitude.ToString(), SiteHelper.GetHashTableValueByKey(ht, "VID")); * List<LatLng> parking_pts = new List<LatLng>(); * if (parking_ht != null && parking_ht.Keys.Count > 0) * { * returnParkingID = SiteHelper.GetHashTableValueByKey(parking_ht, "ID"); * string coordinates = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates"); * foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) * { * string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); * LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); * parking_pts.Add(pt); * } * } * bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); * if (!isInPoly) * { * string serviceFee = settingManager.GetValueByKey("OutParkingAreaFee"); * if (serviceFee.StartsWith("+")) * { * serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); * decimal.TryParse(serviceFee, out outServiceAreaFee); * TotalMoney = TotalMoney + outServiceAreaFee; * } * else * { * serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); * decimal.TryParse(serviceFee, out outServiceAreaFee); * TotalMoney = TotalMoney * outServiceAreaFee; * } * outServiceAreaFee = TotalMoney - SettlementMoney; * }*/ DataTable parking_dt = areaManager.GetNearestParkingsByCity(vehicle_pt.longitude.ToString(), vehicle_pt.latitude.ToString(), cityId); if (parking_dt != null) { bool isInPoly = false; foreach (DataRow dr in parking_dt.Rows) { List <LatLng> parking_pts = new List <LatLng>(); coordinates = dr["Coordinates"].ToString(); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); parking_pts.Add(pt); } isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); if (isInPoly) { break; } } if (!isInPoly) { string serviceFee = settingManager.GetValueByKey("OutParkingAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } } #endregion ht["MINUTES"] = minutes; ht["OUTSERVICEAREAFEE"] = (int)outServiceAreaFee; ht["TOTALMONEY"] = TotalMoney; //DateTime dt = DateTime.Now.AddSeconds(120); //cache.Set(orderCacheKey, SiteHelper.GetJsonFromHashTable(ht, "success", "获取数据成功", "OrderVehicle"), dt - DateTime.Now); if (cache != null) { cache.Dispose(); } return(SiteHelper.GetJsonFromHashTable(ht, "success", "获取数据成功", "OrderVehicle")); //} } } } catch (Exception e) { Logger.Error(e.StackTrace + e.Message); return(SiteHelper.GetJsonFromHashTable(null, "faild", "查询失败")); } }
public ApiResp Execute(Hashtable params_ht) { int start = DateTime.Now.Millisecond; ApiResp resp = new ApiResp(); ICache cache = null; try { cache = CacheFactory.GetCache(); string jsonData = params_ht["json"].ToString(); dynamic jsonObj = DynamicJson.Parse(jsonData); string carId = ""; if (jsonObj.IsDefined("carId")) { carId = jsonObj.carId; } double distance = 0.00; if (jsonObj.IsDefined("distance")) { distance = jsonObj.distance; } if (jsonObj.IsDefined("data")) { foreach (var item in jsonObj.data) { string acc = ""; if (item.IsDefined("acc")) { acc = item.acc; } double longitude = 0.00; if (item.IsDefined("longitude")) { longitude = item.longitude; } double latitude = 0.00; if (item.IsDefined("latitude")) { latitude = item.latitude; } double speed = 0.00; if (item.IsDefined("speed")) { speed = item.speed; } string defend = ""; if (item.IsDefined("defend")) { defend = item.defend; } VehicleManager vm = new VehicleManager(); Hashtable vehicle_ht = vm.GetVehicleInfoByGPSNum(carId); if (vehicle_ht != null && vehicle_ht.Keys.Count > 0) { string vid = vehicle_ht["ID"].ToString(); //车辆使用状态 1空闲,2预约中,3客户使用中,4运维操作中 string useState = SiteHelper.GetHashTableValueByKey(vehicle_ht, "UseState"); string strLastUpdateTime = SiteHelper.GetHashTableValueByKey(vehicle_ht, "LastUpdateTime"); int diffSecond = 5; if (!string.IsNullOrEmpty(strLastUpdateTime)) { DateTime lastUpdateTime = DateTime.Parse(strLastUpdateTime); diffSecond = SiteHelper.ExecDateDiffSecond(lastUpdateTime, DateTime.Now); } if (diffSecond > 3) { Hashtable ht = new Hashtable(); //车辆开关状态 LockState ,开:unlock,关:lock //acc =1 && defend =0 启动 unlock if (acc.Equals("1") && defend.Equals("0")) { ht["LockState"] = "unlock"; } //defend =1 设防 lock if (defend.Equals("1")) { ht["LockState"] = "lock"; } if (longitude > 0) { ht["Longitude"] = longitude; } if (latitude > 0) { ht["Latitude"] = latitude; } ht["CurrentSpeed"] = speed; ht["Mileage"] = distance / 1000.00; ht["GPSTime"] = DateTime.Now; ht["LastUpdateTime"] = DateTime.Now; bool result = false; if (ht.Keys.Count > 0) { result = vm.AddOrEditVehicleInfo(ht, vid); } Hashtable htAlarm = new Hashtable(); //超速 if (speed > 30) { string overSpeedKey = "over_speed_" + carId; string overSpeedValue = cache.Get <string>(overSpeedKey); if (string.IsNullOrEmpty(overSpeedValue)) { Logger.Warn("超速报警," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); VehicleAlarmManager alarmManager = new VehicleAlarmManager(); htAlarm["ID"] = Guid.NewGuid().ToString(); htAlarm["VehicleID"] = vid; htAlarm["IMEI"] = carId; htAlarm["AlarmType"] = 6; htAlarm["Speed"] = speed; htAlarm["AlarmTime"] = DateTime.Now; htAlarm["AlarmStatus"] = 0; htAlarm["CreateTime"] = DateTime.Now; if (alarmManager.AddOrEdit(htAlarm, null)) { DateTime timeSpan = DateTime.Now.AddMinutes(1); cache.Set(overSpeedKey, 1, timeSpan - DateTime.Now); Logger.Warn("超速报警记录添加成功," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); } else { Logger.Warn("超速报警记录添加失败," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); } } } else { if (speed >= 5 && "1".Equals(useState)) { string moveKey = "move_" + carId; string moveValue = cache.Get <string>(moveKey); if (string.IsNullOrEmpty(moveValue)) { Logger.Warn("无单移动报警," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc + ",useState=" + useState); VehicleAlarmManager alarmManager = new VehicleAlarmManager(); htAlarm["ID"] = Guid.NewGuid().ToString(); htAlarm["VehicleID"] = vid; htAlarm["IMEI"] = carId; htAlarm["AlarmType"] = 1; htAlarm["Speed"] = speed; htAlarm["AlarmTime"] = DateTime.Now; htAlarm["AlarmStatus"] = 0; htAlarm["CreateTime"] = DateTime.Now; if (alarmManager.AddOrEdit(htAlarm, null)) { DateTime timeSpan = DateTime.Now.AddMinutes(10); cache.Set(moveKey, 1, timeSpan - DateTime.Now); Logger.Warn("无单移动报警记录添加成功," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); } else { Logger.Warn("无单移动报警记录添加失败," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); } } } } string outAreaKey = "out_area_" + carId; string outAreaValue = cache.Get <string>(outAreaKey); if (string.IsNullOrEmpty(outAreaValue) && latitude > 0 && longitude > 0) { string serviceAreaKey = "Service_Area_" + vehicle_ht["CITYID"].ToString(); string coordinates = cache.Get <string>(serviceAreaKey); if (string.IsNullOrEmpty(coordinates)) { ServiceAreaManager areaManager = new ServiceAreaManager(); Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(vid); if (area_ht != null && area_ht.Keys.Count > 0) { coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); if (!string.IsNullOrEmpty(coordinates)) { DateTime timeSpan = DateTime.Now.AddDays(10); cache.Set(serviceAreaKey, coordinates, timeSpan - DateTime.Now); } } } List <LatLng> area_pts = new List <LatLng>(); if (!string.IsNullOrEmpty(coordinates)) { foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } LatLng vehicle_pt = new LatLng(latitude, longitude); //车辆GPS坐标转高德坐标 vehicle_pt = SiteHelper.GPSToGCJ02(longitude.ToString(), latitude.ToString()); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { Logger.Warn("越界报警," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); VehicleAlarmManager alarmManager = new VehicleAlarmManager(); htAlarm["ID"] = Guid.NewGuid().ToString(); htAlarm["VehicleID"] = vid; htAlarm["IMEI"] = carId; htAlarm["AlarmType"] = 4; htAlarm["Speed"] = speed; htAlarm["AlarmTime"] = DateTime.Now; htAlarm["AlarmStatus"] = 0; htAlarm["CreateTime"] = DateTime.Now; bool alarmResult = alarmManager.AddOrEdit(htAlarm, null); if (alarmResult) { //越界20分钟内有效 DateTime dt = DateTime.Now.AddMinutes(20); cache.Set(outAreaKey, carId, dt - DateTime.Now); Logger.Warn("越界报警记录添加成功," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); } else { Logger.Warn("越界报警记录添加失败," + vid + "," + carId + ",speed=" + speed + ",defend =" + defend + ",acc=" + acc); } } } } int end = DateTime.Now.Millisecond; Logger.Warn("小安盒子接口网关上报状态信息数据,耗时" + (end - start) + "ms," + vid + "," + carId + ",defend = " + defend + ",acc=" + acc + ",LockState=" + ht["LockState"]); resp.Code = result ? "0" : "1"; resp.Message = result ? "success" : "fail"; } else { resp.Code = "3"; } } } } if (cache != null) { cache.Dispose(); } return(resp); } catch (Exception e) { Logger.Error("盒子上报状态信息报错:" + e); string message = e.Message; if (cache != null) { cache.Dispose(); } resp.Code = "1"; resp.Message = "fail"; return(resp); } }
public string Execute(Hashtable params_ht) { Hashtable res = params_ht; if (res["UID"] == null || res["UseState"] == null || res["VehicleState"] == null || res["PageNum"] == null || res["PageNum"].ToString().Trim().Length <= 0 || res["CurrentPage"] == null || res["CurrentPage"].ToString().Trim().Length <= 0 || res["UID"].ToString().Trim().Length <= 0 || res["UseState"].ToString().Trim().Length <= 0 || res["VehicleState"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { try { uid = res["UID"].ToString().Trim(); useState = int.Parse(res["UseState"].ToString().Trim()); vehicleState = int.Parse(res["VehicleState"].ToString().Trim()); currentPage = int.Parse(res["CurrentPage"].ToString().Trim()); pageNum = int.Parse(res["PageNum"].ToString().Trim()); if (res["LowBattery"] != null) { lowBattery = int.Parse(res["LowBattery"].ToString().Trim()); } if (res["ChargeState"] != null) { chargeState = int.Parse(res["ChargeState"].ToString().Trim()); } if (res["ParkingID"] != null) { parkingID = res["ParkingID"].ToString().Trim(); } if (res["AbnormalState"] != null) { abnormalState = int.Parse(res["AbnormalState"].ToString().Trim()); } } catch { return(SiteHelper.GetJsonFromHashTable(null, "faild", "数据格式不正确")); } VehicleManager vm = new VehicleManager(); OrdersManager om = new OrdersManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable vehicles = areaManager.GetVehiclesByParkingID(uid, parkingID, useState, vehicleState, lowBattery, chargeState, abnormalState, currentPage, pageNum, out sumCount); if (vehicles == null || vehicles.Rows.Count <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "亲,没有数据了")); } else { vehicles.Columns.Add("OrderUserName"); vehicles.Columns.Add("OrderUserTel"); vehicles.Columns.Add("HeadPortrait"); vehicles.Columns.Add("OrderState"); vehicles.Columns.Add("OrderTime"); vehicles.Columns.Add("UserType"); vehicles.Columns.Add("AbnormalState"); vehicles.Columns.Add("AlarmType"); vehicles.Columns.Add("AlarmTime"); foreach (DataRow dr in vehicles.Rows) { LatLng latlng = new LatLng(double.Parse(dr["Latitude"].ToString()), double.Parse(dr["Longitude"].ToString())); latlng = SiteHelper.TransformFromWGSToGCJ(latlng); dr["Longitude"] = latlng.longitude; dr["Latitude"] = latlng.latitude; dr["ThumbImageUrl"] = SiteHelper.GetFileServer() + dr["ThumbImageUrl"].ToString(); decimal electricity = 0; decimal.TryParse(dr["Electricity"].ToString(), out electricity); int dianliang = Decimal.ToInt32(electricity); dr["Electricity"] = dianliang + "%"; dr["AbnormalState"] = 0; Hashtable abht = null;// vm.GetAbnormalVehicle(dr["ID"].ToString()); if (abht != null && abht.Keys.Count > 0) { dr["AbnormalState"] = 1; dr["AlarmType"] = SiteHelper.GetHashTableValueByKey(abht, "AlarmType"); dr["AlarmTime"] = SiteHelper.GetHashTableValueByKey(abht, "AlarmTime"); } Hashtable order_ht = om.GetLatestUserByVehicleID(dr["ID"].ToString()); if (order_ht != null && order_ht.Keys.Count > 0) { dr["OrderUserName"] = order_ht["REALNAME"]; dr["OrderUserTel"] = order_ht["BINDPHONE"]; //dr["HeadPortrait"] = SiteHelper.GetFileServer() + order_ht["HEADPORTRAIT"]; dr["HeadPortrait"] = ""; dr["OrderState"] = order_ht["ORDERSTATE"]; dr["UserType"] = order_ht["USERTYPE"]; dr["OrderTime"] = order_ht["CREATETIME"]; } else { dr["OrderUserName"] = ""; dr["OrderUserTel"] = ""; dr["HeadPortrait"] = ""; dr["OrderState"] = ""; dr["UserType"] = ""; dr["OrderTime"] = ""; } } return(SiteHelper.GetJsonFromDataTable2(vehicles, "success", "获取数据成功", "GetVehicleList", sumCount)); } } }
public ApiResp Execute(System.Collections.Hashtable params_ht) { ApiResp resp = new ApiResp(); resp.code = "-1"; string client_id = params_ht["client_id"].ToString(); long timestamp = long.Parse(params_ht["timestamp"].ToString()); string sign = params_ht["sign"].ToString(); string plate_no = null; if (params_ht["plate_no"] != null) { plate_no = params_ht["plate_no"].ToString(); if (plate_no != null && (plate_no.StartsWith("http://") || plate_no.StartsWith("https://"))) { //http://api.qingniaokeji.cn/download/app.aspx?no=xxxxxxxxxxxxx Uri uri = new Uri(plate_no); System.Collections.Specialized.NameValueCollection coll = System.Web.HttpUtility.ParseQueryString(uri.Query); plate_no = coll.Get("no"); } } List <GetNowCars_Item> data = new List <GetNowCars_Item>(); VehicleManager vm = new VehicleManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); if (string.IsNullOrEmpty(plate_no)) { DataTable dt = areaManager.GetVehiclesByCity(null, 1, 9999); if (dt != null) { foreach (DataRow dr in dt.Rows) { GetNowCars_Item item = new GetNowCars_Item(); item.id = dr["ID"].ToString(); item.plate_no = dr["LicenseNumber"].ToString(); item.lng = double.Parse(dr["Longitude"].ToString()); item.lat = double.Parse(dr["Latitude"].ToString()); if (dr["LastUpdateTime"].ToString().Trim().Length > 0) { item.datetime = (long)(DateTime.Parse(dr["LastUpdateTime"].ToString()) - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime()).TotalSeconds; } item.mileage = dr["ExpectRange"].ToString(); item.power = (int)double.Parse(dr["Electricity"].ToString()); if (item.power > 100) { item.power = 100; } if (item.power < 0) { item.power = 0; } item.minute_price = double.Parse(dr["MinutePrice"].ToString()); item.mile_price = double.Parse(dr["KmPrice"].ToString()); item.start_price = double.Parse(dr["MinPrice"].ToString()); item.other_price = "每日封顶价格:" + dr["MaxPrice"].ToString() + "元"; string use_state = dr["UseState"].ToString(); string vehicle_state = dr["VehicleState"].ToString(); double electricity = 0.00; double.TryParse(dr["Electricity"].ToString(), out electricity); DateTime last_update_time = DateTime.Now; if (dr["LastUpdateTime"].ToString().Trim().Length > 0) { DateTime.TryParse(dr["LastUpdateTime"].ToString(), out last_update_time); } item.is_rent = 0; if (vehicle_state == VehicleState.Use.GetHashCode().ToString() && use_state == VehicleUseState.Free.GetHashCode().ToString() && electricity > 20 && (DateTime.Now - last_update_time).TotalMinutes < 5) { item.is_rent = 1; } data.Add(item); } resp.code = "0"; resp.msg = "成功"; resp.data = data; } else { resp.code = "-1"; resp.msg = "未找到车辆"; } } else { Hashtable ht = vm.GetVehicleInfoByIDORNumber(plate_no); if (ht != null && ht.Keys.Count > 0) { GetNowCars_Item item = new GetNowCars_Item(); item.id = SiteHelper.GetHashTableValueByKey(ht, "ID"); item.plate_no = SiteHelper.GetHashTableValueByKey(ht, "LicenseNumber"); item.lng = double.Parse(SiteHelper.GetHashTableValueByKey(ht, "Longitude")); item.lat = double.Parse(SiteHelper.GetHashTableValueByKey(ht, "Latitude")); if (SiteHelper.GetHashTableValueByKey(ht, "LastUpdateTime").Length > 0) { item.datetime = (long)(DateTime.Parse(SiteHelper.GetHashTableValueByKey(ht, "LastUpdateTime")) - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime()).TotalSeconds; } item.mileage = SiteHelper.GetHashTableValueByKey(ht, "ExpectRange"); item.power = (int)double.Parse(SiteHelper.GetHashTableValueByKey(ht, "Electricity")); if (item.power > 100) { item.power = 100; } if (item.power < 0) { item.power = 0; } item.minute_price = double.Parse(SiteHelper.GetHashTableValueByKey(ht, "MinutePrice")); item.mile_price = double.Parse(SiteHelper.GetHashTableValueByKey(ht, "KmPrice")); item.start_price = double.Parse(SiteHelper.GetHashTableValueByKey(ht, "MinPrice")); item.other_price = "每日封顶价格:" + SiteHelper.GetHashTableValueByKey(ht, "MaxPrice") + "元"; string use_state = SiteHelper.GetHashTableValueByKey(ht, "UseState"); string vehicle_state = SiteHelper.GetHashTableValueByKey(ht, "VehicleState"); double electricity = 0.00; double.TryParse(SiteHelper.GetHashTableValueByKey(ht, "Electricity"), out electricity); DateTime last_update_time = DateTime.Now; if (SiteHelper.GetHashTableValueByKey(ht, "LastUpdateTime").Length > 0) { DateTime.TryParse(SiteHelper.GetHashTableValueByKey(ht, "LastUpdateTime"), out last_update_time); } item.is_rent = 0; if (vehicle_state == VehicleState.Use.GetHashCode().ToString() && use_state == VehicleUseState.Free.GetHashCode().ToString() && electricity > 20 && (DateTime.Now - last_update_time).Minutes < 5) { item.is_rent = 1; } data.Add(item); resp.code = "0"; resp.msg = "成功"; resp.data = data; } else { resp.code = "-1"; resp.msg = "未找到车辆"; } } return(resp); }
public string Execute(Hashtable params_ht) { Hashtable res = params_ht; if (res["UID"] == null || res["VehicleID"] == null || res["UID"].ToString().Trim().Length <= 0 || res["VehicleID"].ToString().Trim().Length <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "参数不完整")); } else { uid = res["UID"].ToString().Trim(); vehicleid = res["VehicleID"].ToString().Trim(); VehicleManager vm = new VehicleManager(); OrdersManager om = new OrdersManager(); UserInfoManager uim = new UserInfoManager(); SysSettingManager settingManager = new SysSettingManager(); Hashtable vehicle = vm.GetVehicleInfoByID(vehicleid); if (vehicle == null || vehicle.Keys.Count == 0) { //根据车牌号码查询车辆信息 vehicle = vm.GetVehicleInfoByLicenseNumber(vehicleid); } //判断车辆是否存在 if (vehicle == null || vehicle.Keys.Count == 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "车辆预约失败,未找到车辆相关信息")); } vehicleid = SiteHelper.GetHashTableValueByKey(vehicle, "ID"); //判断预约车辆是否离线 DateTime lastUpdateTime; if (string.IsNullOrEmpty(SiteHelper.GetHashTableValueByKey(vehicle, "LastUpdateTime"))) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "当前车辆已离线无法约车")); } else { lastUpdateTime = DateTime.Parse(SiteHelper.GetHashTableValueByKey(vehicle, "LastUpdateTime")); if (SiteHelper.ExecDateDiff(lastUpdateTime, DateTime.Now) > 10) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "当前车辆已离线无法约车")); } } //判断预约车辆电量值 double electricity = 0.00; double.TryParse(SiteHelper.GetHashTableValueByKey(vehicle, "Electricity"), out electricity); if (electricity < 30) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "当前车辆电量过低无法约车")); } #region 判断车辆是否在运营区域内 ServiceAreaManager areaManager = new ServiceAreaManager(); Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(vehicleid); if (area_ht != null && area_ht.Keys.Count > 0) { List <LatLng> area_pts = new List <LatLng>(); string coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } string longitude = SiteHelper.GetHashTableValueByKey(vehicle, "longitude"); string latitude = SiteHelper.GetHashTableValueByKey(vehicle, "latitude"); LatLng vehicle_pt = new LatLng(double.Parse(latitude), double.Parse(longitude)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(longitude, latitude); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "车辆预约失败,车辆处于运营区域外")); } } #endregion #region 判断车辆是否在停车点内 /*string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); * Hashtable parking_ht = areaManager.GetNearestParking(SiteHelper.GetHashTableValueByKey(vehicle, "longitude"), SiteHelper.GetHashTableValueByKey(vehicle, "latitude"), vehicleid); * if (returnVehicleMode == "1" && parking_ht != null && parking_ht.Keys.Count > 0) * { * List<LatLng> parking_pts = new List<LatLng>(); * string coordinates = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates"); * foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) * { * string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); * LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); * parking_pts.Add(pt); * } * string longitude = SiteHelper.GetHashTableValueByKey(vehicle, "longitude"); * string latitude = SiteHelper.GetHashTableValueByKey(vehicle, "latitude"); * LatLng vehicle_pt = new LatLng(double.Parse(latitude),double.Parse(longitude)); * //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); * vehicle_pt = SiteHelper.GPSToGCJ02(longitude,latitude); * vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6),Math.Round(vehicle_pt.longitude, 6)); * bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); * if (!isInPoly) * { * return SiteHelper.GetJsonFromHashTable(null, "faild", "车辆预约失败,车辆处于停车网点外"); * } * }*/ #endregion //判断车辆是否可用 if (SiteHelper.GetHashTableValueByKey(vehicle, "UseState").Trim() == VehicleUseState.Free.GetHashCode().ToString() && SiteHelper.GetHashTableValueByKey(vehicle, "VehicleState").Trim() == VehicleState.Use.GetHashCode().ToString()) { //判断用户余额是否充足 Hashtable user = uim.GetUserInfoByUserID(uid); if (user == null || user.Keys.Count <= 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您不是有效会员")); } else { if ("2".CompareTo(user["REALNAMECERTIFICATION"].ToString()) == 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "当前认证正在审核中,请耐心等待")); } //验证用户是否经过身份认证 if ("4".CompareTo(user["REALNAMECERTIFICATION"].ToString()) != 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您当前未完成实名认证,请完成实名认证后重试")); } //验证用户状态是否有效 if ("0".CompareTo(user["USERSTATE"].ToString()) == 0) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您当前已被禁用无法预约车辆,如有问题请与客服联系")); } //判断用户是否缴纳押金 decimal deposit = 0.00m; decimal.TryParse(user["DEPOSIT"].ToString(), out deposit); if (user["USERTYPE"].ToString() != UserType.OffDepositUser.GetHashCode().ToString() && deposit <= 0.00m) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您当前未缴纳用车押金,请完成押金缴纳后重试")); } } //判断用户是否存在未支付订单 if (om.IsExistUnPayOrderByUser(uid)) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您当前有未支付订单,请完成支付后重试")); } //判断会员是否有条件预约 bool isExist = om.IsExistVehicleOrderByUser(uid); if (isExist) { return(SiteHelper.GetJsonFromHashTable(null, "faild", "您已经预约过车辆了")); } else { //如果是扫码用车 if (res["isopen"] != null && res["isopen"].ToString() == "1") { string gpsnum = SiteHelper.GetHashTableValueByKey(vehicle, "VehicleGPSNum"); //开车 bool isOpen = vm.OpenVehicle(vehicleid); if (!isOpen)//开车失败 { return(SiteHelper.GetJsonFromHashTable(null, "faild", "非常抱歉,由于车辆启动失败本次扫码用车失败,请选择其他车辆或稍后重试")); } else//开车成功 { string orderID = string.Empty; string orderNum = string.Empty; //提交订单 bool isSuccess = OrderVehicle(res, vehicle, user, out orderID, out orderNum); if (!isSuccess) { isOpen = vm.CloseVehicle(vehicleid); return(SiteHelper.GetJsonFromHashTable(null, "faild", "车辆预约失败,请联系管理员")); } else { return(SiteHelper.GetJsonFromHashTable(null, "success", "车辆预约成功并已开启,欢迎驾驶电斑马")); } } } else //不是扫码用车 { string orderID = string.Empty; string orderNum = string.Empty; //提交订单 bool isSuccess = OrderVehicle(res, vehicle, user, out orderID, out orderNum); if (isSuccess) { return(SiteHelper.GetJsonFromHashTable(null, "success", "车辆预约成功")); } else { return(SiteHelper.GetJsonFromHashTable(null, "faild", "车辆预约失败,请联系管理员")); } } } } else { return(SiteHelper.GetJsonFromHashTable(null, "faild", "预约失败,车辆不允许预约")); } } }
public ApiResp Execute(System.Collections.Hashtable params_ht) { ApiResp resp = new ApiResp(); resp.code = "-1"; string client_id = params_ht["client_id"].ToString(); long timestamp = long.Parse(params_ht["timestamp"].ToString()); string sign = params_ht["sign"].ToString(); string plate_no = params_ht["plate_no"].ToString(); string order_no = params_ht["order_no"].ToString(); GetFeeData data = new GetFeeData(); BaoJiaManager mgr = new BaoJiaManager(); Hashtable ht = mgr.GetOrderInfo(order_no); if (ht == null) { resp.msg = "未找到相关订单"; resp.code = "-1"; } else { decimal kmprice = 0.80m, minuteprice = 0.40m, mileage = 0, TotalMoney = 0.00m, SettlementMoney = 0.00m, outServiceAreaFee = 0.00m; int minutes = 0; string returnLocType = "", lng = "0", lat = "0"; ServiceAreaManager areaManager = new ServiceAreaManager(); SysSettingManager settingManager = new SysSettingManager(); VehiclePriceManager priceManager = new VehiclePriceManager(); Hashtable billing_ht = priceManager.GetOrderSettlement(SiteHelper.GetHashTableValueByKey(ht, "id")); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "KmPrice"), out kmprice); int.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "Minutes"), out minutes); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "TotalMoney"), out TotalMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(ht, "SettlementMoney"), out SettlementMoney); returnLocType = SiteHelper.GetHashTableValueByKey(ht, "ReturnLocType"); decimal.TryParse(SiteHelper.GetHashTableValueByKey(ht, "OutServiceAreaFee"), out outServiceAreaFee); string orderState = SiteHelper.GetHashTableValueByKey(ht, "OrderState"); VehicleManager vm = new VehicleManager(); Hashtable vehicle_ht = vm.GetVehicleInfoByIDORNumber(SiteHelper.GetHashTableValueByKey(ht, "VehicleID")); lat = vehicle_ht["LATITUDE"].ToString(); lng = vehicle_ht["LONGITUDE"].ToString(); if (orderState == "1") { SettlementMoney = TotalMoney; #region 判断还车点是否在运营区域内,运营区域外加收费用 Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(SiteHelper.GetHashTableValueByKey(ht, "VehicleID")); if (area_ht != null && area_ht.Keys.Count > 0) { returnLocType = "03"; List <LatLng> area_pts = new List <LatLng>(); string coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } LatLng vehicle_pt = new LatLng(double.Parse(lat), double.Parse(lng)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(lng, lat); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { returnLocType = "04"; string serviceFee = settingManager.GetValueByKey("OutServiceAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion #region 判断还车点是否在停车点内,否则加收费用 string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); if (outServiceAreaFee == 0 && returnVehicleMode == "1") { returnLocType = "01"; LatLng vehicle_pt = new LatLng(double.Parse(lat), double.Parse(lng)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(lng, lat); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); Hashtable parking_ht = areaManager.GetNearestParking(vehicle_pt.longitude.ToString(), vehicle_pt.latitude.ToString(), SiteHelper.GetHashTableValueByKey(ht, "VehicleID")); List <LatLng> parking_pts = new List <LatLng>(); if (parking_ht != null && parking_ht.Keys.Count > 0) { string coordinates = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); parking_pts.Add(pt); } } bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); if (!isInPoly) { returnLocType = "02"; string serviceFee = settingManager.GetValueByKey("OutParkingAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion } SettlementMoney = Math.Round(SettlementMoney, 2); data.order_no = order_no; data.all_mile = double.Parse(SiteHelper.GetHashTableValueByKey(ht, "Mileage")); data.location_address_type = "3"; if (returnLocType == "01") { data.location_address_type = "3"; } if (returnLocType == "02" || returnLocType == "03") { data.location_address_type = "1"; } if (returnLocType == "04") { data.location_address_type = "2"; } data.location_address_msg = ""; data.order_status = 10000; if (orderState == "1") { data.order_status = 10000; } else if (orderState == "0") { data.order_status = 10301; } else if (orderState == "2" || orderState == "5" || orderState == "3") { data.order_status = 80200; } data.total_fee = (double)(SettlementMoney + outServiceAreaFee); data.timestamp = (long)(DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime()).TotalSeconds; data.lng = double.Parse(lng); data.lat = double.Parse(lat); data.details = new List <GetFeeData_Fee>(); GetFeeData_Fee item1 = new GetFeeData_Fee(); item1.name = "用车费用"; item1.amount = (double)SettlementMoney; data.details.Add(item1); if (returnLocType == "04") { GetFeeData_Fee item2 = new GetFeeData_Fee(); item2.name = "行驶区域外还车调度费"; item2.amount = (double)(outServiceAreaFee); data.details.Add(item2); } if (returnLocType == "02") { GetFeeData_Fee item3 = new GetFeeData_Fee(); item3.name = "停车点外还车调度费"; item3.amount = (double)(outServiceAreaFee); data.details.Add(item3); } data.isLock = "1"; int cnt = -1; DataTable parking_dt = areaManager.GetNearParking(9999, lng.ToString(), lat.ToString(), 1, 9999, ref cnt); if (parking_dt != null && parking_dt.Rows.Count > 0) { List <GetFeeData_StationItem> station_list = new List <GetFeeData_StationItem>(); foreach (DataRow dr in parking_dt.Rows) { GetFeeData_StationItem station = new GetFeeData_StationItem(); station.parkType = "2"; station.coordinatePoints = dr["Coordinates"].ToString().Replace(";", "|"); station.coordinate_center = dr["Longitude"].ToString() + "," + dr["Latitude"].ToString(); station_list.Add(station); } data.stationList = station_list; } resp.data = data; resp.code = "0"; } return(resp); }
public ApiResp Execute(System.Collections.Hashtable params_ht) { ApiResp resp = new ApiResp(); resp.code = "-1"; string client_id = params_ht["client_id"].ToString(); long timestamp = long.Parse(params_ht["timestamp"].ToString()); string sign = params_ht["sign"].ToString(); string order_no = params_ht["order_no"].ToString(); BaoJiaManager mgr = new BaoJiaManager(); Hashtable order_ht = mgr.GetOrderInfo(order_no); if (order_ht != null && order_ht.Keys.Count > 0) { ServiceAreaManager areaManager = new ServiceAreaManager(); string vehicleid = SiteHelper.GetHashTableValueByKey(order_ht, "VehicleID"); string orderid = SiteHelper.GetHashTableValueByKey(order_ht, "ID"); GetOrderTracks_Data data = new GetOrderTracks_Data(); string returnLocType = SiteHelper.GetHashTableValueByKey(order_ht, "ReturnLocType"); if (returnLocType == "01") { data.return_location_address_type = "3"; data.return_location_address_msg = "网点还车"; string toParking = SiteHelper.GetHashTableValueByKey(order_ht, "ToParking"); if (!string.IsNullOrEmpty(toParking)) { Hashtable parking_ht = areaManager.GetInfoByID(toParking); if (parking_ht != null && parking_ht.Keys.Count > 0) { data.return_station_points = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates").Replace(";", "|"); data.return_station_center = SiteHelper.GetHashTableValueByKey(parking_ht, "Longitude") + "," + SiteHelper.GetHashTableValueByKey(parking_ht, "Latitude"); } } } else if (returnLocType == "02" || returnLocType == "03") { data.return_location_address_type = "1"; data.return_location_address_msg = "行驶区域内网点外还车"; } else if (returnLocType == "04") { data.return_location_address_type = "2"; data.return_location_address_msg = "行驶区域外还车"; Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(vehicleid); if (area_ht != null && area_ht.Keys.Count > 0) { data.return_xianzhi_points = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates").Replace(";", "|"); } } VehicleManager vm = new VehicleManager(); DataTable dt = vm.GetVehicleTrace(vehicleid, orderid, null, null); if (dt != null) { GetOrderTracks_Data Data = new GetOrderTracks_Data(); data.return_location_address_msg = ""; data.line_points = ""; List <LatLng> pts = new List <LatLng>(); foreach (DataRow dr in dt.Rows) { double lng = double.Parse(dr["AMAP_longitude"].ToString()); double lat = double.Parse(dr["AMAP_latitude"].ToString()); pts.Add(new LatLng(lat, lng)); if (data.line_points.Length > 0 && !data.line_points.EndsWith("|")) { data.line_points += "|"; } data.line_points += lng + "," + lat; } if (pts.Count > 0) { data.start_lng = pts[0].longitude; data.star_lat = pts[0].latitude; data.end_lng = pts[pts.Count - 1].longitude; data.end_lat = pts[pts.Count - 1].latitude; } else { LatLng latlng = new LatLng(double.Parse(SiteHelper.GetHashTableValueByKey(order_ht, "EndLatitude")), double.Parse(SiteHelper.GetHashTableValueByKey(order_ht, "EndLongitude"))); latlng = SiteHelper.TransformFromWGSToGCJ(latlng); data.start_lng = latlng.longitude; data.star_lat = latlng.latitude; data.end_lng = data.start_lng; data.end_lat = data.star_lat; } resp.code = "0"; resp.msg = "成功"; resp.data = data; } else { resp.code = "-1"; resp.msg = "未找到停车网点"; } } else { resp.code = "-1"; resp.msg = "未找到相关订单"; } return(resp); }
public void ProcessRequest(HttpContext context) { context.Response.CacheControl = "no-cache"; context.Response.AddHeader("Pragma", "no-cache"); context.Response.ContentType = "text/plain"; string Action = context.Request["action"]; switch (Action) { case "GetDistrict": ServiceAreaManager areaManager = new ServiceAreaManager(); DataTable dtArea = areaManager.GetAreaList(int.Parse(context.Request["levelType"]), int.Parse(context.Request["parentId"])); context.Response.Write(JsonHelper.DataTableToJson("success", "获取数据成功", dtArea, "ServiceArea")); context.Response.End(); break; case "GetServiceAreaByID": ServiceAreaManager manager = new ServiceAreaManager(); DataTable dt = manager.GetServiceAreaByID(context.Request["key"]); context.Response.Write(JsonHelper.DataTableToJson("success", "获取数据成功", dt, "ServiceArea")); context.Response.End(); break; case "UpdateServiceAreaCoordinates": ServiceAreaManager sam = new ServiceAreaManager(); string key = context.Request["key"]; Hashtable ht = sam.GetInfoByID(key); ht["COORDINATES"] = context.Request["Coordinates"]; ht["LONGITUDE"] = context.Request["Longitude"]; ht["LATITUDE"] = context.Request["Latitude"]; string areaType = ht["AREATYPE"].ToString(); string status = ht["STATUS"].ToString(); string deleteMark = ht["DELETEMARK"].ToString(); //AreaType 区域类型 1服务范围 2停车网点 //Status 启动状态:0禁用,1启用 //DeleteMark 0 if ("1".Equals(areaType) && "1".Equals(status) && "True".Equals(deleteMark)) { ICache cache = null; try { cache = CacheFactory.GetCache(); string cacheKey = "Service_Area_" + ht["CITYID"].ToString(); DateTime timeSpan = DateTime.Now.AddDays(10); cache.Set(cacheKey, context.Request["Coordinates"], timeSpan - DateTime.Now); cache.Dispose(); /*List<LatLng> area_pts = new List<LatLng>(); * string coordinates = cache.Get<string>(cacheKey); * if(coordinates!=null&& coordinates.Length>0) * foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) * { * string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); * LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); * area_pts.Add(pt); * }*/ } catch (Exception e) { if (cache != null) { cache.Dispose(); } Logger.Error("更新区域:" + ht["THISNAME"].ToString() + ",报错:" + e); } if (cache != null) { cache.Dispose(); } } if (sam.AddOrEditInfo(ht, key)) { context.Response.Write(JsonHelper.DataTableToJson("success", "更新成功", null, "UpdateServiceAreaCoordinates")); } else { context.Response.Write(JsonHelper.DataTableToJson("faild", "更新失败", null, "UpdateServiceAreaCoordinates")); } context.Response.End(); break; case "GetInviteCouponInfo": SysSettingManager settingManager = new SysSettingManager(); int couponNum = 0; int.TryParse(settingManager.GetValueByKey("InviteCouponNum"), out couponNum); decimal couponMoney = 0.00m; decimal.TryParse(settingManager.GetValueByKey("InviteCouponMoney"), out couponMoney); double CouponPeriod = 0; double.TryParse(settingManager.GetValueByKey("CouponPeriod"), out CouponPeriod); Hashtable result_ht = new Hashtable(); result_ht["CouponNum"] = couponNum; result_ht["CouponMoney"] = couponMoney; result_ht["CouponPeriod"] = DateTime.Now.Date.AddDays(CouponPeriod).ToString("yyyy-MM-dd"); //响应数据到客户端 context.Response.Write(SiteHelper.GetJsonFromHashTable2(result_ht, "success", "获取数据成功", "GetInviteCouponInfo")); break; case "SendVerificationCode": string mobie = context.Request["Mobile"].ToString().Trim(); string code = ""; if (context.Request["Code"] != null) { code = context.Request["Code"].ToString().Trim(); } else { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "参数错误", "SendVerificationCode")); context.Response.End(); break; } string session_code = context.Session["dt_session_code"].ToString(); if (code.ToLower() != session_code.ToLower()) { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "图形验证码错误", "SendVerificationCode")); context.Response.End(); break; } SmsInfoManager sim = new SmsInfoManager(); UserInfoManager uim = new UserInfoManager(); DataTable user = uim.GetUserInfoByBindPhone(mobie); if (user != null && user.Rows.Count > 0) { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "手机号已注册", "SendVerificationCode")); context.Response.End(); break; } bool sendResult = sim.SendVerificationCode(mobie); if (sendResult) { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "success", "发送验证码成功", "SendVerificationCode")); context.Response.End(); break; } else { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "发送验证码失败", "SendVerificationCode")); context.Response.End(); break; } case "NewUserRegister": sim = new SmsInfoManager(); UserLoginLogManager ullm = new UserLoginLogManager(); uim = new UserInfoManager(); settingManager = new SysSettingManager(); string mobile = context.Request["Mobile"].ToString().Trim(); string verificationCode = context.Request["VerificationCode"].ToString().Trim(); string invite_userid = context.Request["InviteUserID"].ToString().Trim(); string vcode = sim.GetVerCodeByMobile(mobile); if (verificationCode != vcode) { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "手机验证码错误", "NewUserRegister")); context.Response.End(); return; } user = uim.GetUserInfoByBindPhone(mobile); if (user != null && user.Rows.Count > 0) { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "用户已注册", "NewUserRegister")); context.Response.End(); return; } else { Hashtable newuser = new Hashtable(); newuser["BindPhone"] = mobile; newuser["RealNameCertification"] = (int)UserRealNameCertification.Unauthorized; newuser["UserState"] = (int)UserState.Enable; newuser["Balance"] = 0; newuser["RaiseBalance"] = 0; newuser["IsRaiseUser"] = (int)UserIsRaise.NO; newuser["InviteCode"] = mobile; newuser["InviteUserID"] = invite_userid; int num = uim.AddUserInfo(newuser); if (num > -1) { user = uim.GetUserInfoByBindPhone(mobile); //新注册用户赠送优惠券 couponNum = 0; int.TryParse(settingManager.GetValueByKey("RegCouponNum"), out couponNum); couponMoney = 0.00m; decimal.TryParse(settingManager.GetValueByKey("RegCouponMoney"), out couponMoney); UserCouponManager couponManager = new UserCouponManager(); if (couponNum > 0 && couponMoney > 0) { couponManager.NewUserGiveCoupons(user.Rows[0]["ID"].ToString()); } context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "success", "新用户注册成功", "NewUserRegister")); context.Response.End(); return; } else { context.Response.Write(SiteHelper.GetJsonFromHashTable2(null, "faild", "手机号错误", "NewUserRegister")); context.Response.End(); return; } } break; default: break; } }
/// <summary> /// 车辆下单 /// </summary> /// <param name="out_order_no"></param> /// <param name="plate_no"></param> /// <param name="username"></param> /// <param name="mobile"></param> /// <param name="cardno"></param> /// <param name="errmsg"></param> /// <returns></returns> private bool CreateOrder(string out_order_no, string plate_no, string username, string mobile, string cardno, out string errmsg) { VehicleManager vm = new VehicleManager(); BaoJiaManager mgr = new BaoJiaManager(); SysSettingManager settingManager = new SysSettingManager(); Hashtable vehicle = vm.GetVehicleInfoByID(plate_no); if (vehicle == null || vehicle.Keys.Count == 0) { //根据车牌号码查询车辆信息 vehicle = vm.GetVehicleInfoByLicenseNumber(plate_no); } //判断车辆是否存在 if (vehicle == null || vehicle.Keys.Count == 0) { errmsg = "车辆预约失败,未找到车辆相关信息"; return(false); } string vehicleid = SiteHelper.GetHashTableValueByKey(vehicle, "ID"); //判断预约车辆是否离线 DateTime lastUpdateTime; if (string.IsNullOrEmpty(SiteHelper.GetHashTableValueByKey(vehicle, "LastUpdateTime"))) { errmsg = "当前车辆已离线无法约车"; return(false); } else { lastUpdateTime = DateTime.Parse(SiteHelper.GetHashTableValueByKey(vehicle, "LastUpdateTime")); if (SiteHelper.ExecDateDiff(lastUpdateTime, DateTime.Now) > 10) { errmsg = "当前车辆已离线无法约车"; return(false); } } //判断预约车辆电量值 double electricity = 0.00; double.TryParse(SiteHelper.GetHashTableValueByKey(vehicle, "Electricity"), out electricity); if (electricity < 20) { errmsg = "当前车辆电量过低无法约车"; return(false); } #region 判断车辆是否在运营区域内 ServiceAreaManager areaManager = new ServiceAreaManager(); Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(vehicleid); if (area_ht != null && area_ht.Keys.Count > 0) { List <LatLng> area_pts = new List <LatLng>(); string coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } string longitude = SiteHelper.GetHashTableValueByKey(vehicle, "longitude"); string latitude = SiteHelper.GetHashTableValueByKey(vehicle, "latitude"); LatLng vehicle_pt = new LatLng(double.Parse(latitude), double.Parse(longitude)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(longitude, latitude); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { errmsg = "车辆预约失败,车辆处于运营区域外"; return(false); } } #endregion #region 判断车辆是否在停车点内 string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); Hashtable parking_ht = areaManager.GetNearestParking(SiteHelper.GetHashTableValueByKey(vehicle, "longitude"), SiteHelper.GetHashTableValueByKey(vehicle, "latitude"), vehicleid); if (returnVehicleMode == "1" && parking_ht != null && parking_ht.Keys.Count > 0) { List <LatLng> parking_pts = new List <LatLng>(); string coordinates = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); parking_pts.Add(pt); } string longitude = SiteHelper.GetHashTableValueByKey(vehicle, "longitude"); string latitude = SiteHelper.GetHashTableValueByKey(vehicle, "latitude"); LatLng vehicle_pt = new LatLng(double.Parse(latitude), double.Parse(longitude)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(longitude, latitude); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); if (!isInPoly) { errmsg = "车辆预约失败,车辆处于停车网点外"; return(false); } } #endregion //判断车辆是否可用 if (SiteHelper.GetHashTableValueByKey(vehicle, "UseState").Trim() == VehicleUseState.Free.GetHashCode().ToString() && SiteHelper.GetHashTableValueByKey(vehicle, "VehicleState").Trim() == VehicleState.Use.GetHashCode().ToString()) { //判断用户是否存在未支付订单 if (mgr.IsExistUnPayOrderByUser(mobile)) { errmsg = "您当前有未支付订单,请完成支付后重试"; return(false); } //判断会员是否有条件预约 bool isExist = mgr.IsExistVehicleOrderByUser(mobile); if (isExist) { errmsg = "您已经预约过车辆了"; return(false); } else { string orderID = string.Empty; string orderNum = string.Empty; //提交订单 bool isSuccess = OrderVehicle(out_order_no, username, mobile, cardno, vehicleid, out orderID, out orderNum); if (isSuccess) { //vm.OpenVehicle(vehicleid); errmsg = ""; return(true); } else { errmsg = "车辆预约失败,请联系管理员"; return(false); } } } else { errmsg = "预约失败,车辆不允许预约"; return(false); } }
/// <summary> /// 还车 /// </summary> /// <param name="order_no"></param> /// <param name="errmsg"></param> /// <returns></returns> private bool ReturnVehicle(string order_no, out string errmsg) { BaoJiaManager mgr = new BaoJiaManager(); VehicleManager vm = new VehicleManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); SysSettingManager settingManager = new SysSettingManager(); Hashtable order = mgr.GetOrderInfo(order_no); //判断是否有车 if (order == null) { errmsg = "未找到相关订单"; return(false); } else { string vid = SiteHelper.GetHashTableValueByKey(order, "VehicleID"); Hashtable vehicle_ht = vm.GetVehicleInfoByID(vid); string longitude = SiteHelper.GetHashTableValueByKey(vehicle_ht, "Longitude"); string latitude = SiteHelper.GetHashTableValueByKey(vehicle_ht, "Latitude"); //处理订单 string order_state = SiteHelper.GetHashTableValueByKey(order, "OrderState"); if (order_state != "1") { errmsg = "订单当前所在状态无法还车"; return(false); } else { int renttime = 0; int.TryParse(SiteHelper.GetHashTableValueByKey(order, "RentDuration"), out renttime); decimal hours = 0.00m; decimal kmprice = 0.80m; decimal minuteprice = 0.40m; decimal mileage = 0; int minutes = 0; decimal userprivilegeratio = 1; decimal raisecommisssionratio = 0.10m; decimal TotalMoney = 0.00m; decimal SettlementMoney = 0.00m; decimal occupyMoney = 0.0m; decimal payMoney = 0.00m; decimal RaiseCommissionMoney = 0.00m; decimal outServiceAreaFee = 0.00m; DateTime createtime = DateTime.Now; DateTime startTime = DateTime.Now; String returnParkingID = null, returnLocType = null; decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "KMPrice"), out kmprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "Mileage"), out mileage); //decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "Minutes"), out minutes); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "UserPrivilegeRatio"), out userprivilegeratio); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "RaiseCommissionRatio"), out raisecommisssionratio); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "TotalMoney"), out TotalMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "SettlementMoney"), out SettlementMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "OccupyMoney"), out occupyMoney); decimal.TryParse(SiteHelper.GetHashTableValueByKey(order, "RaiseCommissionMoney"), out RaiseCommissionMoney); DateTime.TryParse(SiteHelper.GetHashTableValueByKey(order, "CreateTime"), out createtime); DateTime.TryParse(SiteHelper.GetHashTableValueByKey(order, "StartTime"), out startTime); int startminutes = 0; int.TryParse(SiteHelper.GetHashTableValueByKey(order, "StartMinutes"), out startminutes); string strStartTime = SiteHelper.GetHashTableValueByKey(order, "StartTime"); string gpsnum = SiteHelper.GetHashTableValueByKey(order, "VehicleGPSNum"); //锁车 bool isSuccess = vm.CloseVehicle(SiteHelper.GetHashTableValueByKey(order, "VehicleID")); if (!isSuccess) { errmsg = "锁车失败,还车操作失败"; return(false); } VehiclePriceManager priceManager = new VehiclePriceManager(); Hashtable billing_ht = priceManager.GetOrderSettlement(SiteHelper.GetHashTableValueByKey(order, "ID")); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "MinutePrice"), out minuteprice); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "KmPrice"), out kmprice); int.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "Minutes"), out minutes); decimal.TryParse(SiteHelper.GetHashTableValueByKey(billing_ht, "TotalMoney"), out TotalMoney); SettlementMoney = TotalMoney; #region 判断还车点是否在运营区域内,运营区域外加收费用 Hashtable area_ht = areaManager.GetServiceAreaByVehicleID(SiteHelper.GetHashTableValueByKey(order, "VehicleID")); if (area_ht != null && area_ht.Keys.Count > 0) { returnLocType = "03"; List <LatLng> area_pts = new List <LatLng>(); string coordinates = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); area_pts.Add(pt); } LatLng vehicle_pt = new LatLng(double.Parse(latitude), double.Parse(longitude)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(longitude, latitude); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, area_pts); if (!isInPoly) { returnLocType = "04"; string serviceFee = settingManager.GetValueByKey("OutServiceAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion #region 判断还车点是否在停车点内,否则加收费用 string returnVehicleMode = settingManager.GetValueByKey("ReturnVehicleMode"); if (outServiceAreaFee == 0 && returnVehicleMode == "1") { returnLocType = "01"; LatLng vehicle_pt = new LatLng(double.Parse(latitude), double.Parse(longitude)); //vehicle_pt = SiteHelper.TransformFromWGSToGCJ(vehicle_pt); vehicle_pt = SiteHelper.GPSToGCJ02(longitude, latitude); vehicle_pt = new LatLng(Math.Round(vehicle_pt.latitude, 6), Math.Round(vehicle_pt.longitude, 6)); Hashtable parking_ht = areaManager.GetNearestParking(vehicle_pt.longitude.ToString(), vehicle_pt.latitude.ToString(), SiteHelper.GetHashTableValueByKey(order, "VehicleID")); List <LatLng> parking_pts = new List <LatLng>(); if (parking_ht != null && parking_ht.Keys.Count > 0) { returnParkingID = SiteHelper.GetHashTableValueByKey(parking_ht, "ID"); string coordinates = SiteHelper.GetHashTableValueByKey(parking_ht, "Coordinates"); foreach (string str in coordinates.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)) { string[] pt_arr = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); LatLng pt = new LatLng(double.Parse(pt_arr[1]), double.Parse(pt_arr[0])); parking_pts.Add(pt); } } bool isInPoly = SiteHelper.IsPtInPoly(vehicle_pt, parking_pts); if (!isInPoly) { returnLocType = "02"; returnParkingID = null; string serviceFee = settingManager.GetValueByKey("OutParkingAreaFee"); if (serviceFee.StartsWith("+")) { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney + outServiceAreaFee; } else { serviceFee = serviceFee.Substring(1, serviceFee.Length - 1); decimal.TryParse(serviceFee, out outServiceAreaFee); TotalMoney = TotalMoney * outServiceAreaFee; } outServiceAreaFee = TotalMoney - SettlementMoney; } } #endregion payMoney = TotalMoney; Hashtable userParm = new Hashtable(); userParm["VID"] = SiteHelper.GetHashTableValueByKey(order, "VehicleID"); userParm["OrderNum"] = SiteHelper.GetHashTableValueByKey(order, "OrderNum"); userParm["TotalMoney"] = TotalMoney; userParm["SettlementMoney"] = SettlementMoney; userParm["PayMoney"] = payMoney; userParm["PayTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["EndTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["FinishedTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["OID"] = SiteHelper.GetHashTableValueByKey(order, "id"); userParm["ChangesAmount"] = -Math.Abs(TotalMoney); userParm["UserFinancialID"] = CommonHelper.GetGuid; userParm["UserID"] = null; userParm["ChangesTime"] = SiteHelper.GetWebServerCurrentTime().ToString(); userParm["ChangesType"] = UserFinancialChangesType.Consumption.GetHashCode().ToString(); userParm["OrderID"] = SiteHelper.GetHashTableValueByKey(order, "id"); userParm["RentDuration"] = hours; userParm["Remark"] = "用户还车"; userParm["Minutes"] = minutes; userParm["DiffMoney"] = TotalMoney; userParm["Operator"] = ""; userParm["OperatorType"] = UserFinancialOperatorType.Admin.GetHashCode().ToString(); userParm["State"] = UserFinancialState.Effect.GetHashCode().ToString(); userParm["MessageID"] = CommonHelper.GetGuid; userParm["OutServiceAreaFee"] = (int)outServiceAreaFee; userParm["ReturnParkingID"] = returnParkingID; userParm["ReturnLocType"] = returnLocType; bool isSettlementSuccess = mgr.ReturnVehicle(userParm); if (isSettlementSuccess) { OrdersManager om = new OrdersManager(); om.UpdateOrderGPS(SiteHelper.GetHashTableValueByKey(order, "id"), false); errmsg = "还车成功"; return(true); } else { errmsg = "锁车操作失败"; return(false); } } } }
public ApiResp Execute(System.Collections.Hashtable params_ht) { ApiResp resp = new ApiResp(); resp.code = "-1"; string client_id = params_ht["client_id"].ToString(); long timestamp = long.Parse(params_ht["timestamp"].ToString()); string sign = params_ht["sign"].ToString(); List <GetCars_Item> data = new List <GetCars_Item>(); SysSettingManager settingManager = new SysSettingManager(); DictManager dictManager = new DictManager(); ServiceAreaManager areaManager = new ServiceAreaManager(); string depositMoney = settingManager.GetValueByKey("GoldDepositAmount"); DataTable city_dt = dictManager.GetDictList("03"); if (city_dt != null && city_dt.Rows.Count > 0) { foreach (DataRow city_dr in city_dt.Rows) { GetCars_Item item = new GetCars_Item(); Hashtable area_ht = areaManager.GetServiceAreaByCityCode(city_dr["remark"].ToString()); if (area_ht != null && area_ht.Keys.Count > 0) { item.coordinatePoints = SiteHelper.GetHashTableValueByKey(area_ht, "Coordinates").Replace(";", "|"); item.coordinate_center = SiteHelper.GetHashTableValueByKey(area_ht, "Longitude") + "," + SiteHelper.GetHashTableValueByKey(area_ht, "Latitude"); } item.city_name = city_dr["name"].ToString(); DataTable car_dt = areaManager.GetVehiclesByCity(item.city_name, 1, 9999); if (car_dt != null && car_dt.Rows.Count > 0) { List <GetCars_Car> car_list = new List <GetCars_Car>(); foreach (DataRow dr in car_dt.Rows) { GetCars_Car car = new GetCars_Car(); car.id = dr["ID"].ToString(); car.plate_no = dr["LicenseNumber"].ToString(); car.carname = dr["Brand"].ToString(); car.start_price = double.Parse(dr["MinPrice"].ToString()); car.minute_price = double.Parse(dr["MinutePrice"].ToString()); car.mile_price = double.Parse(dr["KmPrice"].ToString()); car.deposit_money = double.Parse(depositMoney); car_list.Add(car); } item.cars = car_list; } if (item.cars != null && item.cars.Count > 0) { data.Add(item); } } } if (data.Count > 0) { resp.code = "0"; resp.msg = "成功"; resp.data = data; } else { resp.code = "-1"; resp.msg = "未找到车辆信息"; } return(resp); }