ComplianceServer/oldcode/Core.BLL/Application/Order/QueryCashFlow.cs

364 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CRM.Core.BLL.B;
using CRM.Core.BLL.Wx;
using CRM.Core.DAL;
using CRM.Core.Model;
using CRM.Core.Model.Entity;
using CRM.Core.Model.EntityAudit;
using CRM.Core.Model.QueryModels;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WX.CRM.Common;
namespace CRM.Core.BLL.Application.Order
{
public class QueryCashFlow
{
private static DateTime queryTime;
private static int queryTimespanSecond = 30;
private static ConcurrentDictionary<string, CashFlow.CashFlowQueryTimes> CashFlowQueryKVS = new ConcurrentDictionary<string, CashFlow.CashFlowQueryTimes>();
private static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
B_Audit_Items_BL b_Audit_Items_bl = new B_Audit_Items_BL();
public List<CashFlow.CashFlowQuery> cashFlowQueryResult(DateTime day)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
var daystr=day.Date.ToShortDateString();
CashFlow.CashFlowQueryTimes cashFlowQueryTimes = new CashFlow.CashFlowQueryTimes();
// cashFlowQueryTimes.cashFlowQueries = new List<CashFlow.CashFlowQuery>();
if (CashFlowQueryKVS.TryGetValue(daystr,out cashFlowQueryTimes))
{
if (cashFlowQueryTimes.QueryTime.AddSeconds(queryTimespanSecond)> DateTime.Now)
{
return cashFlowQueryTimes.cashFlowQueries;
}
else
{
CashFlowQueryKVS.TryRemove(daystr, out cashFlowQueryTimes);
}
}
cashFlowQueryTimes = new CashFlow.CashFlowQueryTimes();
cashFlowQueryTimes.cashFlowQueries = cashFlowQueries(day);
cashFlowQueryTimes.QueryTime = DateTime.Now;
CashFlowQueryKVS.TryAdd(daystr, cashFlowQueryTimes);
stopwatch.Stop();
Logger.Debug($"cashFlowQueryResult 查询{daystr}耗时:{stopwatch.ElapsedMilliseconds}");
return cashFlowQueryTimes.cashFlowQueries;
}
public List<CashFlow.CashFlowQuery> cashFlowQueries(DateTime day)
{
List<CashFlow.CashFlowQuery> cashFlowQueries = new List<CashFlow.CashFlowQuery>();
try
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
B_Audit_Items_BL b_Audit_Items_bl = new B_Audit_Items_BL();
var deposits = QueryDeposit(day);
var depositstimes = stopwatch.ElapsedMilliseconds;
stopwatch.Restart();
var refunds = QueryRefund(day);
var refundstimes = stopwatch.ElapsedMilliseconds;
stopwatch.Restart();
var orders = QueryOrder(day);
var orderstimes = stopwatch.ElapsedMilliseconds;
stopwatch.Restart();
var depConsumes= QuerydepConsumes(day);
var depConsumestimes = stopwatch.ElapsedMilliseconds;
stopwatch.Restart();
var b_Audit_Items = b_Audit_Items_bl.GetB_Audit_Items();
foreach (var item in b_Audit_Items)
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
Day=day.ToString("yyyy-MM-dd"),
itemId = item.Id,
parentId=item.ParentId,
sort=item.Sort,
item = item.Item,
};
CashFlow.CashFlowQuery cashFlowQuerytemp;
if (deposits.TryGetValue(item.Id,out cashFlowQuerytemp))
{
cashFlowQuery.payprice = cashFlowQuerytemp.payprice;
cashFlowQuery.monPayprice = cashFlowQuerytemp.monPayprice;
}
if(refunds.TryGetValue(item.Id, out cashFlowQuerytemp))
{
cashFlowQuery.Refundprice = cashFlowQuerytemp.Refundprice;
cashFlowQuery.monRefundprice = cashFlowQuerytemp.monRefundprice;
cashFlowQuery.monRefundOrderNum = cashFlowQuerytemp.monRefundOrderNum;
}
if(orders.TryGetValue(item.Id, out cashFlowQuerytemp))
{
cashFlowQuery.orderNum = cashFlowQuerytemp.orderNum;
cashFlowQuery.monOrderNum = cashFlowQuerytemp.monOrderNum;
}
if(depConsumes.TryGetValue(item.Id, out cashFlowQuerytemp))
{
cashFlowQuery.DepConsume = cashFlowQuerytemp.DepConsume;
cashFlowQuery.monDepConsume = cashFlowQuerytemp.monDepConsume;
}
cashFlowQueries.Add(cashFlowQuery);
}
cashFlowQueries = CashFlow.SortTrees(cashFlowQueries);
stopwatch.Stop();
Logger.Debug($"cashFlowQueries 查询deposits耗时:{depositstimes}查询refunds耗时:{refundstimes}查询orders耗时:{orderstimes}查询depConsumes耗时:{depConsumestimes}");
}
catch (Exception ex)
{
Logger.Error(ex);
}
return cashFlowQueries;
}
/// <summary>
/// 查询到账
/// </summary>
/// <param name="day"></param>
public Dictionary<int, CashFlow.CashFlowQuery> QueryDeposit(DateTime day)
{
var startDate = new DateTime(day.Year, day.Month, 1).ToString("yyyy-MM-dd");
var endDate = new DateTime(day.Year, day.Month + 1, 1);
var endDay = day.Date.AddDays(1).ToString("yyyy-MM-dd");
WX_SzzyOrderDeposit_BL _orderDeposit = new WX_SzzyOrderDeposit_BL();
var sql = $"SELECT paydate,payprice,channel From wx_szzyorderdeposit where paydate>='{startDate}' and paydate<'{endDay}' and auditstatus=1";
var ds = MySqlDbHelper.DataQueray(ConStringHelper.ZxdCRMConn, CommandType.Text, sql);
List<CashFlow.DepositQuery> depositlist = ds.Tables[0].ToList<CashFlow.DepositQuery>();
// var depositlist = _orderDeposit.GetList(d => d.paydate >= startDate && d.paydate < endDay && d.auditstatus == 1 );
var depositGroupBy = depositlist.Select(d => new { d.paydate.Date, d.channel, d.payprice }).GroupBy(d => d.channel);
List<CashFlow.CashFlowQuery> cashFlowQueriesTempGroup = new List<CashFlow.CashFlowQuery>();
foreach (var item in depositGroupBy)
{
var b_Audit_Items = b_Audit_Items_bl.GetAudit_ItemsFromChannel(item.Key);
//b_Audit_Items.Add(new B_Audit_Items { Item = "总数据", Id = 1 });
foreach (var b_Audit_Item in b_Audit_Items)
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
// Day = day.ToString("yyyy-MM-dd"),
itemId = b_Audit_Item.Id,
item = b_Audit_Item.Item,
payprice = item.Where(d => d.Date == day.Date).Sum(d => d.payprice),
monPayprice = item.Sum(d => d.payprice)
};
cashFlowQueriesTempGroup.Add(cashFlowQuery);
}
}
Dictionary<int, CashFlow.CashFlowQuery> cashFlowQueries = new Dictionary<int, CashFlow.CashFlowQuery>();
foreach (var item in cashFlowQueriesTempGroup.GroupBy(d => new { d.itemId, d.item }))
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
itemId = item.Key.itemId,
item=item.Key.item,
payprice = item.Sum(d => d.payprice),
monPayprice = item.Sum(d => d.monPayprice)
};
cashFlowQueries.Add(cashFlowQuery.itemId, cashFlowQuery);
}
return cashFlowQueries;
}
/// <summary>
/// 查询退款
/// </summary>
/// <param name="day"></param>
public Dictionary<int, CashFlow.CashFlowQuery> QueryRefund(DateTime day)
{
var startDate = new DateTime(day.Year, day.Month, 1);
var endDate = new DateTime(day.Year, day.Month + 1, 1);
var endDay = day.Date.AddDays(1);
WX_SzzyOrderRefund_BL _SzzyOrderRefund_BL = new WX_SzzyOrderRefund_BL();
B_Audit_Items_BL b_Audit_Items_bl = new B_Audit_Items_BL();
var depositlist = _SzzyOrderRefund_BL.GetList(d => d.auditstatus == 1 && d.isacturalrefund == 1 && d.audittime >= startDate && d.audittime < endDay);
var depositGroupBy = depositlist.Select(d => new { d.audittime.Value.Date, d.channel, d.refundprice }).GroupBy(d => d.channel);
List<CashFlow.CashFlowQuery> cashFlowQueriesTempGroup = new List<CashFlow.CashFlowQuery>();
foreach (var item in depositGroupBy)
{
var b_Audit_Items = b_Audit_Items_bl.GetAudit_ItemsFromChannel(item.Key.Value);
//b_Audit_Items.Add(new B_Audit_Items { Item = "总数据", Id = 1 });
foreach (var b_Audit_Item in b_Audit_Items)
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
// Day = day.ToString("yyyy-MM-dd"),
itemId = b_Audit_Item.Id,
item = b_Audit_Item.Item,
Refundprice = item.Where(d => d.Date == day.Date).Sum(d => d.refundprice),
monRefundprice = item.Sum(d => d.refundprice),
monRefundOrderNum = item.Count()
};
cashFlowQueriesTempGroup.Add(cashFlowQuery);
}
}
Dictionary<int, CashFlow.CashFlowQuery> cashFlowQueries = new Dictionary<int, CashFlow.CashFlowQuery>();
foreach (var item in cashFlowQueriesTempGroup.GroupBy(d => new { d.itemId, d.item }))
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
itemId = item.Key.itemId,
item = item.Key.item,
Refundprice = item.Sum(d => d.Refundprice),
monRefundprice = item.Sum(d => d.monRefundprice),
monRefundOrderNum = item.Sum(d=>d.monRefundOrderNum)
};
cashFlowQueries.Add(cashFlowQuery.itemId,cashFlowQuery);
}
return cashFlowQueries;
}
/// <summary>
/// 查询订单
/// </summary>
/// <param name="day"></param>
public Dictionary<int, CashFlow.CashFlowQuery> QueryOrder(DateTime day)
{
var startDate = new DateTime(day.Year, day.Month, 1).ToString("yyyy-MM-dd");
var endDate = new DateTime(day.Year, day.Month + 1, 1);
var endDay = day.Date.AddDays(1).ToString("yyyy-MM-dd");
WX_SZZYORDER_BL _SZZYORDER_BL = new WX_SZZYORDER_BL();
B_Audit_Items_BL b_Audit_Items_bl = new B_Audit_Items_BL();
List<string> orderstatus=new List<string> { "220", "205", "80", "90" };
// var depositlist = _SZZYORDER_BL.GetList(d => orderstatus.Contains(d.ORDERSTATUS) && d.ARRIVALTIME >= startDate && d.ARRIVALTIME < endDay);
var sql = $"SELECT orderid,arrivaltime,channel From wx_szzyorder where ARRIVALTIME>='{startDate}' and ARRIVALTIME<'{endDay}' and orderstatus in ('220','205','80','90');";
var ds = MySqlDbHelper.DataQueray(ConStringHelper.ZxdCRMConn, CommandType.Text, sql);
List<CashFlow.OrderQuery> sZZYORDERs = ds.Tables[0].ToList<CashFlow.OrderQuery>();
var sZZYORDERsGroupBy = sZZYORDERs.Select(d => new { d.orderid, d.channel, d.arrivaltime }).GroupBy(d => d.channel);
List<CashFlow.CashFlowQuery> cashFlowQueriesTempGroup = new List<CashFlow.CashFlowQuery>();
foreach (var item in sZZYORDERsGroupBy)
{
var b_Audit_Items = b_Audit_Items_bl.GetAudit_ItemsFromChannel(item.Key);
foreach (var b_Audit_Item in b_Audit_Items)
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
// Day = day.ToString("yyyy-MM-dd"),
itemId = b_Audit_Item.Id,
item = b_Audit_Item.Item,
orderNum = item.Where(d => d.arrivaltime == day.Date).Count(),
monOrderNum = item.Count(),
};
cashFlowQueriesTempGroup.Add(cashFlowQuery);
}
}
Dictionary<int, CashFlow.CashFlowQuery> cashFlowQueries = new Dictionary<int, CashFlow.CashFlowQuery>();
foreach (var item in cashFlowQueriesTempGroup.GroupBy(d => new { d.itemId, d.item }))
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
itemId = item.Key.itemId,
item = item.Key.item,
orderNum = item.Sum(d => d.orderNum),
monOrderNum = item.Sum(d => d.monOrderNum)
};
cashFlowQueries.Add(cashFlowQuery.itemId, cashFlowQuery);
}
return cashFlowQueries;
}
/// <summary>
/// 查询退款
/// </summary>
/// <param name="day"></param>
public Dictionary<int, CashFlow.CashFlowQuery> QuerydepConsumes(DateTime day)
{
var startDate = new DateTime(day.Year, day.Month, 1).ToString("yyyy-MM-dd");
var endDate = new DateTime(day.Year, day.Month + 1, 1).ToString("yyyy-MM-dd");
var endDay = day.Date.AddDays(1).ToString("yyyy-MM-dd");
WX_SZZYORDER_BL _SZZYORDER_BL = new WX_SZZYORDER_BL();
B_Audit_Items_BL b_Audit_Items_bl = new B_Audit_Items_BL();
List<string> orderstatus = new List<string> { "220", "205", "80", "90" };
var sql = $"SELECT dep.title,con.deptid,dep.campainid ,con.ctime,con.price From dncmspromotion.channelconsumetotaldept con LEFT JOIN `dncmsbase`.`deptment` dep on dep.id = con.deptid where con.ctime>='{startDate}' and con.ctime<'{endDay}'";
var ds = MySqlDbHelper.DataQueray(ConStringHelper.UserCenterConn, CommandType.Text, sql);
List<AuditResultQuery.depConsume> depConsumes = ds.Tables[0].ToList<AuditResultQuery.depConsume>();
var depConsumesGroup = depConsumes.GroupBy(d => d.campainid);
List<CashFlow.CashFlowQuery> cashFlowQueriesTempGroup = new List<CashFlow.CashFlowQuery>();
foreach (var item in depConsumesGroup)
{
var b_Audit_Items = b_Audit_Items_bl.GetAudit_ItemsFromChannel(item.Key);
foreach (var b_Audit_Item in b_Audit_Items)
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
// Day = day.ToString("yyyy-MM-dd"),
itemId = b_Audit_Item.Id,
item = b_Audit_Item.Item,
DepConsume = item.Where(d => d.ctime == day.Date).Sum(d=>d.price),
monDepConsume = item.Sum(d => d.price)
};
cashFlowQueriesTempGroup.Add(cashFlowQuery);
}
}
Dictionary<int, CashFlow.CashFlowQuery> cashFlowQueries = new Dictionary<int, CashFlow.CashFlowQuery>();
foreach (var item in cashFlowQueriesTempGroup.GroupBy(d => new { d.itemId, d.item }))
{
var cashFlowQuery = new CashFlow.CashFlowQuery
{
itemId = item.Key.itemId,
item = item.Key.item,
DepConsume = Math.Round( item.Sum(d => d.DepConsume),2),
monDepConsume = Math.Round(item.Sum(d => d.monDepConsume),2)
};
cashFlowQueries.Add(cashFlowQuery.itemId, cashFlowQuery);
}
return cashFlowQueries;
}
}
}