TG.WXCRM.V4/BLL/Wx/WX_SZZYORDERREFUNDCONTRACT_...

89 lines
3.9 KiB
C#

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<WX_SZZYORDERREFUNDCONTRACT>, IWX_SZZYORDERREFUNDCONTRACT
{
public IList<RefundContractView> 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<string>();
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;
}
}
}
}