Commit 075f7de0 by 泽锋 李

fix

parent 359d6348
......@@ -9,5 +9,6 @@
"CdnUrl": "http://imgcache.bailuntec.com"
},
"QiYeJiQiRen": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5fa4c1d5-ce65-4e8a-9ae9-a0d689a13b65",
"GetSchedulings": "http://oa.bailuntec.com/Api/Cq/GetSchedulings?userID=1922"
"GetSchedulings": "http://oa.bailuntec.com/Api/Cq/GetSchedulings?userID=1922",
"postaveragesales": "http://doc.bailuntec.com:6032/postaveragesales"
}
......@@ -9,5 +9,6 @@
"CdnUrl": "http://imgcache.bailuntec.com"
},
"QiYeJiQiRen": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5fa4c1d5-ce65-4e8a-9ae9-a0d689a13b65",
"GetSchedulings": "http://oa.bailuntec.com/Api/Cq/GetSchedulings?userID=1922"
"GetSchedulings": "http://oa.bailuntec.com/Api/Cq/GetSchedulings?userID=1922",
"postaveragesales": "http://10.0.6.27/pds/PdsOpenApi/postaveragesales"
}
......@@ -9,5 +9,6 @@
"CdnUrl": "http://imgcache.bailuntec.com"
},
"QiYeJiQiRen": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5fa4c1d5-ce65-4e8a-9ae9-a0d689a13b65",
"GetSchedulings": "http://oa.bailuntec.com/Api/Cq/GetSchedulings?userID=1922"
"GetSchedulings": "http://oa.bailuntec.com/Api/Cq/GetSchedulings?userID=1922",
"postaveragesales": "http://10.0.6.27/pds/PdsOpenApi/postaveragesales"
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ using System.Text;
using Dapper;
using System.Linq;
using AutoTurnOver.Utility;
using AutoTurnOver.Models.ApiDto;
namespace AutoTurnOver.DB
{
......@@ -96,8 +97,8 @@ namespace AutoTurnOver.DB
}
// 匹配规则
var item_rule = rule_list.FirstOrDefault(s => s.source == itemGroup.Max(v => v.source)
&& s.warehouse_type.Split(',').Any(sp=>sp.Equals(item_warehouse.hq_type, StringComparison.CurrentCultureIgnoreCase))
&& (s.brand == "0" || s.brand.Split(',').Any(sp=>sp.Equals(itemGroup.Max(v => v.brand), StringComparison.CurrentCultureIgnoreCase)))
&& s.warehouse_type.Split(',').Any(sp => sp.Equals(item_warehouse.hq_type, StringComparison.CurrentCultureIgnoreCase))
&& (s.brand == "0" || s.brand.Split(',').Any(sp => sp.Equals(itemGroup.Max(v => v.brand), StringComparison.CurrentCultureIgnoreCase)))
&& s.source == itemGroup.Max(v => v.source)
);
if (item_rule == null)
......@@ -110,17 +111,17 @@ namespace AutoTurnOver.DB
List<auto_first_order_detailed_dto> data_detailed_list = new List<auto_first_order_detailed_dto>();
if (item_rule.lower_limit_sku_count > 0 && itemGroup.Count() > item_rule.lower_limit_sku_count)
{
remarks.AppendLine($" sku数量不应该超过 {item_rule.lower_limit_sku_count} 个 ");
throw new Exception($" sku数量不应该超过 {item_rule.lower_limit_sku_count} 个 ");
}
//if (item_rule.lower_limit_sku_count > 0 && itemGroup.Count() > item_rule.lower_limit_sku_count)
//{
// remarks.AppendLine($" sku数量不应该超过 {item_rule.lower_limit_sku_count} 个 ");
// throw new Exception($" sku数量不应该超过 {item_rule.lower_limit_sku_count} 个 ");
//}
if (item_rule.lower_limit_sales > 0 && itemGroup.Max(v => v.product_sales) < item_rule.lower_limit_sales)
{
remarks.AppendLine($" 商品日均不应该低于 {item_rule.lower_limit_sales} 个 ");
throw new Exception($" 商品日均不应该低于 {item_rule.lower_limit_sales} 个 ");
}
//if (item_rule.lower_limit_sales > 0 && itemGroup.Max(v => v.product_sales) < item_rule.lower_limit_sales)
//{
// remarks.AppendLine($" 商品日均不应该低于 {item_rule.lower_limit_sales} 个 ");
// throw new Exception($" 商品日均不应该低于 {item_rule.lower_limit_sales} 个 ");
//}
int? max_delivery = null;
......@@ -136,7 +137,8 @@ namespace AutoTurnOver.DB
data_detailed_list.Add(new auto_first_order_detailed_dto
{
bailun_sku = item.bailun_sku,
quantity = single_sku_count
quantity = single_sku_count,
remarks = new StringBuilder()
});
}
......@@ -175,74 +177,119 @@ namespace AutoTurnOver.DB
}
}
}
foreach (var item in data_detailed_list)
{
item.remarks.Append(remarks);
}
}
else // 下一个供应链长度
{
remarks.AppendLine($"根据供应链长度下单模式");
int? moq = 0;
if (item_rule.has_collect)
{
//查询商品moq
moq = conn.QuerySingleOrDefault<int?>(" select max(moq) from dc_base_sku where product_inner_code=@product_inner_code ", new { product_inner_code = itemGroup.Key.product_inner_code });
if (moq == null)
{
remarks.AppendLine($"未查询到商品moq");
throw new Exception("未查询到商品moq");
}
}
foreach (var item in itemGroup.AsEnumerable())
{
var item_order_detailed = new auto_first_order_detailed_dto
{
bailun_sku = item.bailun_sku,
quantity = 0,
remarks = new StringBuilder()
};
item_order_detailed.remarks.Append(remarks);
// 查询交期
max_delivery = null;
if ("国内仓".Equals(item_warehouse.hq_type))
{
max_delivery = conn.QuerySingleOrDefault<int?>(" select max(supplier_delivery) from dc_base_sku where product_inner_code=@product_inner_code ", new { product_inner_code = itemGroup.Key.product_inner_code });
max_delivery = conn.QuerySingleOrDefault<int?>(" select max(supplier_delivery) from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku = item.bailun_sku });
}
else
{
max_delivery = conn.QuerySingleOrDefault<int?>(" select max(supplier_delivery + `transfer_delivery`) from dc_base_sku where product_inner_code=@product_inner_code ", new { product_inner_code = itemGroup.Key.product_inner_code });
max_delivery = conn.QuerySingleOrDefault<int?>(" select max(supplier_delivery + `transfer_delivery`) from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku = item.bailun_sku });
}
if (max_delivery == null)
{
remarks.AppendLine($"未查询到交期");
throw new Exception("未查询到交期");
item_order_detailed.remarks.AppendLine($"未查询到交期");
continue;
}
item_order_detailed.remarks.AppendLine($"供应链交期 {max_delivery} ");
remarks.AppendLine($"供应链交期 {max_delivery} ");
// 查询sku日均销量
try
{
var skuSalesList = GetSkuSales(new List<string> { item.bailun_sku });
// 计算预计下单数量
var sum_quantity = max_delivery * (itemGroup.Max(s => s.product_sales) * item_rule.sales_ratio);
var sum_quantity = max_delivery.Value * (skuSalesList[0].averageSales * item_rule.sales_ratio);
item_order_detailed.remarks.AppendLine($"经过计算,预计下单数 {sum_quantity} = (供应链交期 {max_delivery} )* (日均销量 {skuSalesList[0].averageSales})* (配置的日均销量比例 {item_rule.sales_ratio})");
item_order_detailed.quantity = sum_quantity;
data_detailed_list.Add(item_order_detailed);
remarks.AppendLine($"经过计算,预计下单数 {sum_quantity} = (供应链交期 {max_delivery} )* (商品日均销量 {itemGroup.Max(s => s.product_sales)})* (配置的日均销量比例 {item_rule.sales_ratio})");
if (sum_quantity <= 0)
}
catch (Exception ex)
{
remarks.AppendLine($"经过计算,无需下单");
throw new Exception("经过计算,无需下单");
item_order_detailed.remarks.AppendLine(ex.Message);
continue;
}
foreach (var item in itemGroup.AsEnumerable())
}
var moqSb = new StringBuilder();
if (item_rule.has_collect)
{
data_detailed_list.Add(new auto_first_order_detailed_dto
moqSb.AppendLine("开始拼凑moq");
moqSb.AppendLine($" 商品moq 个数 {moq} ");
if (data_detailed_list.Sum(s => s.quantity ) < moq)
{
bailun_sku = item.bailun_sku,
quantity = 0
});
}
var demandQuantity = moq - data_detailed_list.Sum(s => s.quantity) ;
moqSb.AppendLine($" 当前需求数量 个数 {data_detailed_list.Sum(s => s.quantity) } ");
var sum_quantity_index = 0;
while (sum_quantity > 0)
int tempIndex = 0;
while (true)
{
data_detailed_list[sum_quantity_index].quantity++;
if (sum_quantity_index >= (data_detailed_list.Count - 1))
if (demandQuantity <= 0)
{
sum_quantity_index = 0;
break;
}
data_detailed_list[tempIndex].quantity++;
data_detailed_list[tempIndex].share_quantity++;
demandQuantity--;
if (data_detailed_list.Count-1 == tempIndex)
{
tempIndex = 0;
}
else
{
sum_quantity_index++;
tempIndex++;
}
sum_quantity--;
}
// 过滤掉没分配到需要下单的
data_detailed_list = data_detailed_list.Where(s => s.quantity > 0).ToList();
foreach (var item in data_detailed_list)
{
item.remarks.AppendLine($"累积未商品moq 分摊 {item.share_quantity} 个,当前预计下单 {item.quantity} ");
}
if (data_detailed_list == null || data_detailed_list.Count <= 0)
}
else
{
remarks.AppendLine($"计算完发现没有需求");
throw new Exception("计算完发现没有需求");
moqSb.AppendLine("总需求已经大于moq ,跳过该步骤");
}
}
}
......@@ -263,9 +310,8 @@ namespace AutoTurnOver.DB
product_inner_code = itemGroup.Key.product_inner_code,
good_sku_codes = "",
purchase_type_jit = 3,
remarks = remarks.ToString(),
turnover_days = max_delivery??0,
remarks = item.remarks.ToString(),
turnover_days = max_delivery ?? 0,
}, t);
}
......@@ -275,9 +321,9 @@ namespace AutoTurnOver.DB
}
catch (Exception ex)
{
var is_error = itemGroup.Max(s => s.is_error)+1;
var is_error = itemGroup.Max(s => s.is_error) + 1;
var goods_sku = $"【商品sku】:【{itemGroup.Key.product_inner_code}】【{itemGroup.Key.warehouse_code}】";
conn.Execute(" update dc_auto_first_order_sku set is_error=@is_error where id in @ids ", new { ids = itemGroup.Select(s=>s.id),is_error = is_error },t);
conn.Execute(" update dc_auto_first_order_sku set is_error=@is_error where id in @ids ", new { ids = itemGroup.Select(s => s.id), is_error = is_error }, t);
err_count = true;
conn.Insert(new dc_task_error_log
{
......@@ -286,7 +332,7 @@ namespace AutoTurnOver.DB
task_name = "auto_first_order_GeneratePurchaseAdvise",
date = DateTime.Now
}, t);
QiYeJiQiRenHelper.QiYeJiQiRenMsPush(new QiYeJiQiRenHelper.QiYeJiQiRenMsDto { msgtype = "text", text = new QiYeJiQiRenHelper.QiYeJiQiRenMsDto.text_dto { content = " 查收异常消息: "+ goods_sku + ex.Message } },
QiYeJiQiRenHelper.QiYeJiQiRenMsPush(new QiYeJiQiRenHelper.QiYeJiQiRenMsDto { msgtype = "text", text = new QiYeJiQiRenHelper.QiYeJiQiRenMsDto.text_dto { content = " 查收异常消息: " + goods_sku + ex.Message } },
"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=0ff68206-f585-4d1e-824b-630c473978d8");
foreach (var item in itemGroup.ToList())
{
......@@ -319,5 +365,20 @@ namespace AutoTurnOver.DB
}
}
/// <summary>
/// 获取sku销量
/// </summary>
public static List<pds_sku_sales_dto> GetSkuSales(List<string> skus)
{
string url = ConfigHelper.GetValue("postaveragesales");
string resultStr = HttpHelper.Request(url, RequestType.POST, skus.ToJson(), timeout: 1000 * 60 * 60 * 24, entype: "application/json");
var result = resultStr.ToObj<List<pds_sku_sales_dto>>();
if (result == null)
{
throw new Exception("pds系统异常: 未获取到sku销量数据");
}
return result;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models.ApiDto
{
/// <summary>
/// 从pds获取的sku销量
/// </summary>
public class pds_sku_sales_dto
{
public string procudeCode { get; set; }
public string sku { get; set; }
/// <summary>
/// 累积销量
/// </summary>
public decimal salesVolume { get; set; }
/// <summary>
/// 日均销量
/// </summary>
public decimal averageSales { get; set; }
}
}
......@@ -84,6 +84,9 @@ namespace AutoTurnOver.Models
{
public string bailun_sku { get; set; }
public decimal quantity { get; set; }
public decimal share_quantity { get; set; }
public StringBuilder remarks { get; set; }
}
}
......@@ -14,6 +14,7 @@ namespace ShortagePush
Console.WriteLine("推送缺货数据服务");
//new ReportServices().ShortagePush();
//new ReportServices().ShortagePush(platform: "walmart");
new ReportServices().ShortagePush();
var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
{
services.AddHostedService<ShortagePushBackgroundService>();
......
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