Commit b71aa40e by zhouminghui

fix

parent 17169819
...@@ -29,5 +29,6 @@ namespace Bailun.DC.Models.Dtos.Finance ...@@ -29,5 +29,6 @@ namespace Bailun.DC.Models.Dtos.Finance
/// 0付现 1成本 /// 0付现 1成本
/// </summary> /// </summary>
public int Flag { get; set; } public int Flag { get; set; }
public string[] PaymentTime { get; set; }
} }
} }
...@@ -45,6 +45,14 @@ namespace Bailun.DC.Models.Dtos.Stock ...@@ -45,6 +45,14 @@ namespace Bailun.DC.Models.Dtos.Stock
} }
} }
} }
public class AveragePrice
{
public string bailun_sku { get; set; }
/// <summary>
/// 加权平均价
/// </summary>
public decimal weighted_average_price { get; set; }
}
//public class GetMonthStockWeightingSummary //public class GetMonthStockWeightingSummary
//{ //{
// public dynamic purchase { get; set; } // public dynamic purchase { get; set; }
......
...@@ -11,6 +11,7 @@ namespace Bailun.DC.Models.WebApiModels ...@@ -11,6 +11,7 @@ namespace Bailun.DC.Models.WebApiModels
public string Site { get; set; } public string Site { get; set; }
public string[] BillTime { get; set; } public string[] BillTime { get; set; }
public string BillMonth { get; set; } public string BillMonth { get; set; }
public string DataCol { get; set; }
} }
public class AccountingSubjectOptionsData public class AccountingSubjectOptionsData
{ {
......
...@@ -19,6 +19,7 @@ namespace Bailun.DC.Models.WebApiModels ...@@ -19,6 +19,7 @@ namespace Bailun.DC.Models.WebApiModels
public string DatacenterCol { get; set; } public string DatacenterCol { get; set; }
public string Currency { get; set; } public string Currency { get; set; }
public string EbayCurrency { get; set; }
public string ExchangeRate { get; set; } public string ExchangeRate { get; set; }
public decimal? AmountValRmb { get; set; } public decimal? AmountValRmb { get; set; }
public string Month { get; set; } public string Month { get; set; }
......
...@@ -209,8 +209,8 @@ or (s1.is_lend = 2 and s1.lend_balance > 0) or (s1.is_lend = 2 and s1.cost_form ...@@ -209,8 +209,8 @@ or (s1.is_lend = 2 and s1.lend_balance > 0) or (s1.is_lend = 2 and s1.cost_form
and s1.pay_time >= @PaymentTimeStart and s1.pay_time < @PaymentTimeEnd and s1.pay_time >= @PaymentTimeStart and s1.pay_time < @PaymentTimeEnd
and s2.company_type = @CorporateEntity "; and s2.company_type = @CorporateEntity ";
var para = new DynamicParameters(); var para = new DynamicParameters();
para.Add("PaymentTimeStart", input.PaymentTimeStart.Date); para.Add("PaymentTimeStart", Convert.ToDateTime(input.PaymentTime[0]).Date);
para.Add("PaymentTimeEnd", input.PaymentTimeEnd.AddDays(1).Date); para.Add("PaymentTimeEnd", Convert.ToDateTime(input.PaymentTime[1]).AddDays(1).Date);
para.Add("CorporateEntity", input.CorporateEntity); para.Add("CorporateEntity", input.CorporateEntity);
if (!string.IsNullOrWhiteSpace(input.CompanyName) if (!string.IsNullOrWhiteSpace(input.CompanyName)
&& !string.IsNullOrWhiteSpace(input.FeeType)) && !string.IsNullOrWhiteSpace(input.FeeType))
...@@ -225,6 +225,7 @@ and s2.company_type = @CorporateEntity "; ...@@ -225,6 +225,7 @@ and s2.company_type = @CorporateEntity ";
para.Add("offset", (input.PageIndex - 1) * input.PageNumber); para.Add("offset", (input.PageIndex - 1) * input.PageNumber);
} }
} }
sql += " order by s1.pay_time";
var data = SimpleCRUD.Query<ManagementCost>(sql, para, GlobalConfig.ConnectionString).ToList(); var data = SimpleCRUD.Query<ManagementCost>(sql, para, GlobalConfig.ConnectionString).ToList();
foreach (var item in data) foreach (var item in data)
{ {
...@@ -366,8 +367,8 @@ SELECT company_name FROM dc_base_finance_company WHERE company_type = @companyTy ...@@ -366,8 +367,8 @@ SELECT company_name FROM dc_base_finance_company WHERE company_type = @companyTy
) and s2.pay_time >= @paytimeStrat ) and s2.pay_time >= @paytimeStrat
and s2.pay_time < @paytimeEnd "; and s2.pay_time < @paytimeEnd ";
var para = new DynamicParameters(); var para = new DynamicParameters();
para.Add("paytimeStrat", input.PaymentTimeStart.Date); para.Add("paytimeStrat", Convert.ToDateTime(input.PaymentTime[0]).Date);
para.Add("paytimeEnd", input.PaymentTimeEnd.AddDays(1).Date); para.Add("paytimeEnd", Convert.ToDateTime(input.PaymentTime[1]).AddDays(1).Date);
para.Add("companyType", input.CorporateEntity); para.Add("companyType", input.CorporateEntity);
if (input.IsStatistics.HasValue) if (input.IsStatistics.HasValue)
{ {
...@@ -382,6 +383,7 @@ and s1.management_cost_name = @managementcostname"; ...@@ -382,6 +383,7 @@ and s1.management_cost_name = @managementcostname";
para.Add("typename", input.FeeType); para.Add("typename", input.FeeType);
para.Add("managementcostname", input.CompanyName); para.Add("managementcostname", input.CompanyName);
} }
sql += " order by s2.pay_time";
var data = SimpleCRUD.Query<ManagementCost>(sql, para, GlobalConfig.ConnectionString).ToList(); var data = SimpleCRUD.Query<ManagementCost>(sql, para, GlobalConfig.ConnectionString).ToList();
data.ForEach((item) => data.ForEach((item) =>
{ {
...@@ -907,7 +909,7 @@ WHERE s1.month = @month "); ...@@ -907,7 +909,7 @@ WHERE s1.month = @month ");
sql.Append(@"SELECT s1.platform AS PlatForm,s1.website AS WebSite,s1.orderno AS Orderno, sql.Append(@"SELECT s1.platform AS PlatForm,s1.website AS WebSite,s1.orderno AS Orderno,
s1.datatime AS DataTime,s1.amountval AS AmountVal, s1.datatime AS DataTime,s1.amountval AS AmountVal,
s2.feetype AS FeeType,s2.subjectcode AS Subjectcode,s2.projectcode AS ProjectCode, s2.feetype AS FeeType,s2.subjectcode AS Subjectcode,s2.projectcode AS ProjectCode,
s2.financecategory AS FinanceCategory,s2.datacenter_col AS DatacenterCol,s2.currency AS Currency, s2.financecategory AS FinanceCategory,s2.datacenter_col AS DatacenterCol,s2.currency AS Currency,s1.currency AS EbayCurrency,
s1.exchange_rate AS ExchangeRate,s1.amountval_rmb AS AmountValRmb,s1.month AS Month s1.exchange_rate AS ExchangeRate,s1.amountval_rmb AS AmountValRmb,s1.month AS Month
from order_fee_value_amazon s1 from order_fee_value_amazon s1
JOIN order_fee_config s2 JOIN order_fee_config s2
...@@ -1172,12 +1174,12 @@ AND financecategoryname LIKE '{financecategory.Replace("产品", "")}%' "; ...@@ -1172,12 +1174,12 @@ AND financecategoryname LIKE '{financecategory.Replace("产品", "")}%' ";
var result = new PageResult<List<MonthPlatformProfitDto>>(); var result = new PageResult<List<MonthPlatformProfitDto>>();
var pageData = new List<MonthPlatformProfitDto>(); var pageData = new List<MonthPlatformProfitDto>();
var sumData = new MonthPlatformProfitDto(); var sumData = new MonthPlatformProfitDto();
tasks.Add(Task.Factory.StartNew(() => tasks.Add(Task.Run(() =>
{ {
var sql = BuildAccountingSubjectFlowSql(query, out DynamicParameters param); var sql = BuildAccountingSubjectFlowSql(query, out DynamicParameters param);
pageData = SimpleCRUD.Query<MonthPlatformProfitDto>(sql, param, GlobalConfig.ConnectionString_DW).ToList(); pageData = SimpleCRUD.Query<MonthPlatformProfitDto>(sql, param, GlobalConfig.ConnectionString_DW).ToList();
})); }));
tasks.Add(Task.Factory.StartNew(() => tasks.Add(Task.Run(() =>
{ {
var sqlSum = BuildAccountingSubjectFlowSql(query, out DynamicParameters paramSum, true); var sqlSum = BuildAccountingSubjectFlowSql(query, out DynamicParameters paramSum, true);
sumData = SimpleCRUD.Query<MonthPlatformProfitDto>(sqlSum, paramSum, GlobalConfig.ConnectionString_DW).FirstOrDefault(); sumData = SimpleCRUD.Query<MonthPlatformProfitDto>(sqlSum, paramSum, GlobalConfig.ConnectionString_DW).FirstOrDefault();
...@@ -1199,7 +1201,7 @@ AND financecategoryname LIKE '{financecategory.Replace("产品", "")}%' "; ...@@ -1199,7 +1201,7 @@ AND financecategoryname LIKE '{financecategory.Replace("产品", "")}%' ";
sql.Append(@"select t1.platform AS PlatForm,t1.website AS WebSite,t1.orderno AS Orderno, sql.Append(@"select t1.platform AS PlatForm,t1.website AS WebSite,t1.orderno AS Orderno,
t1.datatime AS DataTime,t1.amountval AS AmountVal, t1.datatime AS DataTime,t1.amountval AS AmountVal,
t2.feetype AS FeeType,t2.subjectcode AS Subjectcode,t2.projectcode AS ProjectCode, t2.feetype AS FeeType,t2.subjectcode AS Subjectcode,t2.projectcode AS ProjectCode,
t2.financecategory AS FinanceCategory,t2.datacenter_col AS DatacenterCol,t2.currency AS Currency, t2.financecategory AS FinanceCategory,t2.datacenter_col AS DatacenterCol,t2.currency AS Currency,t1.currency AS EbayCurrency,
t1.exchange_rate AS ExchangeRate,t1.amountval_rmb AS AmountValRmb,t1.month AS Month from order_fee_value_amazon t1 t1.exchange_rate AS ExchangeRate,t1.amountval_rmb AS AmountValRmb,t1.month AS Month from order_fee_value_amazon t1
join order_fee_config t2 on t1.order_fee_config_id=t2.id "); join order_fee_config t2 on t1.order_fee_config_id=t2.id ");
} }
...@@ -1226,6 +1228,11 @@ t1.exchange_rate AS ExchangeRate,t1.amountval_rmb AS AmountValRmb,t1.month AS Mo ...@@ -1226,6 +1228,11 @@ t1.exchange_rate AS ExchangeRate,t1.amountval_rmb AS AmountValRmb,t1.month AS Mo
sql.Append(" and t1.month= @month "); sql.Append(" and t1.month= @month ");
sqlparam.Add("month", query.BillMonth); sqlparam.Add("month", query.BillMonth);
} }
if (!string.IsNullOrWhiteSpace(query.DataCol))
{
sql.Append(" and t2.datacenter_col= @datacenter_col ");
sqlparam.Add("datacenter_col", query.DataCol);
}
if (!string.IsNullOrEmpty(query.PlatForm)) if (!string.IsNullOrEmpty(query.PlatForm))
{ {
...@@ -2047,10 +2054,9 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina ...@@ -2047,10 +2054,9 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
{ {
//todo:获取期初库存、上月加权数、本月入库 //todo:获取期初库存、上月加权数、本月入库
#if DEBUG #if DEBUG
var startTime = Convert.ToDateTime("2021-08-01"); var startTime = Convert.ToDateTime("2021-08-01");
var endTime = Convert.ToDateTime("2021-09-01"); var endTime = Convert.ToDateTime("2021-09-01");
var upprMonth = startTime.AddMonths(-1).Date.ToString("yyyy-MM-dd"); var upprMonth = startTime.AddMonths(-1).Date.ToString("yyyy-MM");
#else #else
var endTime = DateTime.Now.Date; var endTime = DateTime.Now.Date;
endTime = new DateTime(endTime.Year, endTime.Month, 01).Date; endTime = new DateTime(endTime.Year, endTime.Month, 01).Date;
...@@ -2058,11 +2064,23 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina ...@@ -2058,11 +2064,23 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var upprMonth = startTime.AddMonths(-1).Date.ToString("yyyy-MM-dd"); var upprMonth = startTime.AddMonths(-1).Date.ToString("yyyy-MM-dd");
#endif #endif
for (int i = 0; i < 100000; i++) for (int i = 1; i < 100000; i++)
{ {
var skuData = GetMonthStockWeightingSkuList(startTime, endTime, i, 20);//从采购单里获取基础sku数据 var skuData = GetMonthStockWeightingSkuList(startTime, endTime, i, 20);//从采购单里获取基础sku数据
if (skuData.Count <= 0) break; if (skuData.Count <= 0) break;
var uppr = GetWeightedAveragePrice(skuData, upprMonth);//获取上月加权平均数 var purchaseData = GetThisMonthStockWeightingSummary(startTime, endTime, skuData);//获取本期入库数量及单价
if (purchaseData.Count <= 0) continue;
var uppr = GetWeightedAveragePrice(skuData, upprMonth);//获取上月结存单价(加权平均数)
var stock = GetMonthEndInventory(skuData, endTime);//获取上期结存数量(期末库存)
//todo:首月计算方式期初库存*采购报价+每次采购用采购数量*采购金额之和/总数量(期初库存、采购数量)
//todo:(上期结存数量×上期结存单价+本期入库数量×本期入库单价)÷(上期结存数量+本期入库数量)=加权平均数。
foreach (var subItem in purchaseData)
{
var stocks = stock.FirstOrDefault(x => x.bailun_sku == subItem.bailun_sku) ?? new GetMonthStockWeightingSummaryDto();
var upprs = uppr.FirstOrDefault(x => x.bailun_sku == subItem.bailun_sku);//这里会出现新采购的sku是没有上月库存的
var price = ((Convert.ToDecimal(stocks.on_hand_stock) * (upprs != null ? upprs.weighted_average_price : 0)) + subItem.total_price) / (stocks.on_hand_stock + subItem.total_count);
var isSuccess = AddAddMonthStockWeighting(startTime, subItem, stocks, price);
}
} }
} }
...@@ -2073,7 +2091,7 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina ...@@ -2073,7 +2091,7 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
/// <param name="purchase"></param> /// <param name="purchase"></param>
/// <param name="lastStock"></param> /// <param name="lastStock"></param>
/// <returns></returns> /// <returns></returns>
private bool AddAddMonthStockWeighting(DateTime month, GetMonthStockWeightingSummaryDto purchase, GetMonthStockWeightingSummaryDto lastStock) private bool AddAddMonthStockWeighting(DateTime month, GetMonthStockWeightingSummaryDto purchase, GetMonthStockWeightingSummaryDto lastStock, decimal? price = null)
{ {
string sql = @" string sql = @"
INSERT INTO `dc_month_stock_weighting` (`bailun_sku`, `weighted_month`, `weighted_average_price`, INSERT INTO `dc_month_stock_weighting` (`bailun_sku`, `weighted_month`, `weighted_average_price`,
...@@ -2085,7 +2103,7 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina ...@@ -2085,7 +2103,7 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var model = new dc_month_stock_weighting var model = new dc_month_stock_weighting
{ {
bailun_sku = purchase.bailun_sku, bailun_sku = purchase.bailun_sku,
weighted_average_price = Math.Round((purchase.total_price + lastStock.total_price) / (purchase.total_count + lastStock.on_hand_stock), 2), weighted_average_price = price.HasValue ? Math.Round(price.Value, 2) : Math.Round((purchase.total_price + lastStock.total_price) / (purchase.total_count + lastStock.on_hand_stock), 2),
create_time = DateTime.Now, create_time = DateTime.Now,
month_beginning_stock = lastStock.on_hand_stock, month_beginning_stock = lastStock.on_hand_stock,
weighted_month = month.ToString("yyyy-MM") weighted_month = month.ToString("yyyy-MM")
...@@ -2235,12 +2253,6 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina ...@@ -2235,12 +2253,6 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var purchase = SimpleCRUD.Query<dynamic>(sqlPurchase, sqlPurchaseParam, GlobalConfig.ConnectionString).ToList(); var purchase = SimpleCRUD.Query<dynamic>(sqlPurchase, sqlPurchaseParam, GlobalConfig.ConnectionString).ToList();
return purchase; return purchase;
} }
/// <summary>
/// 月期末库存
/// </summary>
/// <param name="sku"></param>
/// <param name="month"></param>
/// <returns></returns>
public object GetMonthStockWeightingSummary(string sku, string month) public object GetMonthStockWeightingSummary(string sku, string month)
{ {
var purchaseSql = @"SELECT temp.bailun_sku,SUM(temp.total_count*temp.price)AS total_price,SUM(temp.total_count) AS total_count,avg(temp.price) avg_price FROM( var purchaseSql = @"SELECT temp.bailun_sku,SUM(temp.total_count*temp.price)AS total_price,SUM(temp.total_count) AS total_count,avg(temp.price) avg_price FROM(
...@@ -2261,11 +2273,17 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina ...@@ -2261,11 +2273,17 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var upper = SimpleCRUD.Query<decimal>(upperSql, null, GlobalConfig.ConnectionString).FirstOrDefault(); var upper = SimpleCRUD.Query<decimal>(upperSql, null, GlobalConfig.ConnectionString).FirstOrDefault();
return (purchase, stock, upper); return (purchase, stock, upper);
} }
public List<(string,decimal)> GetWeightedAveragePrice(List<string> sku,string month) /// <summary>
/// 月加权平均数
/// </summary>
/// <param name="sku"></param>
/// <param name="month"></param>
/// <returns></returns>
public List<AveragePrice> GetWeightedAveragePrice(List<string> sku,string month)
{ {
var skuStr = $"'({string.Join("','", sku)})'"; var skuStr = $"('{string.Join("','", sku)}')";
var sql = $"select bailun_sku,weighted_average_price FROM dc_month_stock_weighting where weighted_month = '{month}' and bailun_sku in {skuStr} "; var sql = $"select bailun_sku,weighted_average_price FROM dc_month_stock_weighting where weighted_month = '{month}' and bailun_sku in {skuStr} ";
var data = SimpleCRUD.Query<(string, decimal)>(sql, null, GlobalConfig.ConnectionString).ToList(); var data = SimpleCRUD.Query<AveragePrice>(sql, null, GlobalConfig.ConnectionString).ToList();
return data; return data;
} }
private string BuildMonthStockSql(string sku, string month, out DynamicParameters param) private string BuildMonthStockSql(string sku, string month, out DynamicParameters param)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment