Commit a3c9d405 by 泽锋 李

fix

parent 7173c908
......@@ -1312,7 +1312,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
{
warehouse_code = result.warehouse_code,
bailun_sku = result.bailun_sku
})??0;
}) ?? 0;
datas.FirstOrDefault(s => s.name == "实际运费单价").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1354,7 +1354,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
modalData.quantity_safe_inventory = result.quantity_safe_inventory;
modalData.daily_weighted_sales = result.daily_weighted_sales;
modalData.quantity_safe_inventory_days = result.daily_weighted_sales<=0?14: (Math.Ceiling(result.quantity_safe_inventory * 1.0M / result.daily_weighted_sales));
modalData.quantity_safe_inventory_days = result.daily_weighted_sales <= 0 ? 14 : (Math.Ceiling(result.quantity_safe_inventory * 1.0M / result.daily_weighted_sales));
datas.FirstOrDefault(s => s.name == "安全库存数量").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1364,7 +1364,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
modalData.turnover_days = result.turnover_days;
modalData.purchase_create_order_days = result.purchase_create_order_days??0;
modalData.purchase_create_order_days = result.purchase_create_order_days ?? 0;
modalData.payment_before_delivery = result.payment_before_delivery;
modalData.supplier_delivery = result.supplier_delivery;
modalData.inspection_delivery_days = result.inspection_delivery;
......@@ -1373,7 +1373,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
modalData.transfer_bale_delivery = result.transfer_bale_delivery;
modalData.turnover_days_air = result_air.turnover_days;
modalData.purchase_create_order_days_air = result_air.purchase_create_order_days??0;
modalData.purchase_create_order_days_air = result_air.purchase_create_order_days ?? 0;
modalData.payment_before_delivery_air = result_air.payment_before_delivery;
modalData.supplier_delivery_air = result_air.supplier_delivery;
modalData.inspection_delivery_days_air = result_air.inspection_delivery;
......@@ -1389,7 +1389,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
});
modalData.turnover_days_ocean = result_ocean.turnover_days;
modalData.purchase_create_order_days_ocean = result_ocean.purchase_create_order_days??0;
modalData.purchase_create_order_days_ocean = result_ocean.purchase_create_order_days ?? 0;
modalData.payment_before_delivery_ocean = result_ocean.payment_before_delivery;
modalData.supplier_delivery_ocean = result_ocean.supplier_delivery;
modalData.inspection_delivery_days_ocean = result_ocean.inspection_delivery;
......@@ -1408,7 +1408,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
datas.FirstOrDefault(s => s.name == "采购单价").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = Math.Round(modalData.unit_price , 1),
val = Math.Round(modalData.unit_price, 1),
formula = " 【采购单价】从产品库读取配置"
});
......@@ -1425,7 +1425,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
val = modalData.quantity_final_advise,
formula = $" 【实际建议周转数】= 供应链长度预测销量({result.turnover_sales}) + 安全库存({ result.quantity_safe_inventory}) "
});
modalData.quantity_final_advise_amount = Math.Round((modalData.quantity_final_advise ) * (modalData.unit_price ), 2);
modalData.quantity_final_advise_amount = Math.Round((modalData.quantity_final_advise) * (modalData.unit_price), 2);
datas.FirstOrDefault(s => s.name == "实际建议周转金额").days.Add(new transfer_profit_dto.day_dto
{
......@@ -1469,16 +1469,16 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
val = modalData.quantity_final_advise_ocean,
formula = $" 【海运周转数(推荐海运)】 = 海运供应链长度预测销量({result_ocean.turnover_sales}) + 安全库存({ result.quantity_safe_inventory}) "
});
modalData.quantity_final_advise_ocean_amount = Math.Round((modalData.quantity_final_advise_ocean ) * (modalData.unit_price ), 2);
modalData.quantity_final_advise_ocean_amount = Math.Round((modalData.quantity_final_advise_ocean) * (modalData.unit_price), 2);
datas.FirstOrDefault(s => s.name == "海运周转金额").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
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 ) * modalData.freight_unit_price_ocean, 2);
modalData.freight_price_ocean = Math.Round((modalData.quantity_final_advise_ocean) * modalData.freight_unit_price_ocean, 2);
modalData.cean_line_name = logoCeanData.Line_Name;
modalData.cean_line_freight_unit_price = ( logoCeanData.min_freight_unit_price??0) / (logoCeanData.min_freight_unit_weight ?? 1);
modalData.cean_line_freight_unit_price = (logoCeanData.min_freight_unit_price ?? 0) / (logoCeanData.min_freight_unit_weight ?? 1);
modalData.weight = dc_base_sku_data.weight / 1000;
datas.FirstOrDefault(s => s.name == "海运周转运费").days.Add(new transfer_profit_dto.day_dto
{
......@@ -1495,16 +1495,16 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
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 , 2);
modalData.quantity_final_advise_air_amount = Math.Round(modalData.quantity_final_advise_air * modalData.unit_price, 2);
datas.FirstOrDefault(s => s.name == "空运周转金额").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
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 ) * modalData.freight_unit_price_air, 2);
modalData.freight_price_air = Math.Round((modalData.quantity_final_advise_air) * modalData.freight_unit_price_air, 2);
modalData.air_line_name = logoAirData.Line_Name;
modalData.air_line_freight_unit_price = (logoAirData.min_freight_unit_price??0) / (logoAirData.min_freight_unit_weight ?? 1);
modalData.air_line_freight_unit_price = (logoAirData.min_freight_unit_price ?? 0) / (logoAirData.min_freight_unit_weight ?? 1);
datas.FirstOrDefault(s => s.name == "空运周转运费").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1529,7 +1529,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
formula = $"【实际-海运周转采购金额差值】= 【实际建议周转金额 {modalData.quantity_final_advise_amount }】 - 【海运周转金额 {modalData.quantity_final_advise_ocean_amount}】"
});
modalData.freight_price_ocean_difference_amount_radio = (modalData.turnover_amount ) <= 0 ? 0M : (Math.Round((modalData.quantity_final_ocean_difference_amount ) / modalData.turnover_amount, 3));
modalData.freight_price_ocean_difference_amount_radio = (modalData.turnover_amount) <= 0 ? 0M : (Math.Round((modalData.quantity_final_ocean_difference_amount) / modalData.turnover_amount, 3));
datas.FirstOrDefault(s => s.name == "差值(海运)-实际周转金额占比").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1554,7 +1554,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
formula = $"【实际-空运运周转采购金额差值】= 【实际建议周转金额 {modalData.quantity_final_advise_amount }】 - 【空运周转金额 {modalData.quantity_final_advise_air_amount}】"
});
modalData.freight_price_air_difference_amount_radio = (modalData.turnover_amount) <= 0 ? 0M : (Math.Round((modalData.quantity_final_air_difference_amount ) / modalData.turnover_amount, 3));
modalData.freight_price_air_difference_amount_radio = (modalData.turnover_amount) <= 0 ? 0M : (Math.Round((modalData.quantity_final_air_difference_amount) / modalData.turnover_amount, 3));
datas.FirstOrDefault(s => s.name == "差值(空运)-实际周转金额占比").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1628,11 +1628,11 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
warehouse_into_code = result.warehouse_code,
bailun_sku = result.bailun_sku,
btime = this_time_end
})??0;
}) ?? 0;
datas.FirstOrDefault(s => s.name == "采购单价").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = Math.Round(modalData.unit_price , 1)
val = Math.Round(modalData.unit_price, 1)
});
modalData.quantity_final_advise = 0;
if (dc_base_forecast_historydata.turnover_sales > 0)
......@@ -1662,7 +1662,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
warehouse_code = result.warehouse_code,
bailun_sku = result.bailun_sku,
action_date = this_time_end
})??0;
}) ?? 0;
datas.FirstOrDefault(s => s.name == "实际运费单价").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1752,7 +1752,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
datas.FirstOrDefault(s => s.name == "差值(海运)-实际周转金额占比").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = (modalData.turnover_amount ) <= 0 ? 0M : (Math.Round(modalData.quantity_final_ocean_difference_amount / modalData.turnover_amount, 3))
val = (modalData.turnover_amount) <= 0 ? 0M : (Math.Round(modalData.quantity_final_ocean_difference_amount / modalData.turnover_amount, 3))
});
modalData.freight_price_air_difference_amount = modalData.freight_price - modalData.freight_price_air;
......@@ -1771,7 +1771,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
datas.FirstOrDefault(s => s.name == "差值(空运)-实际周转金额占比").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
val = (modalData.turnover_amount ) <= 0 ? 0M : (Math.Round(modalData.freight_price_air_difference_amount / modalData.turnover_amount, 3))
val = (modalData.turnover_amount) <= 0 ? 0M : (Math.Round(modalData.freight_price_air_difference_amount / modalData.turnover_amount, 3))
});
#endregion
......@@ -1797,7 +1797,7 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
formula = $"【海运-空运周转采购金额差值】= 【海运周转采购金额 {modalData.quantity_final_advise_ocean_amount }】 - 【空运运周转采购金额 {modalData.quantity_final_advise_air_amount}】"
});
modalData.freight_price_ocean_air_difference_radio = (modalData.turnover_amount ) <= 0 ? 0M : (Math.Round((modalData.quantity_final__ocean_air_difference_amount) / modalData.turnover_amount, 3));
modalData.freight_price_ocean_air_difference_radio = (modalData.turnover_amount) <= 0 ? 0M : (Math.Round((modalData.quantity_final__ocean_air_difference_amount) / modalData.turnover_amount, 3));
datas.FirstOrDefault(s => s.name == "差值(海运-空运)-实际周转金额占比").days.Add(new transfer_profit_dto.day_dto
{
date = this_time,
......@@ -1881,22 +1881,23 @@ where t1.gmt_modified>=@btime and t1.gmt_modified<=@etime
bailun_sku = bailun_sku,
warehouse_code = warehouse_code
}) ?? new dc_base_head_transport_config { };
data.transport_type = dc_base_head_transport_config_data.head_transport??"";
data.transport_type = dc_base_head_transport_config_data.head_transport ?? "";
dc_report_profit_analysis sales_data = _connection.QueryFirstOrDefault<dc_report_profit_analysis>(@" select
sum( case when paid_time>=@btime2 and paid_time<=@etime1 then bailun_sku_quantity_ordered else 0 end ) as 'sales_avg_7',
sum( case when paid_time>=@btime3 and paid_time<=@etime1 then bailun_sku_quantity_ordered else 0 end ) as 'sales_avg_30',
sum( bailun_sku_quantity_ordered ) as 'sales_avg_90'
from dc_base_oms_sku_30 where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and paid_time>=@btime1 and paid_time<=@etime1 ", new {
from dc_base_oms_sku_30 where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and paid_time>=@btime1 and paid_time<=@etime1 ", new
{
bailun_sku = bailun_sku,
warehouse_code = warehouse_code,
btime1 = DateTime.Now.AddDays(-91).ToDayHome(),
btime2 = DateTime.Now.AddDays(-8).ToDayHome(),
btime3 = DateTime.Now.AddDays(-30).ToDayHome(),
etime1 = DateTime.Now.AddDays(-1).ToDayEnd(),
}, commandTimeout: 0) ??new dc_report_profit_analysis { };
data.sales_avg_7 = sales_data.sales_avg_7/7;
data.sales_avg_30 = sales_data.sales_avg_30/30;
data.sales_avg_90 = sales_data.sales_avg_90/90;
}, commandTimeout: 0) ?? new dc_report_profit_analysis { };
data.sales_avg_7 = sales_data.sales_avg_7 / 7;
data.sales_avg_30 = sales_data.sales_avg_30 / 30;
data.sales_avg_90 = sales_data.sales_avg_90 / 90;
data.sales_avg_180 = (_connection.QueryFirstOrDefault<int?>(@" select
sum( bailun_sku_quantity_ordered ) as 'sales_avg_180'
from dc_base_oms_sku where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and paid_time>=@btime1 and paid_time<=@etime1 ", new
......@@ -1905,18 +1906,19 @@ from dc_base_oms_sku where bailun_sku=@bailun_sku and warehouse_code=@warehouse_
warehouse_code = warehouse_code,
btime1 = DateTime.Now.AddDays(-181).ToDayHome(),
etime1 = DateTime.Now.AddDays(-1).ToDayEnd(),
},commandTimeout:0) ?? 0)/180;
}, commandTimeout: 0) ?? 0) / 180;
data.freight_stock_amount_ocean = data.quantity_final_ocean_difference_amount <= 0?0:((data.freight_price_ocean_difference_amount) / (data.quantity_final_ocean_difference_amount));
data.freight_stock_amount_air = data.quantity_final_air_difference_amount <= 0?0:((data.freight_price_air_difference_amount) / (data.quantity_final_air_difference_amount));
data.freight_stock_amount_ocean_30 = data.quantity_final_advise_amount <= 0 ? 0 : ( Math.Abs( data.freight_price_ocean_30_difference) / data.quantity_final_advise_amount);
data.freight_stock_amount_air_30 = data.quantity_final_advise_amount<=0?0:(Math.Abs( data.freight_price_air_30_difference) / data.quantity_final_advise_amount);
data.freight_stock_amount_ocean = data.quantity_final_ocean_difference_amount <= 0 ? 0 : ((data.freight_price_ocean_difference_amount) / (data.quantity_final_ocean_difference_amount));
data.freight_stock_amount_air = data.quantity_final_air_difference_amount <= 0 ? 0 : ((data.freight_price_air_difference_amount) / (data.quantity_final_air_difference_amount));
data.freight_stock_amount_ocean_30 = data.quantity_final_advise_amount <= 0 ? 0 : (Math.Abs(data.freight_price_ocean_30_difference) / data.quantity_final_advise_amount);
data.freight_stock_amount_air_30 = data.quantity_final_advise_amount <= 0 ? 0 : (Math.Abs(data.freight_price_air_30_difference) / data.quantity_final_advise_amount);
data.id = _connection.QueryFirstOrDefault<int?>(" select id from dc_report_profit_analysis where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ",new {
bailun_sku= bailun_sku,
data.id = _connection.QueryFirstOrDefault<int?>(" select id from dc_report_profit_analysis where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new
{
bailun_sku = bailun_sku,
warehouse_code = warehouse_code
}) ??0;
data.ocean_purchase = Math.Max(0,(int)Math.Ceiling(data.quantity_final_advise_ocean -data.turnover));
}) ?? 0;
data.ocean_purchase = Math.Max(0, (int)Math.Ceiling(data.quantity_final_advise_ocean - data.turnover));
data.ocean_purchase_amount = data.ocean_purchase * data.unit_price;
data.update_time = DateTime.Now;
if (data.id > 0)
......@@ -1972,7 +1974,7 @@ order by t1.gmt_modified asc
{
try
{
CalculationProfitAnalysis(orderItem.bailun_sku,orderItem.warehouse_code);
CalculationProfitAnalysis(orderItem.bailun_sku, orderItem.warehouse_code);
count++;
}
catch (Exception ex)
......@@ -2003,14 +2005,14 @@ order by t1.gmt_modified asc
DynamicParameters parameters = new DynamicParameters();
var sql = "";
sql = @" select * from dc_report_profit_analysis as t1
sql = @" select * from dc_report_profit_analysis as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code
where 1=1
";
var countSql = @"
select
......@@ -2019,7 +2021,7 @@ from dc_report_profit_analysis as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code
where 1=1
";
if (!string.IsNullOrWhiteSpace(search_data.warehousetype))
{
sql += " and t1.warehouse_type = @hq_type ";
......@@ -2108,6 +2110,58 @@ where 1=1
var obj = _connection.Query<dc_report_profit_analysis>(sql, parameters, buffered: false, commandTimeout: 0).AsList();
return obj;
}
/// <summary>
/// 生成采购建议
/// </summary>
public static void BatchPushPurchaseAdvise(string ids, UserData user)
{
var idInts = ids.Split(',').Select(s => int.Parse(s)).ToList();
var anas = _connection.Query<dc_report_profit_analysis>(" select * from dc_report_profit_analysis where id in @ids ", new
{
ids = idInts
}).ToList();
if (anas != null && anas.Count >= 1)
{
var mainID = purchase_advise.Add(new dc_auto_purchase_advise { create_time = DateTime.Now, no = purchase_advise.GenerateOrderNo(), buy_sys_plan_no = "补海运", title = $" {user.UserName} 补海运 {DateTime.Now.ToString("HH:mm")}" }) ?? 0;
var datas = new List<dc_auto_purchase_advise_detailed>();
foreach (var item in anas)
{
if (item.ocean_purchase > 0)
{
var item_data = new dc_auto_purchase_advise_detailed
{
main_id = mainID,
auto_replace_logistics_task_id = null,
bailun_order_ids = "",
bailun_sku = item.bailun_sku,
bailun_sku_warehouse_code = $"{item.bailun_sku}{item.warehouse_code}",
warehouse_code = item.warehouse_code,
create_time = DateTime.Now,
push_date = null,
fit_forecast_formula = "",
fixed_daily_weighted_sales = null,
fixed_dc_auto_sales_forecast_title = "",
quantity_init_advise = item.ocean_purchase,
quantity_actual = item.ocean_purchase,
turnover_days = (int)Math.Ceiling(item.turnover_days_ocean),
supplier_delivery = 0,
inspection_delivery = 0,
type = (int)purchase_type_jit_enum.补海运,
product_inner_code = "",
goods_quantity_init_advise = item.ocean_purchase,
good_sku_codes = item.bailun_sku,
purchase_type_jit = (int)purchase_advise_type_enum.补海运
};
datas.Add(item_data);
_connection.Insert(item_data);
}
}
}
}
}
}
\ No newline at end of file
......@@ -304,14 +304,16 @@ namespace AutoTurnOver.Models
其他 = 0,
备安全库存 = 1,
补缺货 = 2,
下首单 =3
下首单 =3,
补海运 = 5
}
public enum purchase_advise_type_enum
{
预计缺货 = 1,
实际缺货 = 2,
补货 = 3,
下首单 = 4
下首单 = 4,
补海运 =5
}
public class dc_auto_purchase_advise_detailed_buy_dto : dc_auto_purchase_advise_detailed
......
......@@ -693,6 +693,10 @@ namespace AutoTurnOver.Services
{
return DB.dc_auto_turnover.ProfitAnalysis(search_data, ref total);
}
public void BatchPushPurchaseAdvise(string ids, UserData user)
{
DB.dc_auto_turnover.BatchPushPurchaseAdvise(ids,user);
}
public string ProfitAnalysisExport(dc_base_stock_search_dto search_data)
......
......@@ -623,5 +623,23 @@ namespace AutoTurnOver.Controllers
}
[HttpGet]
[BrowseLog("Bailun_aims", "触发【百伦自动周转系统】->【自动下单管理】->【利润最大化分析】->【推送采购建议】操作", 3)]
public JsonResult BatchPushPurchaseAdvise(string ids)
{
try
{
var user = AutoUtility.GetUser();
if (user == null) return null;
new Services.SkuAutoTurnServices().BatchPushPurchaseAdvise(ids, user);
return new JsonResult("");
}
catch (Exception ex)
{
return new JsonResult(ex.Message);
}
}
}
}
\ No newline at end of file
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