// Calculate the number of days in current month that are included between // the input lease start date and end date private decimal daysInLeaseThisMonth(Lease lease) { DateTime today = DateTime.Now; // Lower day is the maximum of the first day of this month and the lease start date DateTime lowerDay = DateTimeExtensions.MaxDate (DateTimeExtensions.FirstDayOfMonth(today), lease.StartDate); // If lease end date is not null, upper day is the minimum of the last day of this month // and the lease end date // If lease end date is null, upper day is the last day of this month DateTime upperDay; if (lease.EndDate.HasValue) { DateTime endDate = lease.EndDate.GetValueOrDefault(); upperDay = DateTimeExtensions.MinDate (DateTimeExtensions.LastDayOfMonth(today), endDate); } else { upperDay = DateTimeExtensions.LastDayOfMonth(today); } // Number of days in lease this month = upper day - lower day + 1 return((upperDay - lowerDay).Days + 1); }
private void SetDateRange(object objectParameter) { string dateRange = objectParameter.ToString(); switch (dateRange) { case "ThisWeek": StartDate = DateTimeExtensions.StartOfWeek(DateTime.Today, DayOfWeek.Monday); EndDate = DateTimeExtensions.EndOfWeek(DateTime.Today, DayOfWeek.Monday); break; case "LastWeek": StartDate = DateTimeExtensions.StartOfLastWeek(DateTime.Today, DayOfWeek.Monday); EndDate = DateTimeExtensions.EndOfLastWeek(DateTime.Today, DayOfWeek.Monday); break; case "CurrentMonth": StartDate = DateTimeExtensions.FirstDayOfMonth(DateTime.Today); EndDate = DateTimeExtensions.LastDayOfMonth(DateTime.Today); break; default: break; } }
// Calculate income from rents this month private decimal monthlyRentIncome() { decimal sum = 0; int daysInThisMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); // For leases that are current, calculate the income according to the lease type, // and add income to sum: // Daily: income = #days in lease this month * rent // Weekly: income = (#days in lease this month)/7 * rent // Monthly: income = (#days in lease this month)/(#days in this month) * rent // Yearly: If this month is completely included between start date and end date, // then income = rent/12 // Otherwise income = (#days in lease this month)/(#days in this month) * rent / 12 foreach (var lease in db.Leases) { if (lease.StartDate <= DateTime.Now && ((lease.EndDate.HasValue && lease.EndDate >= DateTime.Now) || (!lease.EndDate.HasValue))) { switch (lease.LeaseType) { case Constants.RentPeriod.Daily: sum += daysInLeaseThisMonth(lease) * lease.Rent; break; case Constants.RentPeriod.Weekly: sum += (daysInLeaseThisMonth(lease) / 7) * lease.Rent; break; case Constants.RentPeriod.Monthly: sum += (daysInLeaseThisMonth(lease) / daysInThisMonth) * lease.Rent; break; case Constants.RentPeriod.Yearly: if (lease.StartDate >= DateTimeExtensions.FirstDayOfMonth(DateTime.Now) && ((lease.EndDate.HasValue && lease.EndDate >= DateTimeExtensions.LastDayOfMonth(DateTime.Now)) || (!lease.EndDate.HasValue))) { sum += lease.Rent / 12; } else { sum += ((daysInLeaseThisMonth(lease) / daysInThisMonth) * lease.Rent) / 12; } break; default: break; } } } return(sum); }
/// <summary> /// 数据对比,rjy 时间计算修改 /// </summary> /// <param name="time">前端传递时间,用于和服务器时间对比,判断自然周,自然月,自然季度</param> /// <param name="timeType">1:自然周,2:自然月,3:季度,4:天</param> /// <param name="upAndDown">0:当前, 1:前,2:后</param> /// <returns></returns> public async Task <DetailsResult> GetOrderDetailsAsync(DateTime time, string timeType, string upAndDown) { DetailsResult result = null; string startTime = string.Empty; //显示数据开始时间 string endTime = string.Empty; //显示数据结束时间 string lastStartTime = string.Empty; //对比数据开始时间 string lastEndTime = string.Empty; //对比数据结束时间 string retStartTime = string.Empty; //返回的开始时间 string retEndTime = string.Empty; //返回的结束时间 String retQuarter = string.Empty; //不管时间是什么时间啊,原始数据始终需要和前一次的数据比较,找出当前时间段,和对比时间段的开始时间和结束时间 switch (timeType) { case "1": { if (upAndDown == "0") { startTime = DateTimeExtensions.GetMondayDate(time).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.GetSundayDate(time).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "1") //上 { startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetMondayDate(time).AddDays(-1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "2") //下 { startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetSundayDate(time).AddDays(+1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } lastStartTime = DateTimeExtensions.GetMondayDate(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd"); lastEndTime = startTime; retStartTime = startTime; retEndTime = DateTime.Parse(endTime).AddDays(-1).ToString("yyyy-MM-dd"); } break; case "2": { if (upAndDown == "0") { startTime = DateTimeExtensions.FirstDayOfMonth(time).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.LastDayOfMonth(time).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "1") //上 { startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(-1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "2") //下 { //计算逻辑错误 比九月下一月应该是十月 十月应该和九月比较 startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(+1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } lastStartTime = DateTimeExtensions.FirstDayOfMonth(DateTime.Parse(startTime).AddMonths(-1)).ToString("yyyy-MM-dd"); lastEndTime = startTime; retStartTime = DateTime.Parse(lastStartTime).ToString("yyyy-MM"); retEndTime = DateTime.Parse(startTime).ToString("yyyy-MM"); } break; case "3": { if (upAndDown == "0") { startTime = DateTimeExtensions.TwoToFirstDayOfSeason(time).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "1") //上 { startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToFirstDayOfSeason(time).AddDays(-1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "2") //下 { startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToLastDayOfSeason(time).AddDays(+1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } lastStartTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd"); lastEndTime = startTime; retStartTime = lastStartTime; retEndTime = startTime; retQuarter = DateTimeExtensions.JudgeTimeIsToDiff(DateTime.Parse(startTime)); } break; case "4": { int day = 0; if (upAndDown == "0") { day = 0; } if (upAndDown == "1") //上 { day = -1; } if (upAndDown == "2") //下 { day = 1; } startTime = time.AddDays(day).ToString("yyyy-MM-dd"); endTime = time.AddDays(+(1 + day)).ToString("yyyy-MM-dd"); lastStartTime = time.AddDays(-(1 - day)).ToString("yyyy-MM-dd"); lastEndTime = time.AddDays(day).ToString("yyyy-MM-dd"); retStartTime = lastStartTime; retEndTime = startTime; } break; default: break; } //显示的数据源 Details showDetails = await LeadDataDataAccess.Instance.GetOrderDetailsAsync(startTime, endTime); //对比的数据源 Details trastDetails = await LeadDataDataAccess.Instance.GetOrderDetailsAsync(lastStartTime, lastEndTime); ShareProfit showShare = await LeadDataDataAccess.Instance.GetShareProfitAsync(startTime, endTime); ShareProfit trastShare = await LeadDataDataAccess.Instance.GetShareProfitAsync(lastStartTime, lastEndTime); bool isSuccess = false; //(今天-昨天)÷昨天×100% result = new DetailsResult(); { result.Sum = showDetails.Sum; result.Gross = showDetails.Gross; result.Profit = showDetails.Profit; result.Profits = showDetails.Profits; result.Average = showDetails.Average; result.Cashs = showShare.Cashs; result.SumRate = Contrast(showDetails.Sum, trastDetails.Sum, out isSuccess); result.SumTrend = isSuccess; result.GrossRate = Contrast(showDetails.Gross, trastDetails.Gross, out isSuccess); result.GrossTrend = isSuccess; result.ProfitRate = Contrast(showDetails.Profit, trastDetails.Profit, out isSuccess); result.ProfitTrend = isSuccess; result.ProfitsRate = Contrast(showDetails.Profits, trastDetails.Profits, out isSuccess); result.ProfitsTrend = isSuccess; result.AverageRate = Contrast(showDetails.Average, trastDetails.Average, out isSuccess); result.AverageTrend = isSuccess; result.CashsRate = Contrast(showShare.Cashs, trastShare.Cashs, out isSuccess); result.CashsTrend = isSuccess; result.StartTime = retStartTime; //lastStartTime; result.EndTime = retEndTime; //startTime;//(DateTime.Parse(endTime).AddDays(-1)).ToString("yyyy-MM-dd"); result.Quarter = retQuarter; }; return(result); }
/// <summary> /// bd经理 /// </summary> /// <param name="userid">操作人id</param> /// <param name="stype">1:销售额,2:渠道数,3:拉新用户数</param> /// <param name="timeType">1:7,2:30,3:90</param> /// <param name="infoTimeType">1:自然周,2:自然月,3:季度,4:天</param> /// <param name="time">当前显示时间</param> /// <param name="upAndDown">0:当前,1:向上,2:向下</param> public async Task <BDLeader> GetBdInfo(int userid, int stype, string timeType, string infoTimeType, DateTime time, string upAndDown) { BDLeader bDLeader = new BDLeader(); bDLeader.lineData = new BDLeaderLineResult(); IList <BDLeaderEntity> list = await AccountProfitDAL.Instance.GetBdInfo(userid, stype); string startTime = string.Empty; string endTime = string.Empty; string lastStartTime = string.Empty; //对比数据开始时间 string lastEndTime = string.Empty; //对比数据结束时间 string retStartTime = string.Empty; //返回的开始时间 string retEndTime = string.Empty; //返回的结束时间 String retQuarter = string.Empty; string[] times = null; string[] limits = null; #region 空数据构建 switch (timeType) { case "1": { startTime = DateTime.Now.AddDays(-6).ToString("yyyy-MM-dd"); endTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"); times = new string[7]; limits = new string[7]; for (int i = 0; i < 7; i++) { times[i] = DateTime.Now.AddDays(+(i - 6)).ToString("yyyy-MM-dd"); limits[i] = "0.00"; } } break; case "2": { startTime = DateTime.Now.AddDays(-29).ToString("yyyy-MM-dd"); endTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"); times = new string[30]; limits = new string[30]; for (int i = 0; i < 30; i++) { times[i] = DateTime.Now.AddDays(+(i - 29)).ToString("yyyy-MM-dd"); limits[i] = "0.00"; } } break; case "3": { startTime = DateTime.Now.AddDays(-89).ToString("yyyy-MM-dd"); endTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"); int days = DateTimeExtensions.DateDiff() + 1; times = new string[90]; limits = new string[90]; for (int i = 0; i < 90; i++) { times[i] = DateTime.Now.AddDays(+(i - 89)).ToString("yyyy-MM-dd"); limits[i] = "0.00"; } } break; default: break; } #endregion #region 折线数据处理 for (int i = 0; i < times.Length; i++) { //销售额 if (stype == 1) { limits[i] = list.Where(p => p.date < Convert.ToDateTime(times[i])).Sum(p => Convert.ToDecimal(p.limit)).ToString(); } //渠道数和拉新数 else { limits[i] = list.Where(p => p.date < Convert.ToDateTime(times[i])).Count().ToString(); } times[i] = Convert.ToDateTime(times[i]).ToString("MM-dd"); } bDLeader.lineData.date = times; bDLeader.lineData.limit = limits; bDLeader.LineStartTime = times[0]; bDLeader.LineEndTime = times[times.Length - 1]; #endregion //数据详情构建 switch (infoTimeType) { case "1": { if (upAndDown == "0") { startTime = DateTimeExtensions.GetMondayDate(time).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.GetSundayDate(time).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "1") //上 { startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetMondayDate(time).AddDays(-1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "2") //下 { startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetSundayDate(time).AddDays(+1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } lastStartTime = DateTimeExtensions.GetMondayDate(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd"); lastEndTime = startTime; retStartTime = startTime; retEndTime = DateTime.Parse(endTime).AddDays(-1).ToString("yyyy-MM-dd"); } break; case "2": { if (upAndDown == "0") { startTime = DateTimeExtensions.FirstDayOfMonth(time).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.LastDayOfMonth(time).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "1") //上 { startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(-1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "2") //下 { //计算逻辑错误 比九月下一月应该是十月 十月应该和九月比较 startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(+1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } lastStartTime = DateTimeExtensions.FirstDayOfMonth(DateTime.Parse(startTime).AddMonths(-1)).ToString("yyyy-MM-dd"); lastEndTime = startTime; retStartTime = DateTime.Parse(lastStartTime).ToString("yyyy-MM"); retEndTime = DateTime.Parse(startTime).ToString("yyyy-MM"); } break; case "3": { if (upAndDown == "0") { startTime = DateTimeExtensions.TwoToFirstDayOfSeason(time).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "1") //上 { startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToFirstDayOfSeason(time).AddDays(-1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } if (upAndDown == "2") //下 { startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToLastDayOfSeason(time).AddDays(+1)).ToString("yyyy-MM-dd"); endTime = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd"); } lastStartTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd"); lastEndTime = startTime; retStartTime = lastStartTime; retEndTime = startTime; retQuarter = DateTimeExtensions.JudgeTimeIsToDiff(DateTime.Parse(startTime)); } break; case "4": { int day = 0; if (upAndDown == "0") { day = 0; } if (upAndDown == "1") //上 { day = -1; } if (upAndDown == "2") //下 { day = 1; } startTime = time.AddDays(day).ToString("yyyy-MM-dd"); endTime = time.AddDays(+(1 + day)).ToString("yyyy-MM-dd"); lastStartTime = time.AddDays(-(1 - day)).ToString("yyyy-MM-dd"); lastEndTime = time.AddDays(day).ToString("yyyy-MM-dd"); retStartTime = lastStartTime; retEndTime = startTime; } break; default: break; } bDLeader.StartTime = retStartTime; bDLeader.EndTime = retEndTime; bDLeader.Quarter = retQuarter; IList <BDLeaderEntity> listinfo = await AccountProfitDAL.Instance.GetBdInfo(userid, 4); List <BDLeaderInfoResult> bDLeaderInfoResults = new List <BDLeaderInfoResult>(); foreach (var item in listinfo) { BDLeaderInfoResult bDLeaderItem = new BDLeaderInfoResult(); bDLeaderItem.name = item.rname; string limit = string.Empty; string climit = string.Empty; bool issuccess = false; //销售额 if (stype == 1) { limit = list.Where(p => (p.date >= Convert.ToDateTime(startTime)) && (p.date < Convert.ToDateTime(endTime)) && (p.rname == item.rname)).Sum(p => Convert.ToDecimal(p.limit)).ToString(); climit = list.Where(p => (p.date >= Convert.ToDateTime(lastStartTime)) && (p.date < Convert.ToDateTime(lastEndTime)) && (p.rname == item.rname)).Sum(p => Convert.ToDecimal(p.limit)).ToString(); } //渠道数和拉新数 else { limit = list.Where(p => (p.date >= Convert.ToDateTime(startTime)) && (p.date < Convert.ToDateTime(endTime)) && (p.rname == item.rname)).Count().ToString(); climit = list.Where(p => (p.date >= Convert.ToDateTime(lastStartTime)) && (p.date < Convert.ToDateTime(lastEndTime)) && (p.rname == item.rname)).Sum(p => Convert.ToDecimal(p.limit)).ToString(); } bDLeaderItem.Sum = limit; bDLeaderItem.SumRate = Contrast(limit, climit, out issuccess); bDLeaderItem.SumTrend = issuccess; bDLeaderInfoResults.Add(bDLeaderItem); } bDLeader.infoData = bDLeaderInfoResults; return(bDLeader); }