using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; /// /// statisticsController 的摘要描述 /// 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); } }