/// <summary> /// 获取按时计费策略表 /// </summary> /// <param name="tempID"></param> /// <returns></returns> public JsonResult FindHourDetail(int tempID) { CWTariff cwtariff = new CWTariff(); HourChargeDetail policy = cwtariff.FindHourChgDetail(hr => hr.TempChgID == tempID); if (policy == null) { List <HourChargeDetail> hourList = cwtariff.FindHourChgDetailList(); if (hourList.Count > 0) { policy = hourList[0]; if (policy != null) { policy.TempChgID = tempID; cwtariff.UpdateHourChgDetail(policy); } } else { policy = new HourChargeDetail(); policy.TempChgID = tempID; policy.StrideDay = EnmStrideDay.Continue; policy.CycleTime = EnmCycleTime.Hour_24; policy.CycleTopFee = 0; cwtariff.AddHourChgDetail(policy); } } return(Json(policy, JsonRequestBehavior.AllowGet)); }
public ActionResult ModifyTempRuleOfHour() { Response resp = new Response(); CWTariff cwtarff = new CWTariff(); int mainID = 0; string mID = Request.Form["MID"]; if (!string.IsNullOrEmpty(mID)) { TempChargingRule rule = cwtarff.FindTempChgRule(Convert.ToInt32(mID)); if (rule != null) { string preID = Request.Form["PreID"]; string tType = Request.Form["TType"]; rule.TempChgType = (EnmTempChargeType)Convert.ToInt16(tType); rule.PreChgID = Convert.ToInt32(preID); cwtarff.UpdateTempChgRule(rule); mainID = rule.ID; } } string hourID = Request.Form["hourID"]; if (!string.IsNullOrEmpty(hourID)) { string strided = Request.Form["StrideDay"]; string cyclet = Request.Form["CycleTime"]; string topfee = Request.Form["StrideTopFee"]; if (hourID == "0") { //新增 HourChargeDetail hour = new HourChargeDetail { StrideDay = (EnmStrideDay)Convert.ToInt16(strided), CycleTime = (EnmCycleTime)Convert.ToInt16(cyclet), CycleTopFee = Convert.ToSingle(topfee), TempChgID = mainID }; resp = cwtarff.AddHourChgDetail(hour); } else { //修改 HourChargeDetail detail = cwtarff.FindHourChgDetail(Convert.ToInt32(hourID)); if (detail != null) { detail.StrideDay = (EnmStrideDay)Convert.ToInt16(strided); detail.CycleTime = (EnmCycleTime)Convert.ToInt16(cyclet); detail.CycleTopFee = Convert.ToSingle(topfee); resp = cwtarff.UpdateHourChgDetail(detail); } } } resp.Message = "修改数据成功"; return(Json(resp)); }
public ActionResult AddTempRuleByHour() { Response resp = new Response(); CWTariff cwtrff = new CWTariff(); List <TempChargingRule> ruleList = cwtrff.GetTempChgRuleList(); if (ruleList.Count > 0) { resp.Code = 0; resp.Message = "系统故障,存在临时类记录,无法完成新增工作!"; return(Json(resp)); } string preID = Request.Form["PreID"]; string tType = Request.Form["TType"]; //计费类型 TempChargingRule rule = new TempChargingRule() { ICType = EnmICCardType.Temp, TempChgType = (EnmTempChargeType)Convert.ToInt16(tType), PreChgID = Convert.ToInt32(preID) }; resp = cwtrff.AddTempChgRule(rule); if (resp.Code == 1) { string strided = Request.Form["StrideDay"]; string cyclet = Request.Form["CycleTime"]; string topfee = Request.Form["StrideTopFee"]; HourChargeDetail hour = new HourChargeDetail { StrideDay = (EnmStrideDay)Convert.ToInt16(strided), CycleTime = (EnmCycleTime)Convert.ToInt16(cyclet), CycleTopFee = Convert.ToSingle(topfee), TempChgID = rule.ID }; resp = cwtrff.AddHourChgDetail(hour); resp.Data = null; if (resp.Code == 1) { var da = new { mainID = rule.ID, hourID = hour.ID }; resp.Data = da; } } return(Json(resp)); }
/// <summary> /// 计算临时用户费用 /// </summary> /// <param name="indate"></param> /// <param name="outdate"></param> /// <returns></returns> public Response CalculateTempFee(DateTime indate, DateTime outdate, out float fee) { fee = 0; Response resp = new Response(); List <TempChargingRule> tempChgRuleLst = tempManager.FindList().ToList(); if (tempChgRuleLst.Count == 0) { resp.Message = "未定义临时类计费规则"; return(resp); } TempChargingRule globalRule = tempChgRuleLst[0]; if (globalRule.TempChgType == EnmTempChargeType.Order) { #region 次 OrderChargeDetail orderdetail = orderDetailManager.Find(globalRule.ID); if (orderdetail == null) { resp.Message = "按次计费类型,但是没有找到按次计费规则表!"; return(resp); } TimeSpan ts = outdate - indate; double totalMinutes = Math.Ceiling(ts.TotalMinutes); TimeSpan span = TimeSpan.Parse(orderdetail.OrderFreeTime.Trim()); if (span.TotalMinutes > totalMinutes) { fee = orderdetail.Fee; } resp.Code = 1; resp.Message = "按次费用,查询成功"; #endregion } else if (globalRule.TempChgType == EnmTempChargeType.Hour) { #region 时 HourChargeDetail hourdetail = hourDetailManager.Find(hc => hc.TempChgID == globalRule.ID); if (hourdetail == null) { resp.Message = "没有找到 按时计费 规则记录!"; return(resp); } List <HourSectionInfo> sectionInfoLst = hourSectionManager.FindList(hs => hs.HourChgID == hourdetail.ID); if (sectionInfoLst.Count == 0) { resp.Message = "没有找到 时段 规则记录"; return(resp); } //这里都是24小时制,延续计费的方式进行,后面的,再增加 //排序 List <HourSectionInfo> timeslotLst = sectionInfoLst.OrderBy(sc => sc.StartTime).ToList(); if (hourdetail.CycleTopFee > 0) { #region 设置了周期最高计费 TimeSpan ts = outdate - indate; int days = ts.Days; bool isInit = true; DateTime newIndate = indate; //计算超过天数的停车费用 float daysFee = 0; if (days > 0) { daysFee = days * hourdetail.CycleTopFee; isInit = false; newIndate = indate.AddDays(days); } float otherHoursFee = calcuteHoursFeeHasLimit(newIndate, outdate, timeslotLst, isInit); if (otherHoursFee > 10000) { resp.Message = "系统异常,Fee - " + otherHoursFee; return(resp); } if (otherHoursFee > hourdetail.CycleTopFee) { otherHoursFee = hourdetail.CycleTopFee; } fee = daysFee + otherHoursFee; #endregion } else { //没有周期最高限额限制 fee = calcuteHoursFeeNoLimit(indate, outdate, timeslotLst); } resp.Code = 1; resp.Message = "查询费用成功"; #endregion } else { resp.Message = "未定义计费类型,请核查!"; } return(resp); }
/// <summary> /// 更新 /// </summary> /// <param name="detail"></param> /// <returns></returns> public Response UpdateHourChgDetail(HourChargeDetail detail) { return(hourDetailManager.Update(detail)); }
/// <summary> /// 添加 /// </summary> /// <param name="detail"></param> /// <returns></returns> public Response AddHourChgDetail(HourChargeDetail detail) { return(hourDetailManager.Add(detail)); }
public ActionResult AddHourSectionRule() { Response resp = new Response(); CWTariff cwtarff = new CWTariff(); string hourchgID = Request.Form["HourChgID"]; if (string.IsNullOrEmpty(hourchgID)) { resp.Message = "周期性计费策略ID为空,传输错误!"; return(Json(resp)); } int hourID = Convert.ToInt32(hourchgID); HourChargeDetail temprule = cwtarff.FindHourChgDetail(hourID); if (temprule == null) { resp.Message = "传输错误,找不到相关的周期性计费,ID-" + hourchgID; return(Json(resp)); } //重点是时间段的判断 string start = Request.Form["StartTime"]; string end = Request.Form["EndTime"]; DateTime st_dtime = DateTime.Parse("2017-1-1 " + start + ":00"); DateTime end_dtime = DateTime.Parse("2017-1-1 " + end + ":00").AddSeconds(-1); if (DateTime.Compare(st_dtime, end_dtime) > 0) { end_dtime = end_dtime.AddDays(1); } List <HourSectionInfo> timeSlotLst = cwtarff.FindHourSectionList(hr => true); foreach (HourSectionInfo section in timeSlotLst) { DateTime sttime = section.StartTime; DateTime endtime = section.EndTime.AddSeconds(-1); #region if (DateTime.Compare(sttime, st_dtime) < 0 && DateTime.Compare(endtime, st_dtime) > 0) { resp.Message = "当前时段设置错误,原来-" + sttime.ToString() + ",现-" + st_dtime.ToString(); return(Json(resp)); } if (DateTime.Compare(sttime, end_dtime) < 0 && DateTime.Compare(endtime, end_dtime) > 0) { resp.Message = "当前时段设置错误,原来-" + sttime.ToString() + ",现-" + end_dtime.ToString(); return(Json(resp)); } if (DateTime.Compare(st_dtime, sttime) < 0 && DateTime.Compare(end_dtime, sttime) > 0) { resp.Message = "当前时段设置错误,现-" + st_dtime.ToString() + ",原来 - " + sttime.ToString(); return(Json(resp)); } if (DateTime.Compare(st_dtime, endtime) < 0 && DateTime.Compare(end_dtime, endtime) > 0) { resp.Message = "当前时段设置错误,现-" + st_dtime.ToString() + ",原来 - " + endtime.ToString(); return(Json(resp)); } #endregion if (DateTime.Compare(endtime, DateTime.Parse("2017-1-1 23:59:59")) > 0) { DateTime newstart = DateTime.Parse("2017-1-1"); DateTime newend = endtime.AddDays(-1); if (DateTime.Compare(newstart, st_dtime) < 0 && DateTime.Compare(newend, st_dtime) > 0) { resp.Message = "当前时段设置错误,现-" + st_dtime.ToString() + ",原来 New- " + newstart.ToString(); return(Json(resp)); } if (DateTime.Compare(newstart, end_dtime) < 0 && DateTime.Compare(newend, end_dtime) > 0) { resp.Message = "当前时段设置错误,现-" + end_dtime.ToString() + ",原来 New- " + newstart.ToString(); return(Json(resp)); } } } if (DateTime.Compare(end_dtime, DateTime.Parse("2017-1-1 23:59:59")) > 0) { DateTime newend = DateTime.Parse("2017-1-1 " + end + ":00").AddSeconds(-1); foreach (HourSectionInfo section in timeSlotLst) { DateTime sttime = section.StartTime; DateTime endtime = section.EndTime.AddSeconds(-1); if (DateTime.Compare(sttime, newend) < 0 && DateTime.Compare(endtime, newend) > 0) { resp.Message = "当前时段设置错误,原来-" + sttime.ToString() + ",现-" + newend.ToString(); return(Json(resp)); } } } string topfee = Request.Form["SectionTopFee"]; string freetime = Request.Form["SectionFreeTime"]; string firstvoid = Request.Form["FirstVoidTime"]; string firstfee = Request.Form["FirstVoidFee"]; string intervalvoid = Request.Form["IntervalVoidTime"]; string intervalfee = Request.Form["IntervalVoidFee"]; HourSectionInfo hoursection = new HourSectionInfo() { HourChgID = hourID, StartTime = st_dtime, EndTime = end_dtime.AddSeconds(1), SectionTopFee = Convert.ToSingle(topfee), SectionFreeTime = freetime, FirstVoidTime = firstvoid, FirstVoidFee = Convert.ToSingle(firstfee), IntervalVoidTime = intervalvoid, IntervalVoidFee = Convert.ToSingle(intervalfee) }; resp = cwtarff.AddHourSection(hoursection); return(Json(resp)); }