Commit e9cebc87 by 泽锋 李

采购建议新增子母sku和库容字段

parent c1905539
......@@ -22,6 +22,7 @@ namespace AutoGeneratePurchaseAdvise
try
{
//PurchaseAdviseServices.Generate($"早上的全量周转 {DateTime.Now.ToString("HH: mm")}", DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")), is_clear_data: true);
//PurchaseAdviseServices.Generate($"早上的全量周转 {DateTime.Now.ToString("HH: mm")}", DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")), is_clear_data: false);
//PurchaseAdviseServices.Generate($"下午的补充周转 {DateTime.Now.ToString("HH: mm")}", DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 12:00:00")));
}
catch (Exception ex)
......
......@@ -448,6 +448,7 @@ where t1.bailun_sku = t2.bailun_sku and t1.gmt_modified>=@btime ;
var datas1 = MyMySqlConnection._connection.Query<dc_auto_purchase_advise_detailed>(@"select * from (
select
t1.bailun_sku,
CONCAT(t1.bailun_sku,(case when t8.group_id=2 then 'GZBLWH' else t1.warehouse_code end )) as 'bailun_sku_warehouse_code',
t1.warehouse_code as 'source_warehouse_code',
(case when t8.group_id=2 then 'GZBLWH' else t1.warehouse_code end ) as 'warehouse_code',
t1.quantity_init_advise as 'quantity_init_advise', -- 原始采购建议数量 new
......@@ -499,7 +500,8 @@ tr_task.transport_type as 'task_transport_type',
tr_task.remarks as 'replace_logistics_remarks',
t9.quantity_transfer_order as 'quantity_transfer_order',
t9.quantity_transfer_temp_schedule as 'quantity_transfer_temp_schedule',
t9.quantity_transfer_temporary_storage as 'quantity_transfer_temporary_storage'
t9.quantity_transfer_temporary_storage as 'quantity_transfer_temporary_storage',
t1.is_mother_sku as 'is_mother_map_sku'
from (select * from dc_auto_turnover where gmt_modified>=@btime ) 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
......@@ -509,8 +511,8 @@ t9.quantity_transfer_temporary_storage as 'quantity_transfer_temporary_storage'
left join dc_auto_replace_logistics_task as tr_task on t1.auto_replace_logistics_task_id = tr_task.id
left join dc_mid_transit as t9 on t1.bailun_sku = t9.bailun_sku and t1.warehouse_code = t9.warehouse_code
where 1=1
and t1.`is_mother_sku`=0
and t6.`status`=2
and ( t1.is_mother_sku =1 or (
t6.`status`=2
-- and (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 (
......@@ -518,6 +520,8 @@ and ( t5.`status`=0 or t5.`status` is null ) and t7.sum_quantity_init_advise>0
or
( t1.tag_id > 0 and t8.is_eliminate = 0 )
) -- 非jit 或者 jit 备货
)
)
) as t1 where t1.quantity_final_advise>0
", new { main_id = mainID, btime = date }, commandTimeout: 0).ToList();
Console.WriteLine("开始出建议 完");
......@@ -535,7 +539,8 @@ and `status`=0 and bailun_sku_warehouse_code not in @bailun_sku_warehouse_codes
if (datas1 != null && datas1.Count >= 1)
{
WritePurchaseAdvise(datas1);
var datas2 = SetMotherSkuStorageCapacity(datas1);
WritePurchaseAdvise(datas2);
}
// 凑单sku(初始建议数没有) 如果下单数只有一个,改为2 ( 只补缺货的不管 )
......@@ -611,6 +616,122 @@ and t1.quantity_init_advise>=0 and ( t3.buyer_name in ('张莹霞1') and t1.ware
}
/// <summary>
/// 根据库容动态调配
/// </summary>
/// <returns></returns>
public static List<dc_auto_purchase_advise_detailed> SetMotherSkuStorageCapacity(List<dc_auto_purchase_advise_detailed> originalDatas)
{
List<dc_auto_purchase_advise_detailed> datas = new List<dc_auto_purchase_advise_detailed>();
var mother_datas = originalDatas.Where(s=>s.is_mother_map_sku==1).ToList();
var not_mother_datas = originalDatas.Where(s=>s.is_mother_map_sku==0).ToList();
//先清洗一波子母sku
if (mother_datas!=null && mother_datas.Count>=1)
{
// 查询母sku锁包含的子sku全部清除
var maps = _connection.Query<dc_base_mother_sku_map>(" select * from dc_base_mother_sku_map where mother_sku_warehouse_code in @mother_sku_warehouse_codes ",new {
mother_sku_warehouse_codes = mother_datas.Select(s=>s.bailun_sku_warehouse_code).ToList()
});
if (maps != null && maps.Count()>=1)
{
foreach (var item in mother_datas)
{
var itemMaps = maps.Where(s => s.mother_sku_warehouse_code == item.bailun_sku_warehouse_code).ToList();
if (itemMaps != null && itemMaps.Count >= 1)
{
// 查询这些子sku的库容
var skuStorageCapacityList = _connection.Query<dc_base_storage_capacity>(" select * from dc_base_storage_capacity where bailun_sku_warehouse_code in @bailun_sku_warehouse_codes ", new
{
bailun_sku_warehouse_codes = itemMaps.Select(s => s.bailun_sku_warehouse_code).ToList()
}).Where(s=>s.stock>0).ToList();
var new_datas = new List<dc_auto_purchase_advise_detailed>();
var sum_stock = item.quantity_final_advise;
//根据每个有库容的sku分摊需求
foreach (var itemStorageCapacity in skuStorageCapacityList)
{
if (sum_stock <= 0) break;
var usd_quantity = 0;
if(itemStorageCapacity.stock>= sum_stock)
{
usd_quantity = sum_stock;
sum_stock = 0;
}
else
{
usd_quantity = (int)Math.Ceiling( itemStorageCapacity.stock);
sum_stock -= usd_quantity;
}
if (usd_quantity > 0)
{
var new_data = item.ToJson().ToObj<dc_auto_purchase_advise_detailed>();
new_data.quantity_init_advise = item.quantity_final_advise;
new_data.quantity_final_advise = usd_quantity;
new_data.mother_sku = item.bailun_sku;
new_data.product_inner_code = "";
new_data.good_sku_codes = "";
new_data.is_mother_map_sku = 1;
new_data.mother_sku_quantity = item.quantity_final_advise;
new_data.mother_sku_warehouse_code = item.bailun_sku_warehouse_code;
new_datas.Add(new_data);
}
}
if(new_datas!=null && new_datas.Count >= 1)
{
// 写入子sku分摊结果
var storage_capacity_lack_quantity = item.quantity_final_advise - new_datas.Sum(s => s.quantity_final_advise);
foreach (var itemNewData in new_datas)
{
itemNewData.storage_capacity_lack_quantity = storage_capacity_lack_quantity;
datas.Add(itemNewData);
}
}
}
}
}
}
// 再查询需要监控库容的非子母sku
var dc_base_storage_capacity_configs = _connection.Query<dc_base_storage_capacity_config>(" select * from dc_base_storage_capacity_config where bailun_sku_warehouse_code in @bailun_sku_warehouse_codes ", new
{
bailun_sku_warehouse_codes = not_mother_datas.Select(s => s.bailun_sku_warehouse_code).ToList()
}).ToList();
if(dc_base_storage_capacity_configs!=null && dc_base_storage_capacity_configs.Count >= 1)
{
// 查询这些sku的库容
// 查询这些子sku的库容
var skuStorageCapacityList = _connection.Query<dc_base_storage_capacity>(" select * from dc_base_storage_capacity where bailun_sku_warehouse_code in @bailun_sku_warehouse_codes ", new
{
bailun_sku_warehouse_codes = dc_base_storage_capacity_configs.Select(s => s.bailun_sku_warehouse_code).ToList()
}).Where(s => s.stock > 0).ToList();
// 把需要监控库容的按库容调整
foreach (var item in not_mother_datas.Where(s=>dc_base_storage_capacity_configs.Any(v => s.bailun_sku_warehouse_code == v.bailun_sku_warehouse_code)))
{
var storageCapacity = (int)Math.Ceiling( (skuStorageCapacityList.FirstOrDefault(s => s.bailun_sku_warehouse_code == item.bailun_sku_warehouse_code) ?? new dc_base_storage_capacity()).stock);
var quantity_final_advise = item.quantity_final_advise;
item.quantity_final_advise = Math.Min(quantity_final_advise, storageCapacity);
item.storage_capacity_lack_quantity = Math.Max(0, quantity_final_advise - item.quantity_final_advise);
datas.Add(item);
}
// 把不需要监控库容的补回去
datas.AddRange(not_mother_datas.Where(s=>!dc_base_storage_capacity_configs.Any(v=>s.bailun_sku_warehouse_code==v.bailun_sku_warehouse_code)));
}
else
{
datas.AddRange(not_mother_datas);
}
return datas;
}
public static void CopyTurnoverData(int advId)
{
_connection.Execute(@"update dc_auto_purchase_advise_detailed as t1,
......
......@@ -294,6 +294,31 @@ namespace AutoTurnOver.Models
/// </summary>
public int status { get; set; }
/// <summary>
/// 是否母子sku
/// </summary>
public int is_mother_map_sku { get; set; }
/// <summary>
/// 母sku的原始下单需求
/// </summary>
public int? mother_sku_quantity { get; set; }
/// <summary>
/// 对应的母sku
/// </summary>
public string mother_sku { get; set; }
/// <summary>
/// 对应母sku+仓库编码
/// </summary>
public string mother_sku_warehouse_code { get; set; }
/// <summary>
/// 库容缺少值
/// </summary>
public int storage_capacity_lack_quantity { get; set; }
}
......
......@@ -31,6 +31,7 @@ namespace ResetOutofstock
//daily.ResetFbaExtendSales(DateTime.Now);
//dc_base_mother_sku_dao.SynchroCalculationTurnOver();
//dc_base_mother_sku_dao.ResetTurnOver("M-test123", "MMDUSFBA");
}
catch (Exception ex)
{
......
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