using System; using System.Collections.Generic; using System.Linq; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; namespace WX.CRM.BLL.Wx { public class WX_SZZYORDERREFUNDCONTRACT_BL : DbContextRepository, IWX_SZZYORDERREFUNDCONTRACT { public IList GetList(decimal? businessId, decimal? orderId, DateTime? stime, DateTime? etime) { using (var db = new crmContext()) { var refundQuery = db.WX_SZZYORDERREFUND.Where(m => m.ISDELETE == 0).AsQueryable(); var cacheBl = new CACHE_BL(); var codeMap = cacheBl.GetList_OrderDeptBusiness(); if (businessId.HasValue) { var deptCodeList = new List(); foreach (var map in codeMap) { if (map.Value.Select(n => n.BUSINESSID).ToList().Contains(businessId.Value)) { deptCodeList.Add(map.Key); } } if (deptCodeList.Contains("default")) { refundQuery = refundQuery.Where(p => deptCodeList.Contains(p.DEPTCODE) || p.DEPTCODE == null || p.DEPTCODE == ""); } else { refundQuery = refundQuery.Where(p => deptCodeList.Contains(p.DEPTCODE)); } } var query = from a in refundQuery.GroupBy(p => new { p.ORDERID, p.DEPTCODE }).Select(g => new { Id = g.Max(m => m.ID), OrderId = g.Key.ORDERID, DEPTCODE = g.Key.DEPTCODE, RefundPrice = g.Sum(p => p.REFUNDPRICE), RefundTime = g.Min(p => p.REFUNDDATE) }) join o in db.WX_SZZYORDER on a.OrderId equals o.ORDERID into aoTmp from ao in aoTmp.DefaultIfEmpty() join b in db.WX_SZZYORDERREFUNDCONTRACT on a.OrderId equals b.ORDERID into abTmp from ab in abTmp.DefaultIfEmpty() select new RefundContractView() { OrderId = a.OrderId, CName = ao.CNAME, RefundPrice = a.RefundPrice, RefundTime = a.RefundTime.Value, Contract = ab.CONTRACT, ContractStatus = ab.CONTRACTSTATUS, IsOpen = ao.ISOPEN, ArrivalTime = ao.ARRIVALTIME, ORDERSTATUS = ao.ORDERSTATUS, DEPTCODE = a.DEPTCODE, Id = a.Id }; if (orderId.HasValue) query = query.Where(p => p.OrderId == orderId.Value); if (stime.HasValue) query = query.Where(p => p.RefundTime >= stime); if (etime.HasValue) { etime = etime.Value.AddDays(1); query = query.Where(p => p.RefundTime < etime); } var qdata = query.ToList(); foreach (var item in qdata) { if (string.IsNullOrWhiteSpace(item.DEPTCODE) && codeMap.ContainsKey("default")) { item.DEPTNAEM = codeMap["default"].FirstOrDefault()?.BUSINESSNAME; } else if (item.DEPTCODE != null && codeMap.ContainsKey(item.DEPTCODE)) { item.DEPTNAEM = codeMap[item.DEPTCODE].FirstOrDefault()?.BUSINESSNAME; } } return qdata; } } } }