Commit cd1fbdb9 by lizefeng

缺货的单独计算

parent 01d267a3
......@@ -16,12 +16,40 @@ namespace AutoTurnOver.DB
/// <returns></returns>
public static IEnumerable<AutoTurnOver.Models.dc_auto_forecast_fluctuation_dto> List(dc_auto_forecast_fluctuation_search_dto data, int offset, int limit, ref int total,string order = "", string sort = "")
{
var sql = @"
var sql = "";
if (limit>10000)
{
sql = @"
select t1.*,t2.quantity_out_stock,
(t4.quantity_purchase-t4.quantity_inbound) as 'ontheway_quantity', -- 采购在途
t4.buyer_name,
t4.estimated_arrival_time,
t4.purchase_id,
(case when (t4.quantity_purchase>t4.quantity_inbound) and now()>t4.estimated_arrival_time then 1 else 0 end) as 'is_overdue',
t4.deliver_name
from
dc_auto_forecast_fluctuation as t1
inner JOIN dc_auto_turnover as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
left join dc_base_warehouse as dbw on t1.warehouse_code = dbw.warehouse_code left join dc_base_sku as t3 on t1.bailun_sku = t3.bailun_sku
left join (
select t1.*,t2.estimated_arrival_time,t2.warehouse_code from dc_base_purchase_details as t1
left join dc_base_purchase as t2 on t1.bailun_sku = t2.bailun_sku and t1.purchase_id = t2.purchase_id
where t1.`status`!=-1 and t1.quantity_purchase>t1.quantity_inbound
) as t4 on t1.bailun_sku = t4.bailun_sku and t1.warehouse_code = t4.warehouse_code
where 1 = 1
";
}
else
{
sql = @"
select t1.* from dc_auto_forecast_fluctuation as t1
inner JOIN dc_auto_turnover as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
left join dc_base_warehouse as dbw on t1.warehouse_code = dbw.warehouse_code
where 1 = 1
";
}
DynamicParameters parameters = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(data.sku))
{
......@@ -99,15 +127,19 @@ where 1 = 1
}
}
var obj = _connection.Query<Models.dc_auto_forecast_fluctuation_dto>(sql + " limit " + offset + "," + limit, parameters);
var obj = _connection.Query<Models.dc_auto_forecast_fluctuation_dto>(sql + " limit " + offset + "," + limit, parameters,commandTimeout:0);
if (obj != null)
if (limit < 10000)
{
foreach (var item in obj)
if (obj != null)
{
item.purchase_advise_count = _connection.QuerySingleOrDefault<int>(" select count(1) from dc_auto_purchase_advise_detailed where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ",new { item.warehouse_code,item.bailun_sku});
foreach (var item in obj)
{
item.purchase_advise_count = _connection.QuerySingleOrDefault<int>(" select count(1) from dc_auto_purchase_advise_detailed where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new { item.warehouse_code, item.bailun_sku });
}
}
}
return obj.AsList();
}
......
......@@ -35,22 +35,8 @@ namespace AutoTurnOver.DB
/// <param name="mainID"></param>
public static void ImportDetailed(int mainID)
{
// 采购员为 赵美聪 的商品 按缺货数量下单
_connection.Execute(@" update
dc_auto_turnover as t1,
dc_base_sku as t2
set t1.quantity_init_advise=( t1.quantity_out_stock - ( t1.quantity_inventory + t1.quantity_transfer + t1.quantity_purchase ) )
where t1.bailun_sku = t2.bailun_sku
and t2.buyer_name in ('赵美聪','张莹霞','张莹霞1') and ( t1.quantity_inventory + t1.quantity_transfer + t1.quantity_purchase < t1.quantity_out_stock ) ", commandTimeout: 0);
// 把 在库+在途>缺货的改成0
_connection.Execute(@" update
dc_auto_turnover as t1,
dc_base_sku as t2
set t1.quantity_init_advise=0
where t1.bailun_sku = t2.bailun_sku
and t2.buyer_name in ('赵美聪','张莹霞','张莹霞1') and ( t1.quantity_inventory + t1.quantity_transfer + t1.quantity_purchase >= t1.quantity_out_stock ) ", commandTimeout: 0);
// 生成采购建议
// 生成采购建议 (只补缺货的不管)
_connection.Execute(@"
INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quantity_init_advise`,`quantity_final_advise`,
`product_inner_code`,`goods_quantity_init_advise`,`goods_moq`,`good_sku_codes`,`goods_history_fourteenday_sales`,`history_fourteenday_sales`,
......@@ -100,19 +86,62 @@ select
left join dc_auto_config_sku_warehouse as t5 on t1.bailun_sku = t5.bailun_sku and t1.warehouse_code = t5.warehouse_code
left join dc_base_sku as t6 on t1.bailun_sku = t6.bailun_sku
left join view_goods_moq as t7 on t6.product_inner_code = t7.product_inner_code and t1.warehouse_code = t7.warehouse_code and t6.suppliers_id = t7.suppliers_id
where (t1.history_fourteenday_sales>0 or t1.quantity_out_stock>0 ) and ( t5.`status`=0 or t5.`status` is null ) and t7.sum_quantity_init_advise>0
where (t1.history_fourteenday_sales>0 or t1.quantity_out_stock>0 ) and ( t5.`status`=0 or t5.`status` is null ) and t7.sum_quantity_init_advise>0 and t6.buyer_name not in ('赵美聪','张莹霞','张莹霞1')
) as t1 where t1.quantity_final_advise>0
)
", new { main_id = mainID }, commandTimeout: 0);
// 采购员为 赵美聪 的商品 按缺货数量下单
_connection.Execute(@" INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quantity_init_advise`,`quantity_final_advise`,
`product_inner_code`,`goods_quantity_init_advise`,`goods_moq`,`good_sku_codes`,`goods_history_fourteenday_sales`,`history_fourteenday_sales`,
`quantity_actual`,`main_id`,
`forecast_formula`,`fit_forecast_formula`,`turnover_days`,`supplier_delivery`,`inspection_delivery`,`transfer_delivery`,`sales_upper_limit`,`ispush`,`type`,`suppliers_id`)
(
select
t1.bailun_sku,
t1.warehouse_code,
t1.quantity_init_advise as 'quantity_init_advise', -- 原始采购建议数量 new
( t1.quantity_out_stock - ( t1.quantity_inventory + t1.quantity_transfer + t1.quantity_purchase ) ) as 'quantity_final_advise', -- 计算moq之后的数量 new
t6.product_inner_code as 'product_inner_code', -- 内部商品编码 new
0 as 'goods_quantity_init_advise', -- 商品本次的建议下单数量 new
0 as 'goods_moq', -- 商品的moq new
0 as 'good_sku_codes', -- 商品涉及的下单所有sku new
0 as 'goods_history_fourteenday_sales', -- 商品的最近14日总日均销量
t1.history_fourteenday_sales as 'history_fourteenday_sales', -- sku的最近14日日均
0 as 'quantity_actual', -- 真实下单数量
@main_id as 'main_id',
t2.forecast_formula as 'forecast_formula',
t2.fit_forecast_formula as 'fit_forecast_formula',
t1.turnover_days,
t1.supplier_delivery,
t1.inspection_delivery,
t1.transfer_delivery,
t1.sales_upper_limit,
0 as 'ispush',
1 as 'type',
t6.suppliers_id
from dc_auto_turnover as t1
left join dc_auto_sales as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
left join dc_auto_config_sku_warehouse as t5 on t1.bailun_sku = t5.bailun_sku and t1.warehouse_code = t5.warehouse_code
left join dc_base_sku as t6 on t1.bailun_sku = t6.bailun_sku
where t6.buyer_name in ('赵美聪','张莹霞','张莹霞1') and ( t1.quantity_inventory + t1.quantity_transfer + t1.quantity_purchase < t1.quantity_out_stock )
) ", new { main_id = mainID });
// 凑单sku(初始建议数没有) 如果下单数只有一个,改为2
_connection.Execute(" update dc_auto_purchase_advise_detailed set quantity_final_advise=2 where quantity_final_advise=1 and quantity_init_advise<=0 and main_id=@main_id ", new { main_id = mainID });
// 初始建议数为1,,系统建议数为1时 改为3
_connection.Execute(" update dc_auto_purchase_advise_detailed set quantity_final_advise=3 where quantity_final_advise=1 and quantity_init_advise=1 and main_id=@main_id ", new { main_id = mainID });
// 凑单sku(初始建议数没有) 如果下单数只有一个,改为2 ( 只补缺货的不管 )
_connection.Execute(@" update dc_auto_purchase_advise_detailed as t1,
dc_base_sku as t2
set t1.quantity_final_advise=2
where t1.quantity_final_advise=1 and t1.quantity_init_advise<=0 and t2.buyer_name not in ('赵美聪','张莹霞','张莹霞1') and t1.main_id=@main_id ", new { main_id = mainID });
// 初始建议数为1,,系统建议数为1时 改为3 ( 只补缺货的不管 )
_connection.Execute(@" update dc_auto_purchase_advise_detailed as t1,
dc_base_sku as t2
set quantity_final_advise=3
where quantity_final_advise=1 and quantity_init_advise=1 and t2.buyer_name not in ('赵美聪','张莹霞','张莹霞1') and main_id=@main_id ", new { main_id = mainID });
// 调整因为舍弃小数导致的moq不足
var datas = _connection.Query<dc_auto_purchase_advise_detailed>(" select * from dc_auto_purchase_advise_detailed where main_id=@main_id ", new { main_id = mainID }).AsList();
......@@ -274,7 +303,8 @@ t1.*,t2.warehouse_name,t3.sku_title_cn as 'sku_name',t4.create_time,t3.buyer_nam
(t5.quantity_purchase) as 'quantity_purchase', -- 采购在途
(t5.quantity_inventory) as 'quantity_inventory', -- 库存数
(t3.unit_price * (case when t1.quantity_actual>0 then t1.quantity_actual else t1.quantity_final_advise end ) ) as 'quantity_final_advise_price', -- 采购金额
t3.suppliers_name
t3.suppliers_name,
(t1.history_fourteenday_sales - t5.forecast_fourteenday_sales) as 'sudden_increase' -- 突增关注
from dc_auto_purchase_advise_detailed as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code
left join dc_base_sku as t3 on t1.bailun_sku = t3.bailun_sku
......@@ -283,7 +313,6 @@ left join dc_auto_turnover as t5 on t1.warehouse_code = t5.warehouse_code and t1
where 1=1 ";
}
if (!string.IsNullOrWhiteSpace(m.product_inner_code))
{
sql += " and t3.product_inner_code=@product_inner_code ";
......@@ -383,7 +412,7 @@ and EXISTS (
if (m.isSum)
if (m.isSum || limit>10000)
{
total = 0;
}
......
......@@ -84,6 +84,38 @@ namespace AutoTurnOver.Models
/// 出过采购建议的数量
/// </summary>
public int purchase_advise_count { get; set; }
/// <summary>
/// 采购在途
/// </summary>
public decimal ontheway_quantity { get; set; }
/// <summary>
/// 缺货数
/// </summary>
public decimal quantity_out_stock { get; set; }
/// <summary>
/// 是否逾期
/// </summary>
public int is_overdue { get; set; }
/// <summary>
/// 采购单号
/// </summary>
public string purchase_id { get; set; }
/// <summary>
/// 预计到货时间
/// </summary>
public DateTime? estimated_arrival_time { get; set; }
/// <summary>
/// 采购员
/// </summary>
public string buyer_name { get; set; }
public string deliver_name { get; set; }
}
public class dc_auto_forecast_fluctuation_search_dto
......
......@@ -190,6 +190,11 @@ namespace AutoTurnOver.Models
public string buyer_name { get; set; }
/// <summary>
/// 突增关注
/// </summary>
public decimal sudden_increase { get; set; }
}
......@@ -260,6 +265,7 @@ namespace AutoTurnOver.Models
public decimal? quantity_final_advise_price_min { get; set; }
public decimal? quantity_final_advise_price_max { get; set; }
}
}
......@@ -62,7 +62,9 @@ namespace AutoTurnOver.Controllers
var list = service.List(m, 0, int.MaxValue, ref total, order, sort);
DataTable table = new DataTable();
string[] cols = new string[] { "建议下单次数","Sku","仓库编码","仓库名称","最近3日日均","异常类型","开始时间","结束时间","是否确认","确认人","预计解决时间",
string[] cols = new string[] { "Sku","仓库编码","仓库名称","最近3日日均","异常类型","开始时间",
"总缺货数","在途数量","采购员","预计到货","bi 采购单号","供应商","逾期状态",
"结束时间","是否确认","确认人","预计解决时间",
"处理方案","是否解决"
};
foreach (var item in cols)
......@@ -74,13 +76,22 @@ namespace AutoTurnOver.Controllers
{
DataRow row = table.NewRow();
row["建议下单次数"] = itemData.purchase_advise_count;
row["Sku"] = itemData.bailun_sku;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["最近3日日均"] = itemData.avg_sales_three;
row["异常类型"] = itemData.bailun_sku;
row["开始时间"] = itemData.typeStr;
row["总缺货数"] = itemData.quantity_out_stock;
row["在途数量"] = itemData.ontheway_quantity;
row["采购员"] = itemData.buyer_name;
row["预计到货"] = itemData.estimated_arrival_time;
row["bi 采购单号"] = itemData.purchase_id;
row["供应商"] = itemData.deliver_name;
row["逾期状态"] = itemData.is_overdue==1?"逾期":"未逾期";
row["结束时间"] = itemData.end_time;
row["是否确认"] = itemData.has_confirm==1?"是":"否";
row["确认人"] = itemData.bl_operator;
......
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