Commit 7e46bb24 by 泽锋 李

利润计算新增计算过程

parent 8056813c
...@@ -791,7 +791,7 @@ from dc_auto_turnover as dat ...@@ -791,7 +791,7 @@ from dc_auto_turnover as dat
parameters.Add("bailun_sku", sku); parameters.Add("bailun_sku", sku);
parameters.Add("warehouse_code", wCode); parameters.Add("warehouse_code", wCode);
return _connection.QueryFirst<Models.dc_auto_turnover>(" select * from dc_auto_turnover where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", parameters); return _connection.QueryFirst<Models.dc_auto_turnover>(" select * from dc_auto_turnover where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", parameters);
} }
public static Models.dc_auto_turnover GetModelAir(string sku, string wCode) public static Models.dc_auto_turnover GetModelAir(string sku, string wCode)
{ {
DynamicParameters parameters = new DynamicParameters(); DynamicParameters parameters = new DynamicParameters();
...@@ -1078,12 +1078,12 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1078,12 +1078,12 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
update dc_base_forecast_history as t1 update dc_base_forecast_history as t1
left join dc_base_stock as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code left join dc_base_stock as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
set t1.usable_stock = t2.usable_stock set t1.usable_stock = t2.usable_stock
where t1.date>=@btime ", new { btime = DateTime.Now.ToDayHome()}, commandTimeout: 0); where t1.date>=@btime ", new { btime = DateTime.Now.ToDayHome() }, commandTimeout: 0);
_connection.Execute(@" set session transaction isolation level read uncommitted; _connection.Execute(@" set session transaction isolation level read uncommitted;
update dc_base_forecast_history as t1 update dc_base_forecast_history as t1
left join dc_mid_transit as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code left join dc_mid_transit as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
set t1.quantity_transfer = t2.quantity_transfer,t1.quantity_purchase = t2.quantity_purchase set t1.quantity_transfer = t2.quantity_transfer,t1.quantity_purchase = t2.quantity_purchase
where t1.date>=@btime ", new { btime = DateTime.Now.ToDayHome()}, commandTimeout: 0); where t1.date>=@btime ", new { btime = DateTime.Now.ToDayHome() }, commandTimeout: 0);
_connection.Execute(@" _connection.Execute(@"
...@@ -1246,14 +1246,18 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1246,14 +1246,18 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
new transfer_profit_dto{ name ="安全库存数量",days = new List<transfer_profit_dto.day_dto>()}, new transfer_profit_dto{ name ="安全库存数量",days = new List<transfer_profit_dto.day_dto>()},
new transfer_profit_dto{ name ="空运周转天数",days = new List<transfer_profit_dto.day_dto>()}, new transfer_profit_dto{ name ="空运周转天数",days = new List<transfer_profit_dto.day_dto>()},
new transfer_profit_dto{ name ="海运周转天数",days = new List<transfer_profit_dto.day_dto>()}, new transfer_profit_dto{ name ="海运周转天数",days = new List<transfer_profit_dto.day_dto>()},
new transfer_profit_dto{ name ="30天预测销量海运-实际金额汇总",days = new List<transfer_profit_dto.day_dto>()},
new transfer_profit_dto{ name ="30天预测销量空运-实际金额汇总",days = new List<transfer_profit_dto.day_dto>()},
}; };
var result = GetModel(bailun_sku, warehouse_code); var result = GetModel(bailun_sku, warehouse_code);
var result_air = GetModelAir(bailun_sku, warehouse_code); var result_air = GetModelAir(bailun_sku, warehouse_code);
var result_ocean = GetModelOcean(bailun_sku, warehouse_code); var result_ocean = GetModelOcean(bailun_sku, warehouse_code);
var base_wa = _connection.QueryFirstOrDefault<string>(" select t2.`code` from dc_base_warehouse as t1 left join dc_base_country as t2 on t1.area_name = t2.`name` where warehouse_code=@warehouse_code ", new { warehouse_code }); var base_wa = _connection.QueryFirstOrDefault<string>(" select t2.`code` from dc_base_warehouse as t1 left join dc_base_country as t2 on t1.area_name = t2.`name` where warehouse_code=@warehouse_code ", new { warehouse_code });
var dc_mid_transit_data = _connection.QueryFirstOrDefault<int?>(" select quantity_transfer+quantity_purchase from dc_mid_transit as t1 where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku, warehouse_code })??0; var dc_mid_transit_data = _connection.QueryFirstOrDefault<int?>(" select quantity_transfer+quantity_purchase from dc_mid_transit as t1 where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku, warehouse_code }) ?? 0;
var dc_stock_data = _connection.QueryFirstOrDefault<int?>(" select usable_stock from dc_base_stock as t1 where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku, warehouse_code })??0; var dc_stock_data = _connection.QueryFirstOrDefault<int?>(" select usable_stock from dc_base_stock as t1 where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku, warehouse_code }) ?? 0;
var dc_base_sku_data = _connection.QueryFirstOrDefault<dc_base_sku>(" select * from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku }); var dc_base_sku_data = _connection.QueryFirstOrDefault<dc_base_sku>(" select * from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku });
...@@ -1268,12 +1272,21 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1268,12 +1272,21 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
has_history_order = 90 has_history_order = 90
}).Where(s => s.min_freight_unit_price > 1); }).Where(s => s.min_freight_unit_price > 1);
var logoCeanData = logisticsDatas.Where(s => s.TransportType == 2).OrderBy(s => s.min_freight_unit_price).FirstOrDefault(); var logoCeanData = logisticsDatas.Where(s => s.TransportType == 2).OrderBy(s => s.min_freight_unit_price).FirstOrDefault();
modalData.freight_unit_price_ocean = logoCeanData.min_freight_unit_price.Value / (logoCeanData.min_freight_unit_weight ?? 1) * (dc_base_sku_data.weight/1000); modalData.freight_unit_price_ocean = Math.Round( logoCeanData.min_freight_unit_price.Value / (logoCeanData.min_freight_unit_weight ?? 1) * (dc_base_sku_data.weight / 1000),2);
var logoAirData = logisticsDatas.Where(s => s.TransportType == 3).OrderBy(s => s.min_freight_unit_price).FirstOrDefault(); var logoAirData = logisticsDatas.Where(s => s.TransportType == 3).OrderBy(s => s.min_freight_unit_price).FirstOrDefault();
modalData.freight_unit_price_air = logoAirData.min_freight_unit_price.Value / (logoAirData.min_freight_unit_weight ?? 1) * (dc_base_sku_data.weight/1000); modalData.freight_unit_price_air = Math.Round( logoAirData.min_freight_unit_price.Value / (logoAirData.min_freight_unit_weight ?? 1) * (dc_base_sku_data.weight / 1000),2);
var sales_details = result.sales_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToList(); var sales_details = result.sales_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToList();
var days30 = 30;
var sales30 = 0;
for (int i = 7; i < days30 + 7; i++)
{
if (sales_details.Count - 1 >= i)
{
sales30 += sales_details[i];
}
}
var advised_details = result.advised_details.ToObj<List<decimal>>(); var advised_details = result.advised_details.ToObj<List<decimal>>();
var advised_details_air = result_air.advised_details.ToObj<List<decimal>>(); var advised_details_air = result_air.advised_details.ToObj<List<decimal>>();
var advised_details_ocean = result_ocean.advised_details.ToObj<List<decimal>>(); var advised_details_ocean = result_ocean.advised_details.ToObj<List<decimal>>();
...@@ -1288,29 +1301,69 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1288,29 +1301,69 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
// 预测未来 // 预测未来
if (this_time_end >= now) if (this_time_end >= now)
{ {
modalData.freight_unit_price = _connection.QueryFirstOrDefault<decimal?>(" select freight_unit_price from dc_base_transfer_freight where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku limit 1 ", new
{
warehouse_code = result.warehouse_code,
bailun_sku = result.bailun_sku
});
datas.FirstOrDefault(s => s.name == "实际运费单价").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = modalData.freight_unit_price,
formula = $" 历史调拨单费用平均值 "
});
//30天周转数
modalData.quantity_final_advise_30 = sales30;
modalData.freight_price_30 = sales30 * modalData.freight_unit_price;
modalData.freight_price_ocean_30 = sales30 * modalData.freight_unit_price_ocean;
modalData.freight_price_air_30 = sales30 * modalData.freight_unit_price_air;
datas.FirstOrDefault(s => s.name == "30天预测销量海运-实际金额汇总").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = modalData.freight_price_ocean_30 - modalData.freight_price_30,
formula = $@" 【30天预测销量海运-实际金额汇总】 = 预测30日销量( {sales30})* ( 海运运费单价({modalData.freight_unit_price_ocean}) - 历史平均运费单价({modalData.freight_unit_price}))
<br/>海运运费单价({modalData.freight_unit_price_ocean}) = (最近90天内发过的最便宜的海运物流 {logoCeanData.Line_Name} 运费单价 {logoCeanData.min_freight_unit_price / (logoCeanData.min_freight_unit_weight ?? 1) }/kg )* 产品重量 ({dc_base_sku_data.weight / 1000} kg )
"
});
datas.FirstOrDefault(s => s.name == "30天预测销量空运-实际金额汇总").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = modalData.freight_price_air_30 - modalData.freight_price_30,
formula = $@" 【30天预测销量空运-实际金额汇总】 = 预测30日销量( {sales30})* ( 空运运费单价({modalData.freight_unit_price_air}) - 历史平均运费单价({modalData.freight_unit_price}))
<br/>空运运费单价({modalData.freight_unit_price_air}) = (最近90天内发过的最便宜的空运物流 {logoAirData.Line_Name} 运费单价 {logoAirData.min_freight_unit_price / (logoAirData.min_freight_unit_weight ?? 1) }/kg )* 产品重量 ({dc_base_sku_data.weight / 1000} kg )
"
});
datas.FirstOrDefault(s => s.name == "安全库存数量").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "安全库存数量").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = result.quantity_safe_inventory val = result.quantity_safe_inventory,
formula = " 安全库存数量 = aims 系统配置天数 * 日均销量 "
}); });
datas.FirstOrDefault(s => s.name == "空运周转天数").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "空运周转天数").days.Add(new transfer_profit_dto.day_dto
{ {
has_int = true, has_int = true,
date = this_time, date = this_time,
val = result_air.turnover_days val = result_air.turnover_days,
formula = $" 【空运周转天数】 = 供应链长度( {result_air.turnover_days} ) = 下单天数( {result_air.purchase_create_order_days} ) + 财务付款时间( {result_air.payment_before_delivery} ) + 供应商交期( {result_air.supplier_delivery} ) + 质检入库天数( {result_air.inspection_delivery} ) + 调拨启航等待天数( 0 ) + 调拨头程天数( {result_air.transfer_delivery} ) + 海外仓入库天数( {result_air.abroad_inbound_delivery} ) + 调拨打包天数( {result_air.transfer_bale_delivery} )"
}); });
datas.FirstOrDefault(s => s.name == "海运周转天数").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运周转天数").days.Add(new transfer_profit_dto.day_dto
{ {
has_int = true, has_int = true,
date = this_time, date = this_time,
val = result_ocean.turnover_days val = result_ocean.turnover_days,
formula = $" 【空运周转天数】 = 供应链长度( {result_ocean.turnover_days} ) = 下单天数( {result_ocean.purchase_create_order_days} ) + 财务付款时间( {result_ocean.payment_before_delivery} ) + 供应商交期( {result_ocean.supplier_delivery} ) + 质检入库天数( {result_ocean.inspection_delivery} ) + 调拨启航等待天数( 0 ) + 调拨头程天数( {result_ocean.transfer_delivery} ) + 海外仓入库天数( {result_ocean.abroad_inbound_delivery} ) + 调拨打包天数( {result_ocean.transfer_bale_delivery} )"
}); });
modalData.unit_price = dc_base_sku_data.unit_price; modalData.unit_price = dc_base_sku_data.unit_price;
datas.FirstOrDefault(s => s.name == "采购单价").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "采购单价").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = Math.Round( modalData.unit_price??0,1) val = Math.Round(modalData.unit_price ?? 0, 1),
formula = " 【采购单价】从产品库读取配置"
}); });
// 周转天数 * 加权日均 // 周转天数 * 加权日均
...@@ -1322,103 +1375,108 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1322,103 +1375,108 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
datas.FirstOrDefault(s => s.name == "实际建议周转数").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际建议周转数").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_advise val = modalData.quantity_final_advise,
formula =$" 【实际建议周转数】= 供应链长度预测销量({result.turnover_sales}) + 安全库存({ result.quantity_safe_inventory}) "
}); });
modalData.quantity_final_advise_amount = Math.Round( (modalData.quantity_final_advise ?? 0) * (modalData.unit_price??0),2); modalData.quantity_final_advise_amount = Math.Round((modalData.quantity_final_advise ?? 0) * (modalData.unit_price ?? 0), 2);
datas.FirstOrDefault(s => s.name == "实际建议周转金额").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际建议周转金额").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_advise_amount val = modalData.quantity_final_advise_amount,
formula = $" 【实际建议周转金额】 = 【实际建议周转数 {modalData.quantity_final_advise}】 * 【采购单价 {Math.Round(modalData.unit_price ?? 0, 1)}】"
}); });
// 在库+在途 // 在库+在途
modalData.turnover = dc_mid_transit_data+ dc_stock_data; modalData.turnover = dc_mid_transit_data + dc_stock_data;
datas.FirstOrDefault(s => s.name == "实际周转数").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际周转数").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.turnover val = modalData.turnover,
}); formula = $" 【实际周转数】 = 采购+调拨在途 ({dc_mid_transit_data}) + 在库 ({dc_stock_data}) "
modalData.freight_unit_price = _connection.QueryFirstOrDefault<decimal?>(" select freight_unit_price from dc_base_transfer_freight where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku limit 1 ", new
{
warehouse_code = result.warehouse_code,
bailun_sku = result.bailun_sku
});
datas.FirstOrDefault(s => s.name == "实际运费单价").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = modalData.freight_unit_price
}); });
modalData.freight_price = modalData.freight_unit_price * modalData.turnover; modalData.freight_price = modalData.freight_unit_price * modalData.turnover;
datas.FirstOrDefault(s => s.name == "实际周转运费").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际周转运费").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.freight_price val = modalData.freight_price,
formula =$" 【实际周转运费】 = 【平均运费单价 {modalData.freight_unit_price}】 * 【实际周转数 {modalData.turnover}】 "
}); });
// 实际建议周转运费 // 实际建议周转运费
modalData.quantity_final_advise_freight = Math.Round((modalData.quantity_final_advise ?? 0) * (modalData.freight_unit_price ?? 0), 2); ; modalData.quantity_final_advise_freight = Math.Round((modalData.quantity_final_advise ?? 0) * (modalData.freight_unit_price ?? 0), 2); ;
//实际周转金额 //实际周转金额
modalData.turnover_amount = modalData.turnover* modalData.unit_price; modalData.turnover_amount = modalData.turnover * modalData.unit_price;
modalData.quantity_final_advise_ocean = (int)Math.Round(result_ocean.turnover_sales + result_ocean.turnover_sales); modalData.quantity_final_advise_ocean = (int)Math.Round(result_ocean.turnover_sales + result_ocean.turnover_sales);
datas.FirstOrDefault(s => s.name == "海运周转数(推荐海运)").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运周转数(推荐海运)").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_advise_ocean val = modalData.quantity_final_advise_ocean,
formula =$" 【海运周转数(推荐海运)】 = 海运供应链长度预测销量({result_ocean.turnover_sales}) + 安全库存({ result_ocean.quantity_safe_inventory}) "
}); });
modalData.quantity_final_advise_ocean_amount = Math.Round( (modalData.quantity_final_advise_ocean??0) * (modalData.unit_price??0),2); modalData.quantity_final_advise_ocean_amount = Math.Round((modalData.quantity_final_advise_ocean ?? 0) * (modalData.unit_price ?? 0), 2);
datas.FirstOrDefault(s => s.name == "海运周转金额").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运周转金额").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_advise_ocean_amount val = modalData.quantity_final_advise_ocean_amount,
formula = $" 【海运周转金额】 = 【海运周转数(推荐海运){modalData.quantity_final_advise_ocean}】* 【采购单价 {modalData.unit_price}】"
}); });
modalData.freight_price_ocean = Math.Round( (modalData.quantity_final_advise_ocean??0) * modalData.freight_unit_price_ocean,2); modalData.freight_price_ocean = Math.Round((modalData.quantity_final_advise_ocean ?? 0) * modalData.freight_unit_price_ocean, 2);
datas.FirstOrDefault(s => s.name == "海运周转运费").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运周转运费").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.freight_price_ocean val = modalData.freight_price_ocean,
}); formula = $" 【海运周转运费】= 【海运周转数(推荐海运){modalData.quantity_final_advise_ocean}】* 【(最近90天内发过的最便宜的海运物流 {logoCeanData.Line_Name} 运费单价 {logoCeanData.min_freight_unit_price / (logoCeanData.min_freight_unit_weight ?? 1) }/kg )* 产品重量 ({dc_base_sku_data.weight / 1000} kg )】 "
});
modalData.quantity_final_advise_air = (int)Math.Round(result_air.turnover_sales + result_air.quantity_safe_inventory); modalData.quantity_final_advise_air = (int)Math.Round(result_air.turnover_sales + result_air.quantity_safe_inventory);
datas.FirstOrDefault(s => s.name == "空运周转数(推荐空运)").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "空运周转数(推荐空运)").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_advise_air val = modalData.quantity_final_advise_air,
formula =$" 【空运周转数(推荐空运)】 = 空运供应链长度预测销量({result_air.turnover_sales}) + 安全库存({ result_air.quantity_safe_inventory})"
}); });
modalData.quantity_final_advise_air_amount = Math.Round( modalData.quantity_final_advise_air * modalData.unit_price??0,2); modalData.quantity_final_advise_air_amount = Math.Round(modalData.quantity_final_advise_air * modalData.unit_price ?? 0, 2);
datas.FirstOrDefault(s => s.name == "空运周转金额").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "空运周转金额").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_advise_air_amount val = modalData.quantity_final_advise_air_amount,
formula = $" 【空运周转金额】 = 【空运周转数(推荐空运){modalData.quantity_final_advise_air}】* 【采购单价 {modalData.unit_price}】"
}); });
modalData.freight_price_air = Math.Round( (modalData.quantity_final_advise_air??0) * modalData.freight_unit_price_air,2); modalData.freight_price_air = Math.Round((modalData.quantity_final_advise_air ?? 0) * modalData.freight_unit_price_air, 2);
datas.FirstOrDefault(s => s.name == "空运周转运费").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "空运周转运费").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.freight_price_air val = modalData.freight_price_air,
formula = $" 【空运周转运费】= 【空运周转数(推荐空运){modalData.quantity_final_advise_air}】* 【(最近90天内发过的最便宜的海运物流 {logoAirData.Line_Name} 运费单价 {logoAirData.min_freight_unit_price / (logoAirData.min_freight_unit_weight ?? 1) }/kg )* 产品重量 ({dc_base_sku_data.weight / 1000} kg )】 "
}); });
modalData.freight_price_ocean_difference_amount = modalData.quantity_final_advise_freight - modalData.freight_price_ocean; modalData.freight_price_ocean_difference_amount = modalData.quantity_final_advise_freight - modalData.freight_price_ocean;
datas.FirstOrDefault(s => s.name == "实际-海运运费差值").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际-海运运费差值").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.freight_price_ocean_difference_amount val = modalData.freight_price_ocean_difference_amount,
formula =$"【实际-海运运费差值】= 【实际建议周转运费 {modalData.quantity_final_advise_freight }】 - 【海运周转运费 {modalData.freight_price_ocean}】"
}); });
modalData.quantity_final_ocean_difference_amount = modalData.quantity_final_advise_amount - modalData.quantity_final_advise_ocean_amount; modalData.quantity_final_ocean_difference_amount = modalData.quantity_final_advise_amount - modalData.quantity_final_advise_ocean_amount;
datas.FirstOrDefault(s => s.name == "实际-海运周转采购金额差值").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际-海运周转采购金额差值").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_ocean_difference_amount val = modalData.quantity_final_ocean_difference_amount,
formula = $"【实际-海运周转采购金额差值】= 【实际建议周转金额 {modalData.quantity_final_advise_amount }】 - 【海运周转金额 {modalData.quantity_final_advise_ocean_amount}】"
}); });
datas.FirstOrDefault(s => s.name == "差值(海运)-实际周转采购金额占比").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "差值(海运)-实际周转采购金额占比").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = (modalData.quantity_final_advise_amount ?? 0) <= 0 ? 0M : (Math.Round((modalData.quantity_final_ocean_difference_amount ?? 0) / modalData.quantity_final_advise_amount.Value, 3)) val = (modalData.quantity_final_advise_amount ?? 0) <= 0 ? 0M : (Math.Round((modalData.quantity_final_ocean_difference_amount ?? 0) / modalData.quantity_final_advise_amount.Value, 3)),
formula = $"【差值(海运)-实际周转采购金额占比】 = 【实际-海运周转采购金额差值 {modalData.quantity_final_ocean_difference_amount}】/ 【实际建议周转金额 {modalData.quantity_final_advise_amount}】 "
}); });
...@@ -1426,25 +1484,42 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1426,25 +1484,42 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
datas.FirstOrDefault(s => s.name == "实际-空运运费差值").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际-空运运费差值").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.freight_price_air_difference_amount val = modalData.freight_price_air_difference_amount,
formula = $"【实际-空运运费差值】= 【实际建议周转运费 {modalData.quantity_final_advise_freight }】 - 【空运运周转运费 {modalData.freight_price_air}】"
}); });
modalData.quantity_final_air_difference_amount = modalData.quantity_final_advise_amount - modalData.quantity_final_advise_air_amount; modalData.quantity_final_air_difference_amount = modalData.quantity_final_advise_amount - modalData.quantity_final_advise_air_amount;
datas.FirstOrDefault(s => s.name == "实际-空运周转采购金额差值").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际-空运周转采购金额差值").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final_air_difference_amount val = modalData.quantity_final_air_difference_amount,
formula = $"【实际-空运运周转采购金额差值】= 【实际建议周转金额 {modalData.quantity_final_advise_amount }】 - 【空运周转金额 {modalData.quantity_final_advise_air_amount}】"
}); });
datas.FirstOrDefault(s => s.name == "差值(空运)-实际周转采购金额占比").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "差值(空运)-实际周转采购金额占比").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = (modalData.quantity_final_advise_amount ?? 0) <= 0 ? 0M : (Math.Round((modalData.quantity_final_air_difference_amount ?? 0) / modalData.quantity_final_advise_amount.Value, 3)) val = (modalData.quantity_final_advise_amount ?? 0) <= 0 ? 0M : (Math.Round((modalData.quantity_final_air_difference_amount ?? 0) / modalData.quantity_final_advise_amount.Value, 3)),
formula = $"【差值(空运)-实际周转采购金额占比】 = 【实际-空运周转采购金额差值 {modalData.quantity_final_air_difference_amount}】/ 【实际建议周转金额 {modalData.quantity_final_advise_amount}】 "
}); });
} }
else // 过去 else // 过去
{ {
datas.FirstOrDefault(s => s.name == "30天预测销量海运-实际金额汇总").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = null
});
datas.FirstOrDefault(s => s.name == "30天预测销量空运-实际金额汇总").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = null
});
#region MyRegion #region MyRegion
var dc_base_forecast_historydata = _connection.QueryFirstOrDefault<dc_base_forecast_history>(" select * from dc_base_forecast_history where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku and date_str=@date_str limit 1 ", new var dc_base_forecast_historydata = _connection.QueryFirstOrDefault<dc_base_forecast_history>(" select * from dc_base_forecast_history where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku and date_str=@date_str limit 1 ", new
{ {
...@@ -1492,14 +1567,14 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1492,14 +1567,14 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
datas.FirstOrDefault(s => s.name == "采购单价").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "采购单价").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = Math.Round( modalData.unit_price??0,1) val = Math.Round(modalData.unit_price ?? 0, 1)
}); });
modalData.quantity_final_advise = null; modalData.quantity_final_advise = null;
if (dc_base_forecast_historydata.turnover_sales > 0) if (dc_base_forecast_historydata.turnover_sales > 0)
{ {
modalData.quantity_final_advise = (int)Math.Round(dc_base_forecast_historydata.turnover_sales + dc_base_forecast_historydata.quantity_safe_inventory); modalData.quantity_final_advise = (int)Math.Round(dc_base_forecast_historydata.turnover_sales + dc_base_forecast_historydata.quantity_safe_inventory);
} }
datas.FirstOrDefault(s => s.name == "实际建议周转数").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "实际建议周转数").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
...@@ -1544,11 +1619,11 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1544,11 +1619,11 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
date_str = this_time_end.ToString("yyyy-MM-dd") date_str = this_time_end.ToString("yyyy-MM-dd")
}) ?? new dc_base_forecast_history() { }; }) ?? new dc_base_forecast_history() { };
modalData.quantity_final_advise_ocean = null; modalData.quantity_final_advise_ocean = null;
if (dc_base_forecast_history_ocean_data.turnover_sales > 0 ) if (dc_base_forecast_history_ocean_data.turnover_sales > 0)
{ {
modalData.quantity_final_advise_ocean =(int)Math.Round( (dc_base_forecast_history_ocean_data.turnover_sales + dc_base_forecast_history_ocean_data.quantity_safe_inventory)); modalData.quantity_final_advise_ocean = (int)Math.Round((dc_base_forecast_history_ocean_data.turnover_sales + dc_base_forecast_history_ocean_data.quantity_safe_inventory));
} }
datas.FirstOrDefault(s => s.name == "海运周转数(推荐海运)").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运周转数(推荐海运)").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
...@@ -1567,18 +1642,18 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1567,18 +1642,18 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
val = modalData.freight_price_ocean val = modalData.freight_price_ocean
}); });
var dc_base_forecast_history_air_data =_connection.QueryFirstOrDefault<dc_base_forecast_history>(" select * from dc_base_forecast_history_air where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku and `date`<=@date_str order by `date` desc limit 1 ", new var dc_base_forecast_history_air_data = _connection.QueryFirstOrDefault<dc_base_forecast_history>(" select * from dc_base_forecast_history_air where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku and `date`<=@date_str order by `date` desc limit 1 ", new
{ {
warehouse_code = result.warehouse_code, warehouse_code = result.warehouse_code,
bailun_sku = result.bailun_sku, bailun_sku = result.bailun_sku,
date_str = this_time_end.ToString("yyyy-MM-dd") date_str = this_time_end.ToString("yyyy-MM-dd")
})??new dc_base_forecast_history() { }; }) ?? new dc_base_forecast_history() { };
modalData.quantity_final_advise_air = null; modalData.quantity_final_advise_air = null;
if (dc_base_forecast_history_air_data.turnover_sales > 0) if (dc_base_forecast_history_air_data.turnover_sales > 0)
{ {
modalData.quantity_final_advise_air = (dc_base_forecast_history_air_data.turnover_sales + dc_base_forecast_history_air_data.quantity_safe_inventory); modalData.quantity_final_advise_air = (dc_base_forecast_history_air_data.turnover_sales + dc_base_forecast_history_air_data.quantity_safe_inventory);
} }
datas.FirstOrDefault(s => s.name == "空运周转数(推荐空运)").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "空运周转数(推荐空运)").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
...@@ -1639,26 +1714,30 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1639,26 +1714,30 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
} }
modalData.freight_price_ocean_air_difference = modalData.freight_price_ocean - modalData.freight_price_air; modalData.freight_price_ocean_air_difference = modalData.freight_price_ocean - modalData.freight_price_air;
datas.FirstOrDefault(s => s.name == "海运-空运运费差值").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运-空运运费差值").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.freight_price_ocean_air_difference val = modalData.freight_price_ocean_air_difference,
formula = $"【海运-空运运费差值】= 【海运周转运费 {modalData.freight_price_ocean }】 - 【空运运周转运费 {modalData.freight_price_air}】"
}); });
modalData.quantity_final__ocean_air_difference_amount = modalData.quantity_final_advise_ocean_amount - modalData.quantity_final_advise_air_amount; modalData.quantity_final__ocean_air_difference_amount = modalData.quantity_final_advise_ocean_amount - modalData.quantity_final_advise_air_amount;
datas.FirstOrDefault(s => s.name == "海运-空运周转采购金额差值").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "海运-空运周转采购金额差值").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = modalData.quantity_final__ocean_air_difference_amount val = modalData.quantity_final__ocean_air_difference_amount,
formula = $"【海运-空运周转采购金额差值】= 【海运周转采购金额 {modalData.quantity_final_advise_ocean_amount }】 - 【空运运周转采购金额 {modalData.quantity_final_advise_air_amount}】"
}); });
datas.FirstOrDefault(s => s.name == "差值(海运-空运)-实际周转采购金额占比").days.Add(new transfer_profit_dto.day_dto datas.FirstOrDefault(s => s.name == "差值(海运-空运)-实际周转采购金额占比").days.Add(new transfer_profit_dto.day_dto
{ {
date = this_time, date = this_time,
val = (modalData.quantity_final_advise_amount??0) <= 0 ? 0M : (Math.Round((modalData.quantity_final__ocean_air_difference_amount??0) / modalData.quantity_final_advise_amount.Value, 3)) val = (modalData.quantity_final_advise_amount ?? 0) <= 0 ? 0M : (Math.Round((modalData.quantity_final__ocean_air_difference_amount ?? 0) / modalData.quantity_final_advise_amount.Value, 3)),
formula = $"【差值(海运-空运)-实际周转采购金额占比】 = 【海运-空运周转采购金额差值 {modalData.quantity_final__ocean_air_difference_amount}】/ 【空运周转采购金额差值 {modalData.quantity_final_advise_amount}】 "
}); });
...@@ -1668,9 +1747,50 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime ...@@ -1668,9 +1747,50 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
return datas; return datas;
} }
/// <summary>
/// 查询过去30日的销量
/// </summary>
/// <returns></returns>
public static List<decimal> GetHistorySales30(int turnId, string bailun_sku, string warehouse_code)
{
var sales_details = new List<decimal>();
var trun_sales = DB.SaleVolume.GetByTurnOverId(turnId, bailun_sku, warehouse_code);
sales_details.Add(trun_sales.thirtyday_sales);
sales_details.Add(trun_sales.twenty_nineday_sales);
sales_details.Add(trun_sales.twenty_eightday_sales);
sales_details.Add(trun_sales.twenty_seveneday_sales);
sales_details.Add(trun_sales.twenty_sixday_sales);
sales_details.Add(trun_sales.twenty_fiveday_sales);
sales_details.Add(trun_sales.twenty_fourthday_sales);
sales_details.Add(trun_sales.twenty_threeday_sales);
sales_details.Add(trun_sales.twenty_twoday_sales);
sales_details.Add(trun_sales.twenty_oneday_sales);
sales_details.Add(trun_sales.twentyday_sales);
sales_details.Add(trun_sales.nineteenday_sales);
sales_details.Add(trun_sales.eighteenday_sales);
sales_details.Add(trun_sales.seventeenday_sales);
sales_details.Add(trun_sales.sixteenday_sales);
sales_details.Add(trun_sales.fifteenday_sales);
sales_details.Add(trun_sales.fourteenday_sales);
sales_details.Add(trun_sales.thridteenday_sales);
sales_details.Add(trun_sales.twelveday_sales);
sales_details.Add(trun_sales.elevenday_sales);
sales_details.Add(trun_sales.tenday_sales);
sales_details.Add(trun_sales.nineday_sales);
sales_details.Add(trun_sales.eightday_sales);
sales_details.Add(trun_sales.sevenday_sales);
sales_details.Add(trun_sales.sixday_sales);
sales_details.Add(trun_sales.fiveday_sales);
sales_details.Add(trun_sales.fourthday_sales);
sales_details.Add(trun_sales.threeday_sales);
sales_details.Add(trun_sales.twoday_sales);
sales_details.Add(trun_sales.oneday_sales);
return sales_details;
}
} }
......
...@@ -12,6 +12,11 @@ namespace AutoTurnOver.Models.Report ...@@ -12,6 +12,11 @@ namespace AutoTurnOver.Models.Report
public int? quantity_final_advise; public int? quantity_final_advise;
/// <summary> /// <summary>
/// 30天的预计周转数
/// </summary>
public int? quantity_final_advise_30;
/// <summary>
/// 实际周转数 /// 实际周转数
/// </summary> /// </summary>
public int? turnover; public int? turnover;
...@@ -20,6 +25,10 @@ namespace AutoTurnOver.Models.Report ...@@ -20,6 +25,10 @@ namespace AutoTurnOver.Models.Report
/// 实际建议周转金额 /// 实际建议周转金额
/// </summary> /// </summary>
public decimal? quantity_final_advise_amount; public decimal? quantity_final_advise_amount;
/// <summary>
/// 30天的预计周转金额
/// </summary>
public decimal? quantity_final_advise_amount_30;
/// <summary> /// <summary>
/// 实际周转金额 /// 实际周转金额
...@@ -40,15 +49,25 @@ namespace AutoTurnOver.Models.Report ...@@ -40,15 +49,25 @@ namespace AutoTurnOver.Models.Report
/// 实际周转运费 /// 实际周转运费
/// </summary> /// </summary>
public decimal? freight_price; public decimal? freight_price;
/// <summary>
/// 30 天的实际周转运费
/// </summary>
public decimal? freight_price_30;
/// <summary> /// <summary>
/// 海运周转数(推荐海运) /// 海运周转数(推荐海运)
/// </summary> /// </summary>
public int? quantity_final_advise_ocean; public int? quantity_final_advise_ocean;
/// <summary> /// <summary>
/// 海运周转运费 /// 海运周转运费
/// </summary> /// </summary>
public decimal? freight_price_ocean; public decimal? freight_price_ocean;
/// <summary>
/// 30天海运周转运费
/// </summary>
public decimal? freight_price_ocean_30;
/// <summary> /// <summary>
/// 海运运费单价 /// 海运运费单价
...@@ -77,6 +96,10 @@ namespace AutoTurnOver.Models.Report ...@@ -77,6 +96,10 @@ namespace AutoTurnOver.Models.Report
/// 空运周转运费 /// 空运周转运费
/// </summary> /// </summary>
public decimal? freight_price_air; public decimal? freight_price_air;
/// <summary>
/// 30天空运周转运费
/// </summary>
public decimal? freight_price_air_30;
/// <summary> /// <summary>
/// 实际-空运运费差值 /// 实际-空运运费差值
......
...@@ -14,6 +14,11 @@ namespace AutoTurnOver.Models ...@@ -14,6 +14,11 @@ namespace AutoTurnOver.Models
public class day_dto public class day_dto
{ {
public bool has_int { get; set; } public bool has_int { get; set; }
/// <summary>
/// 计算公式
/// </summary>
public string formula { get; set; }
public DateTime date { get; set; } public DateTime date { get; set; }
public string date_str { get { public string date_str { get {
return date.ToString("MM-dd"+$"({Sinicization(date.DayOfWeek)})"); return date.ToString("MM-dd"+$"({Sinicization(date.DayOfWeek)})");
......
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