135 lines
5.0 KiB
C#
135 lines
5.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.Http;
|
|
|
|
/// <summary>
|
|
/// statisticsController 的摘要描述
|
|
/// </summary>
|
|
public class statisticsController: ApiController
|
|
{
|
|
//獲取於活動統計相關的數據
|
|
|
|
private Model.ezEntities _db = new Model.ezEntities();
|
|
public statisticsController()
|
|
{
|
|
//
|
|
// TODO: 在這裡新增建構函式邏輯
|
|
//
|
|
}
|
|
[HttpPost]
|
|
[Route("api/statistics/activitylist")]
|
|
public IHttpActionResult GetStatisticsActivityList()
|
|
{
|
|
//獲取活動列表
|
|
var activityList = _db.activities.OrderByDescending(x => x.reg_time).ToList();
|
|
return Ok(activityList);
|
|
}
|
|
[HttpPost]
|
|
[Route("api/statistics/activitycountlist")]
|
|
public IHttpActionResult GetActivityCountList(int page=1,int pagesize=10, [FromUri] string[] sortby = null, [FromUri] bool[] sortdesc = null )
|
|
{
|
|
//獲取多個活動統計列表,如果一個獲取超過五十個,則返回空
|
|
if (pagesize > 50)
|
|
{
|
|
return Ok();
|
|
}
|
|
var qry = _db.activities.OrderByDescending(x => x.reg_time);
|
|
var data = qry.Skip((page - 1) * pagesize).Take(pagesize).ToList();
|
|
var list = new
|
|
{
|
|
items = data.Select(x => new
|
|
{
|
|
id = x.num,
|
|
order_count = x.pro_order.Count(),
|
|
pw_count = x.pro_order.SelectMany(b => b.pro_order_detail).Count(),
|
|
activity_name = x.subject,
|
|
receivable = x.pro_order.SelectMany(a => a.pro_order_detail).Select(c => c.price).Sum(),
|
|
startdate = x.startDate_solar,
|
|
enddate = x.endDate_solar,
|
|
//register_status = EnumHelper.GetDescription((ActivityRegisterStatus)x.ActivityRegisterStatus),
|
|
//hold_status = EnumHelper.GetDescription((ActivityHoldStatus)x.ActivityHoldStatus),
|
|
//gdz_peoples = x.pro_order.SelectMany(a => a.pro_order_detail).Where(b => b.actItem?.actItem_kind?.IsGDZ == true).Count(),
|
|
}),
|
|
count =qry.Count()
|
|
};
|
|
return Ok(list);
|
|
}
|
|
[HttpPost]
|
|
[Route("api/statistics/activitycount")]
|
|
public IHttpActionResult GetActivityCount(int id)
|
|
{
|
|
//獲取單個活動統計數據
|
|
var qry = _db.activities.Where(a => a.num == id);
|
|
if (qry == null)
|
|
{
|
|
return Ok();
|
|
}
|
|
var data = new
|
|
{
|
|
list = qry.Select(a => new
|
|
{
|
|
id = a.num,
|
|
order_count = a.pro_order.Count(),
|
|
order_price_total = a.pro_order.SelectMany(b => b.pro_order_detail).Select(c => c.price).Sum()
|
|
})
|
|
|
|
|
|
};
|
|
return Ok(data);
|
|
}
|
|
|
|
[HttpPost]
|
|
[Route("api/statistics/GDZCount")]
|
|
public IHttpActionResult GetActivityGDZCount(int activity_num)
|
|
{
|
|
var qry = _db.pro_order_detail.Include("follower").Where(a => a.pro_order.activity_num == activity_num);
|
|
if (qry == null)
|
|
{
|
|
return Ok();
|
|
}
|
|
var data = new
|
|
{
|
|
all_count = _db.pro_order.Where(a => a.activity_num == activity_num).Count(),
|
|
all_gdz_count = qry
|
|
.Where(a => a.actItem.act_bom.Any(b => b.package_num == null && b.item_num == a.actItem_num))
|
|
.Select(a => a.order_no)
|
|
.Distinct()
|
|
.Count(),
|
|
gdz_item_counts = qry.Where(a => !a.actItem.subject.Contains("大牌位"))
|
|
.GroupBy(a => new
|
|
{
|
|
item_num = a.actItem.num,
|
|
item_name = a.actItem.subject,
|
|
price = a.actItem.price
|
|
})
|
|
.Select(g => new
|
|
{
|
|
item_num = g.Key.item_num,
|
|
item_name = g.Key.item_name,
|
|
price = g.Key.price,
|
|
count = g.Count(),//功德項目的數量
|
|
total_price = g.Where(x => x.price != null).Sum(x => x.price),
|
|
followers = _db.pro_order
|
|
.Where(h => g.Select(x => x.order_no).Distinct().ToList().Contains(h.order_no))
|
|
.Select(k => k.follower.u_name)
|
|
.Distinct()
|
|
.ToList(),
|
|
|
|
amountsByFollower = g
|
|
.GroupBy(x => x.pro_order.follower.u_name)
|
|
.Select(fg => new
|
|
{
|
|
follower = fg.Key,
|
|
amount = fg.Where(x => x.price != null).Sum(x => x.price)
|
|
})
|
|
.ToList()
|
|
})
|
|
.OrderByDescending(x => x.price)
|
|
.ToList()
|
|
|
|
};
|
|
return Ok(data);
|
|
}
|
|
} |