Commit b71aa40e by zhouminghui

fix

parent 17169819
......@@ -29,5 +29,6 @@ namespace Bailun.DC.Models.Dtos.Finance
/// 0付现 1成本
/// </summary>
public int Flag { get; set; }
public string[] PaymentTime { get; set; }
}
}
......@@ -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 dynamic purchase { get; set; }
......
......@@ -11,6 +11,7 @@ namespace Bailun.DC.Models.WebApiModels
public string Site { get; set; }
public string[] BillTime { get; set; }
public string BillMonth { get; set; }
public string DataCol { get; set; }
}
public class AccountingSubjectOptionsData
{
......
......@@ -19,6 +19,7 @@ namespace Bailun.DC.Models.WebApiModels
public string DatacenterCol { get; set; }
public string Currency { get; set; }
public string EbayCurrency { get; set; }
public string ExchangeRate { get; set; }
public decimal? AmountValRmb { 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
and s1.pay_time >= @PaymentTimeStart and s1.pay_time < @PaymentTimeEnd
and s2.company_type = @CorporateEntity ";
var para = new DynamicParameters();
para.Add("PaymentTimeStart", input.PaymentTimeStart.Date);
para.Add("PaymentTimeEnd", input.PaymentTimeEnd.AddDays(1).Date);
para.Add("PaymentTimeStart", Convert.ToDateTime(input.PaymentTime[0]).Date);
para.Add("PaymentTimeEnd", Convert.ToDateTime(input.PaymentTime[1]).AddDays(1).Date);
para.Add("CorporateEntity", input.CorporateEntity);
if (!string.IsNullOrWhiteSpace(input.CompanyName)
&& !string.IsNullOrWhiteSpace(input.FeeType))
......@@ -225,6 +225,7 @@ and s2.company_type = @CorporateEntity ";
para.Add("offset", (input.PageIndex - 1) * input.PageNumber);
}
}
sql += " order by s1.pay_time";
var data = SimpleCRUD.Query<ManagementCost>(sql, para, GlobalConfig.ConnectionString).ToList();
foreach (var item in data)
{
......@@ -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 < @paytimeEnd ";
var para = new DynamicParameters();
para.Add("paytimeStrat", input.PaymentTimeStart.Date);
para.Add("paytimeEnd", input.PaymentTimeEnd.AddDays(1).Date);
para.Add("paytimeStrat", Convert.ToDateTime(input.PaymentTime[0]).Date);
para.Add("paytimeEnd", Convert.ToDateTime(input.PaymentTime[1]).AddDays(1).Date);
para.Add("companyType", input.CorporateEntity);
if (input.IsStatistics.HasValue)
{
......@@ -382,6 +383,7 @@ and s1.management_cost_name = @managementcostname";
para.Add("typename", input.FeeType);
para.Add("managementcostname", input.CompanyName);
}
sql += " order by s2.pay_time";
var data = SimpleCRUD.Query<ManagementCost>(sql, para, GlobalConfig.ConnectionString).ToList();
data.ForEach((item) =>
{
......@@ -907,7 +909,7 @@ WHERE s1.month = @month ");
sql.Append(@"SELECT s1.platform AS PlatForm,s1.website AS WebSite,s1.orderno AS Orderno,
s1.datatime AS DataTime,s1.amountval AS AmountVal,
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
from order_fee_value_amazon s1
JOIN order_fee_config s2
......@@ -1172,12 +1174,12 @@ AND financecategoryname LIKE '{financecategory.Replace("产品", "")}%' ";
var result = new PageResult<List<MonthPlatformProfitDto>>();
var pageData = new List<MonthPlatformProfitDto>();
var sumData = new MonthPlatformProfitDto();
tasks.Add(Task.Factory.StartNew(() =>
tasks.Add(Task.Run(() =>
{
var sql = BuildAccountingSubjectFlowSql(query, out DynamicParameters param);
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);
sumData = SimpleCRUD.Query<MonthPlatformProfitDto>(sqlSum, paramSum, GlobalConfig.ConnectionString_DW).FirstOrDefault();
......@@ -1199,7 +1201,7 @@ AND financecategoryname LIKE '{financecategory.Replace("产品", "")}%' ";
sql.Append(@"select t1.platform AS PlatForm,t1.website AS WebSite,t1.orderno AS Orderno,
t1.datatime AS DataTime,t1.amountval AS AmountVal,
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
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
sql.Append(" and t1.month= @month ");
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))
{
......@@ -2047,10 +2054,9 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
{
//todo:获取期初库存、上月加权数、本月入库
#if DEBUG
var startTime = Convert.ToDateTime("2021-08-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
var endTime = DateTime.Now.Date;
endTime = new DateTime(endTime.Year, endTime.Month, 01).Date;
......@@ -2058,11 +2064,23 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var upprMonth = startTime.AddMonths(-1).Date.ToString("yyyy-MM-dd");
#endif
for (int i = 0; i < 100000; i++)
for (int i = 1; i < 100000; i++)
{
var skuData = GetMonthStockWeightingSkuList(startTime, endTime, i, 20);//从采购单里获取基础sku数据
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
/// <param name="purchase"></param>
/// <param name="lastStock"></param>
/// <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 = @"
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
var model = new dc_month_stock_weighting
{
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,
month_beginning_stock = lastStock.on_hand_stock,
weighted_month = month.ToString("yyyy-MM")
......@@ -2235,12 +2253,6 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var purchase = SimpleCRUD.Query<dynamic>(sqlPurchase, sqlPurchaseParam, GlobalConfig.ConnectionString).ToList();
return purchase;
}
/// <summary>
/// 月期末库存
/// </summary>
/// <param name="sku"></param>
/// <param name="month"></param>
/// <returns></returns>
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(
......@@ -2261,11 +2273,17 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
var upper = SimpleCRUD.Query<decimal>(upperSql, null, GlobalConfig.ConnectionString).FirstOrDefault();
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 data = SimpleCRUD.Query<(string, decimal)>(sql, null, GlobalConfig.ConnectionString).ToList();
var data = SimpleCRUD.Query<AveragePrice>(sql, null, GlobalConfig.ConnectionString).ToList();
return data;
}
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