Commit 03100caf by zhouminghui

subject code

parent c03844dc
namespace Bailun.DC.Models.Dtos.Stock
using System;
namespace Bailun.DC.Models.Dtos.Stock
{
/// <summary>
/// 存货统计
......@@ -14,6 +16,7 @@
/// 总金额
/// </summary>
public decimal total_price { get; set; }
public decimal price { get; set; }
/// <summary>
/// 总数量
......@@ -24,5 +27,28 @@
/// 月末库存
/// </summary>
public int on_hand_stock { get; set; }
public string warehouse_code { get; set; }
public string warehouse_name { get; set; }
public int availabel_stock { get; set; }
public int in_bound_stock { get; set; }
public DateTime? order_creation_time { get; set; }
public string order_creation_timeStr
{
get
{
if (order_creation_time.HasValue)
{
return order_creation_time.Value.ToString("yyyy-MM-dd");
}
return "";
}
}
}
//public class GetMonthStockWeightingSummary
//{
// public dynamic purchase { get; set; }
// public GetMonthStockWeightingSummaryDto stock { get; set; }
// public decimal upper { get; set; }
//}
}
......@@ -2020,7 +2020,7 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
}
/// <summary>
/// 同步加权平均价格
/// 同步加权平均价格(首月)
/// </summary>
public void SynchMonthStockWeighting()
{
......@@ -2043,6 +2043,28 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
}
}
}
public void SynchMonthStockWeightingTwo()
{
//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");
#else
var endTime = DateTime.Now.Date;
endTime = new DateTime(endTime.Year, endTime.Month, 01).Date;
var startTime = endTime.AddMonths(-1).Date;
var upprMonth = startTime.AddMonths(-1).Date.ToString("yyyy-MM-dd");
#endif
for (int i = 0; i < 100000; i++)
{
var skuData = GetMonthStockWeightingSkuList(startTime, endTime, i, 20);//从采购单里获取基础sku数据
if (skuData.Count <= 0) break;
var uppr = GetWeightedAveragePrice(skuData, upprMonth);//获取上月加权平均数
}
}
/// <summary>
/// 写入存货计价
......@@ -2178,44 +2200,101 @@ AND platform_type = '{item.platform_type}' AND financecategoryname = '{item.fina
return data;
}
}
/// <summary>
/// 采购单和时点库存明细
/// </summary>
/// <param name="sku"></param>
/// <param name="month"></param>
/// <returns></returns>
public object GetMonthStockWeightingDetail(string sku, string month)
{
var sqlStock = BuildMonthStockSql(sku, month,out DynamicParameters sqlStockParam);
var purchase = GetMonthPurchaseDetail(sku, month);
var stock = SimpleCRUD.Query<GetMonthStockWeightingSummaryDto>(sqlStock, sqlStockParam, GlobalConfig.ConnectionString).ToList();
return (purchase, stock.Count > 0 ? new List<GetMonthStockWeightingSummaryDto> { stock.FirstOrDefault() } : new List<GetMonthStockWeightingSummaryDto>());
}
/// <summary>
/// 月采购单
/// </summary>
/// <param name="sku"></param>
/// <param name="month"></param>
/// <returns></returns>
public object GetMonthPurchaseDetail(string sku, string month)
{
var sqlPurchase = @"SELECT t1.purchase_id,t1.sku_name,t1.bailun_sku, t1.count,t2.price,t1.create_time,(t1.count*t2.price) total_price FROM dc_base_purchase_inbound AS t1
INNER JOIN dc_base_purchase AS t2 ON t2.purchase_id = t1.purchase_id AND t2.bailun_sku = t1.bailun_sku
WHERE t1.bailun_sku = @sku AND DATE(t1.create_time)>= @start AND DATE(t1.create_time)< @end
WHERE t1.bailun_sku = @sku AND t1.create_time >= @start AND t1.create_time < @end
AND t1.`status` = 1";
var sqlStock = @"SELECT temp.bailun_sku,create_time,
var sqlPurchaseParam = new DynamicParameters();
sqlPurchaseParam.Add("sku", sku);
var time = Convert.ToDateTime(month);
var timeEnd = time.AddMonths(1);
sqlPurchaseParam.Add("start", time);
sqlPurchaseParam.Add("end", timeEnd);
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(
SELECT t1.bailun_sku,t2.price,SUM(t1.count) AS total_count FROM dc_base_purchase_inbound AS t1
INNER JOIN dc_base_purchase AS t2 ON t2.purchase_id = t1.purchase_id AND t2.bailun_sku = t1.bailun_sku
WHERE t1.bailun_sku = @sku AND t1.create_time >= @start AND t1.create_time < @end
AND t1.`status` = 1 GROUP BY t1.bailun_sku,t2.price) AS temp GROUP BY temp.bailun_sku;";
var sqlStock = BuildMonthStockSql(sku, month, out DynamicParameters sqlStockParam);
var purchaseParam = new DynamicParameters();
var time = Convert.ToDateTime(month);
var timeEnd = time.AddMonths(1);
purchaseParam.Add("start", time);
purchaseParam.Add("end", timeEnd);
purchaseParam.Add("sku", sku);
var purchase = SimpleCRUD.Query<dynamic>(purchaseSql, purchaseParam, GlobalConfig.ConnectionString).ToList();
var stock = SimpleCRUD.Query<GetMonthStockWeightingSummaryDto>(sqlStock, sqlStockParam, GlobalConfig.ConnectionString).ToList();
var upperSql = $"select weighted_average_price FROM dc_month_stock_weighting where weighted_month = '{time.AddMonths(-1).ToString("yyyy-MM")}' and bailun_sku = '{sku}' ";
var upper = SimpleCRUD.Query<decimal>(upperSql, null, GlobalConfig.ConnectionString).FirstOrDefault();
return (purchase, stock, upper);
}
public List<(string,decimal)> GetWeightedAveragePrice(List<string> sku,string month)
{
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();
return data;
}
private string BuildMonthStockSql(string sku, string month, out DynamicParameters param)
{
var sqlStock = @"SELECT temp.bailun_sku,temp.price,
warehouse_code,warehouse_name,availabel_stock,in_bound_stock,order_creation_time,
CASE WHEN stock_flow.on_hand_stock*temp.price>0 THEN stock_flow.on_hand_stock*temp.price ELSE 0 END AS total_price,
CASE WHEN stock_flow.on_hand_stock>0 THEN stock_flow.on_hand_stock ELSE 0 END AS on_hand_stock
FROM(SELECT t1.bailun_sku,t1.count,t2.price,t1.create_time FROM dc_base_purchase_inbound AS t1
INNER JOIN dc_base_purchase AS t2 ON t2.purchase_id = t1.purchase_id AND t2.bailun_sku = t1.bailun_sku
WHERE t1.create_time >= @purchasestart AND t1.create_time < @purchaseend and t1.`status` = 1 AND t1.bailun_sku = @sku1 ) AS temp
LEFT JOIN(
SELECT bailun_sku, SUM(on_hand_stock) on_hand_stock FROM(
SELECT bailun_sku, on_hand_stock
SELECT bailun_sku, on_hand_stock,
warehouse_code,warehouse_name,availabel_stock,in_bound_stock,order_creation_time
FROM dc_base_wms_stock_flow WHERE 1 = 1 AND order_creation_time >= @stockstart and order_creation_time < @stockend AND warehouse_code IN('GZBLZZG', 'GZBLWH')
and bailun_sku = @sku2
ORDER BY order_creation_time DESC limit 1 )AS temp
ORDER BY order_creation_time DESC limit 1
)AS stock_flow ON stock_flow.bailun_sku = temp.bailun_sku order by create_time desc limit 1";
var sqlPurchaseParam = new DynamicParameters();
var sqlStockParam = new DynamicParameters();
sqlPurchaseParam.Add("sku", sku);
sqlStockParam.Add("sku1", sku);
sqlStockParam.Add("sku2", sku);
param = new DynamicParameters();
var time = Convert.ToDateTime(month);
var timeEnd = time.AddMonths(1);
//var timeLast = time.AddDays(-1);
sqlPurchaseParam.Add("start", time);
sqlPurchaseParam.Add("end", timeEnd);
var stockdate = time.AddMonths(-1);
sqlStockParam.Add("purchasestart", stockdate);
sqlStockParam.Add("purchaseend", time);
sqlStockParam.Add("stockstart", stockdate);
sqlStockParam.Add("stockend", time);
var purchase = SimpleCRUD.Query<dynamic>(sqlPurchase, sqlPurchaseParam, GlobalConfig.ConnectionString).ToList();
var stock = SimpleCRUD.Query<GetMonthStockWeightingSummaryDto>(sqlStock, sqlStockParam, GlobalConfig.ConnectionString).ToList();
//var stock = GetMonthEndInventory(new List<string> { sku }, timeLast);
return (purchase, stock.Count > 0 ? new List<GetMonthStockWeightingSummaryDto> { stock.FirstOrDefault() } : new List<GetMonthStockWeightingSummaryDto>());
var timeStart = time.AddMonths(-1);
param.Add("sku1", sku);
param.Add("sku2", sku);
param.Add("purchasestart", timeStart);
param.Add("purchaseend", time);
param.Add("stockstart", timeStart);
param.Add("stockend", time);
return sqlStock;
}
#endregion
}
......
......@@ -671,6 +671,14 @@ namespace Bailun.DC.WebApi.Controllers
[HttpGet("getMonthStockWeightingDetail")]
public object GetMonthStockWeightingDetail(string sku, string month)
=> new FinanceService().GetMonthStockWeightingDetail(sku, month);
[HttpGet("getMonthStockWeightingSummary")]
public object GetMonthStockWeightingSummary(string sku, string month)
=> new FinanceService().GetMonthStockWeightingSummary(sku, month);
[HttpGet("getMonthPurchaseDetail")]
public object GetMonthPurchaseDetail(string sku, string month)
=> new FinanceService().GetMonthPurchaseDetail(sku, month);
#endregion
[HttpGet("GetTest")]
public void GetTest()
......
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