Commit 78333d93 by 泽锋 李

fix

parent 5cfebbff
......@@ -92,12 +92,12 @@ where t1.supplier_id = t2.suppliers_id ";
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public static dc_average_warehouse GetWarehouse(string sku, string warehousecode)
public static dc_average_warehouse_dto GetWarehouse(string sku, string warehousecode)
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("bailun_sku", sku);
parameters.Add("warehouse_code", warehousecode);
return _connection.QueryFirstOrDefault<dc_average_warehouse>("select * from dc_average_warehouse where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", parameters);
return _connection.QueryFirstOrDefault<dc_average_warehouse_dto>("select * from dc_average_warehouse where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", parameters);
}
......
......@@ -208,6 +208,7 @@ UNION ALL
/// <returns></returns>
public static List<dc_estimated_arrival_dto> EstimatedArrivalList(string sku, string warehouse_code, int index)
{
index -= 23;
var inbound_data = _connection.QueryFirstOrDefault<dc_auto_inbound>(" select * from dc_auto_inbound where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku = sku, warehouse_code = warehouse_code });
if (inbound_data == null) return new List<dc_estimated_arrival_dto>();
else
......
......@@ -482,7 +482,14 @@ from dc_auto_turnover as dat
}
/// <summary>
/// 刷新历史数据
/// </summary>
public static void ResetHistory()
{
var init_now = DateTime.Now.ToDayHome();
var total = _connection.Query<int>(" select count(1) from dc_auto_turnover ");
}
public static IEnumerable<string> GetLabelList()
{
......
......@@ -69,4 +69,97 @@ namespace AutoTurnOver.Models
/// </summary>
public int order_count_3 { get; set; }
}
public class dc_average_warehouse_dto : dc_average_warehouse
{
public decimal product_count_2_ratio
{
get
{
if (product_count > 0 && product_count_2 > 0)
{
return Math.Round(((decimal)product_count_2) / product_count, 4);
}
else
{
return 0M;
}
}
}
public string product_count_2_ratio_str
{
get
{
return product_count_2_ratio.ToString("p");
}
}
public decimal order_count_2_ratio
{
get
{
if (order_count > 0 && order_count_2 > 0)
{
return Math.Round(((decimal)order_count_2) / order_count, 4);
}
else
{
return 0M;
}
}
}
public string order_count_2_ratio_str
{
get
{
return order_count_2_ratio.ToString("p");
}
}
public decimal product_count_3_ratio
{
get
{
if (product_count > 0 && product_count_3 > 0)
{
return Math.Round(((decimal)product_count_3) / product_count, 4);
}
else
{
return 0M;
}
}
}
public string product_count_3_ratio_str
{
get
{
return product_count_3_ratio.ToString("p");
}
}
public decimal order_count_3_ratio
{
get
{
if (order_count > 0 && order_count_3 > 0)
{
return Math.Round(((decimal)order_count_3) / order_count, 4);
}
else
{
return 0M;
}
}
}
public string order_count_3_ratio_str
{
get
{
return order_count_3_ratio.ToString("p");
}
}
}
}
......@@ -563,7 +563,7 @@ namespace AutoTurnOver.Services
return AveragePurchase.GetList(supplier_ids, bailun_skus);
}
public static dc_average_warehouse GetWarehouse(string sku, string warehouse_code)
public static dc_average_warehouse_dto GetWarehouse(string sku, string warehouse_code)
{
return AveragePurchase.GetWarehouse(sku, warehouse_code);
}
......
......@@ -52,7 +52,7 @@ namespace AutoTurnOver.Services
var shortsupply = DB.dc_auto_turnover.GetAutoShortSupplyBySkuWH(sku, warehousecode);
if (sales.inventory_details!=null)
if (sales.inventory_details != null)
{
var tempinventory_details_list = sales.inventory_details.ToObj<List<decimal>>();
var tempinventory_details_list2 = sales.inventory_details.ToObj<List<decimal>>();
......@@ -62,7 +62,7 @@ namespace AutoTurnOver.Services
if (i >= 1)
{
var this_date = DateTime.Now.AddDays(0 - i);
tempinventory_details_list2[7-i] = (dailyStock.FirstOrDefault(s => this_date.Year == s.record_time.Year && this_date.Month == s.record_time.Month && this_date.Day == s.record_time.Day) ?? new dc_daily_stock_dto()).usable_stock;
tempinventory_details_list2[7 - i] = (dailyStock.FirstOrDefault(s => this_date.Year == s.record_time.Year && this_date.Month == s.record_time.Month && this_date.Day == s.record_time.Day) ?? new dc_daily_stock_dto()).usable_stock;
}
i--;
......@@ -72,21 +72,88 @@ namespace AutoTurnOver.Services
}
var sales_details = new List<int> { };
if (sales.sales_details != null)
{
var trun_sales = DB.SaleVolume.GetByTurnOverId(sales.id, sku, warehousecode);
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.AddRange(sales.sales_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)));
}
var sales_details_formula_list = new List<string>();
var sales_explain_details_list = new List<string>();
var inbound_details_list = new List<int>();
var inventory_details_list = new List<int>();
var short_supply_details_list = new List<int>();
if (sales != null)
{
for (int i = 0; i < 23; i++)
{
sales_details_formula_list.Add("");
sales_explain_details_list.Add("历史销量");
inbound_details_list.Add(0);
inventory_details_list.Add(0);
short_supply_details_list.Add(0);
}
if ((!string.IsNullOrWhiteSpace(sales.sales_details_formula)))
{
sales_details_formula_list.AddRange(sales.sales_details_formula.ToObj<List<string>>());
}
if ((!string.IsNullOrWhiteSpace(sales.sales_explain_details)))
{
sales_explain_details_list.AddRange(sales.sales_explain_details.Replace("[", "").Replace("]", "").Split(','));
}
if ((!string.IsNullOrWhiteSpace(sales.inbound_details)))
{
inbound_details_list.AddRange(sales.inbound_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)));
}
if ((!string.IsNullOrWhiteSpace(sales.inventory_details)))
{
inventory_details_list.AddRange(sales.inventory_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)));
}
if ((!string.IsNullOrWhiteSpace(sales.short_supply_details)))
{
short_supply_details_list.AddRange(sales.short_supply_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)));
}
}
list.Add(sales != null ? sales.sales_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToJson() : "[]");
list.Add(sales != null&& (!string.IsNullOrWhiteSpace(sales.sales_details_formula)) ? sales.sales_details_formula.ToObj<List<string>>().Select(s => s).ToJson() : "[]");
list.Add(sales != null ? sales.sales_explain_details.Replace("[", "").Replace("]", "").Split(',').ToJson() : "[]");
list.Add(sales_details != null ? sales_details.ToJson() : "[]");
list.Add(sales_details_formula_list.ToJson());
list.Add(sales_explain_details_list.ToJson());
//list.Add(buyputin != null ? buyputin.details : "[]");
//list.Add(allotputin != null ? allotputin.details : "[]");
list.Add(sales != null ? sales.inbound_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToJson() : "[]");
list.Add(sales != null ? sales.inventory_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToJson() : "[]");
list.Add(sales != null ? sales.short_supply_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToJson() : "[]");
list.Add(inbound_details_list.ToJson());
list.Add(inventory_details_list.ToJson());
list.Add(short_supply_details_list.ToJson());
// 计算涉及的总天数
int count = list.Max(s => s.Split(',').Length);
DateTime today = DateTime.Now.AddDays(-7);
DateTime today = DateTime.Now.AddDays(-30);
DateTime endDay = today.AddDays(count);
// 查询这些时间范围的 特殊销量情况
var configPromotionList = DB.dc_auto_turnover.ListConfigPromotion(sku, warehousecode, today, endDay);
......@@ -474,12 +541,12 @@ namespace AutoTurnOver.Services
return result_data;
}
public void ShortagePush(bool is_all = false,string platform = null)
public void ShortagePush(bool is_all = false, string platform = null)
{
// 国内仓
List<string> platform1s = new List<string> {"amazon", "aliexpress", "shopee", "wish", "lazada" };
foreach (var item in platform1s.Where(s=> string.IsNullOrWhiteSpace(platform) || platform==s))
List<string> platform1s = new List<string> { "amazon", "aliexpress", "shopee", "wish", "lazada" };
foreach (var item in platform1s.Where(s => string.IsNullOrWhiteSpace(platform) || platform == s))
{
try
{
......@@ -525,7 +592,7 @@ namespace AutoTurnOver.Services
// 国外仓2
List<string> platform3s = new List<string> { "opensky", "sears", "walmart" };
List<string> rule2 = new List<string> {"MDBLWYT", "MXBLWYT", "BLUSGDC", "USGCBL", "USHWBL", "US4PXBL" };
List<string> rule2 = new List<string> { "MDBLWYT", "MXBLWYT", "BLUSGDC", "USGCBL", "USHWBL", "US4PXBL" };
foreach (var item in platform3s.Where(s => string.IsNullOrWhiteSpace(platform) || platform == s))
{
try
......@@ -546,7 +613,7 @@ namespace AutoTurnOver.Services
}
public void ShortagePushEbay(bool is_all = false,bool is_all_haiwai = false)
public void ShortagePushEbay(bool is_all = false, bool is_all_haiwai = false)
{
try
......@@ -585,7 +652,7 @@ namespace AutoTurnOver.Services
/// <summary>
/// 过滤掉一部分不需要改在0的数据
/// </summary>
public List<dc_auto_shortage_push> ShortagePushFilter(List<dc_auto_shortage_push> datas,string platform)
public List<dc_auto_shortage_push> ShortagePushFilter(List<dc_auto_shortage_push> datas, string platform)
{
var new_datas = datas.ToJson().ToObj<List<dc_auto_shortage_push>>();
......@@ -611,7 +678,7 @@ namespace AutoTurnOver.Services
}
public void ReturnGoodsPush(string platform = null)
{
var platform_list = new List<string> { "amazon", "aliexpress", "shopee", "wish", "lazada","opensky", "sears", "walmart" };
var platform_list = new List<string> { "amazon", "aliexpress", "shopee", "wish", "lazada", "opensky", "sears", "walmart" };
foreach (var item in platform_list.Where(s => string.IsNullOrWhiteSpace(platform) || platform == s))
{
PlatformReturnGoodsPush(item);
......@@ -632,7 +699,7 @@ namespace AutoTurnOver.Services
// 记录推送状态
report.AddReturnGoodsPush(filter_datas.Where(s => !err_datas.Any(e => e.warehouseCode == s.warehouse_code && s.bailun_sku == e.sku)));
// 移除缺货改零记录 (如果以后再没有库存,继续改零)
report.removeShortagePush(datas.Where(s => !err_datas.Any(e => e.warehouseCode == s.warehouse_code && s.bailun_sku == e.sku)).Select(s=>s.shortage_push_id));
report.removeShortagePush(datas.Where(s => !err_datas.Any(e => e.warehouseCode == s.warehouse_code && s.bailun_sku == e.sku)).Select(s => s.shortage_push_id));
}
/// <summary>
......@@ -642,17 +709,17 @@ namespace AutoTurnOver.Services
{
var new_datas = datas.ToJson().ToObj<List<dc_return_goods_push>>();
// 规则一
var not_push_list = db_config.ReturnGoodsList(datas.Select(s=>s.bailun_sku).ToList());
if(not_push_list!=null && not_push_list.Count >= 1)
var not_push_list = db_config.ReturnGoodsList(datas.Select(s => s.bailun_sku).ToList());
if (not_push_list != null && not_push_list.Count >= 1)
{
new_datas = new_datas.Where(s => !not_push_list.Any(p=>p.bailun_sku==s.bailun_sku && p.warehouse_code==s.warehouse_code)).ToList();
new_datas = new_datas.Where(s => !not_push_list.Any(p => p.bailun_sku == s.bailun_sku && p.warehouse_code == s.warehouse_code)).ToList();
}
// 规则二
var buyers = new List<string> { "张莹霞", "张莹霞1", "黄静洁" };
var warehouse_codes = new List<string> { "GBLQST" };
return new_datas.Where(s => !(buyers.Any(v=>s.buyer_name==v) && warehouse_codes.Any(v => s.warehouse_code == v))).ToList();
return new_datas.Where(s => !(buyers.Any(v => s.buyer_name == v) && warehouse_codes.Any(v => s.warehouse_code == v))).ToList();
}
public List<dynamic> GetSkuWebsiteSales(bailun_sku_website_sales_search_dto search_data)
......@@ -670,7 +737,7 @@ namespace AutoTurnOver.Services
{
var dic = (IDictionary<string, object>)o;
dic["count_" + (dat_item.month + "-" + dat_item.day)] = new { val = Math.Round(dat_item.count, 2), year = dat_item.year, month = dat_item.month, day = dat_item.day };
dic["sum_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.sum,2);
dic["sum_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.sum, 2);
}
datas.Add(o);
......@@ -694,8 +761,8 @@ namespace AutoTurnOver.Services
var dic = (IDictionary<string, object>)o;
dic["count_" + (dat_item.month + "-" + dat_item.day)] = new { val = Math.Round(dat_item.count, 2), year = dat_item.year, month = dat_item.month, day = dat_item.day };
dic["v_count_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.count, 2);
dic["sum_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.sum,2);
dic["v_sum_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.sum,2);
dic["sum_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.sum, 2);
dic["v_sum_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.sum, 2);
dic["stock_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.stock, 2);
dic["v_stock_" + (dat_item.month + "-" + dat_item.day)] = Math.Round(dat_item.stock, 2);
}
......@@ -707,7 +774,7 @@ namespace AutoTurnOver.Services
}
public MemoryStream SkuWebsiteSalesExport(bailun_sku_website_sales_detailed_search_dto search_data,UserData user)
public MemoryStream SkuWebsiteSalesExport(bailun_sku_website_sales_detailed_search_dto search_data, UserData user)
{
try
{
......@@ -719,7 +786,7 @@ namespace AutoTurnOver.Services
if (list == null || list.Count <= 0) return null;
DataTable table = new DataTable();
string[] cols = new string[] { "百伦订单号","平台单号","平台","站点","sku","标签","销售数量","单价_美元","付款时间" };
string[] cols = new string[] { "百伦订单号", "平台单号", "平台", "站点", "sku", "标签", "销售数量", "单价_美元", "付款时间" };
foreach (var item in cols)
{
table.Columns.Add(item);
......@@ -767,7 +834,7 @@ namespace AutoTurnOver.Services
public List<dynamic> GetGoods(bailun_sku_goods_search_dto search_data, int offset, int limit, ref int total, string order = "", string sort = "")
{
var order_list = report.GetGoods(search_data,offset,limit,ref total,order,sort);
var order_list = report.GetGoods(search_data, offset, limit, ref total, order, sort);
List<dynamic> datas = new List<dynamic>();
foreach (var item in order_list)
{
......@@ -895,7 +962,7 @@ namespace AutoTurnOver.Services
foreach (var dat_item in item.weeks)
{
var dic = (IDictionary<string, object>)o;
dic["val_" + (dat_item.tag)] = new {val= Math.Round(dat_item.val, 2) ,date_tag = dat_item.tag };
dic["val_" + (dat_item.tag)] = new { val = Math.Round(dat_item.val, 2), date_tag = dat_item.tag };
dic["v_val_" + (dat_item.tag)] = Math.Round(dat_item.val, 2);
dic["ratio_" + (dat_item.tag)] = dat_item.ratio_str;
}
......
......@@ -66,8 +66,9 @@ namespace AutoTurnOver.Controllers
warehouse_code = warehousecode
});
var now = DateTime.Now;
var date = new List<string>();
var today = turnover_date.AddDays(-7);
var today = turnover_date.AddDays(-30);
var weeks = new List<dynamic>();
var sales_day_configs = new List<dynamic>();
for (var i = 0; i < count; i++)
......@@ -75,9 +76,9 @@ namespace AutoTurnOver.Controllers
var dateI = today.AddDays(i);
date.Add(dateI.ToString("MM/dd"));
}
for (var i = -7; i < count; i++)
for (var i = -30; i < count; i++)
{
var dateI = today.AddDays(i + 7);
var dateI = today.AddDays(i + 30);
var date_str = dateI.ToString("yyyy-MM-dd");
var weekItem = dc_base_week_coefficient_datas.FirstOrDefault(s => s.week == (int)dateI.DayOfWeek);
......@@ -89,8 +90,9 @@ namespace AutoTurnOver.Controllers
{
weeks.Add(new { value = 1, date = dateI.ToString("MM/dd"), formula = "-", val = "-" });
}
var sales_day_configItem = sales_day_config_datas.FirstOrDefault(s => s.date_str == date_str);
if (sales_day_configItem != null)
if (sales_day_configItem != null && dateI.ToDayEnd() > now.ToDayHome())
{
sales_day_configs.Add(new { date = date_str, id = sales_day_configItem.id, val = sales_day_configItem.sales });
}
......@@ -98,6 +100,7 @@ namespace AutoTurnOver.Controllers
{
sales_day_configs.Add(new { date = date_str, id = 0, val = 0 });
}
}
......@@ -111,7 +114,7 @@ namespace AutoTurnOver.Controllers
// 计算到周转期前一天的累计销量
decimal turnoverDatecumulativeSales = 0;
var salesList = result[0].ToObj<List<decimal>>();
for (int i = 7; i < turnoverData.turnover_days + 7 - 1; i++)
for (int i = 30; i < turnoverData.turnover_days + 30 - 1; i++)
{
//salesList[i] = Math.Round(salesList[i] * weeks[i].value, 0);
turnoverDatecumulativeSales += salesList[i];
......@@ -122,13 +125,13 @@ namespace AutoTurnOver.Controllers
// 累计预计到货
decimal turnoverDatepurchase = 0;
var purchaseList = result[3].ToObj<List<decimal>>();
for (int i = 7; i < turnoverData.turnover_days + 7; i++)
for (int i = 30; i < turnoverData.turnover_days + 30; i++)
{
turnoverDatepurchase += purchaseList[i];
}
var forecast_history_btime = turnoverData.gmt_modified.AddDays(-7).ToDayHome();
var forecast_history_btime = turnoverData.gmt_modified.AddDays(-30).ToDayHome();
var forecast_history_etime = turnoverData.gmt_modified.AddDays(-1).ToDayEnd();
// 查询历史预测销量
var forecast_historys = connectionHelper._connection.Query<dc_base_forecast_history>(" select * from dc_base_forecast_history where bailun_sku_warehouse_code=@bailun_sku_warehouse_code and `date`>=@btime and `date`<=@etime ", new
......@@ -153,24 +156,24 @@ namespace AutoTurnOver.Controllers
}
this_forecast_history_date = this_forecast_history_date.AddDays(1);
}
for (int i = 0; i < weeks.Count - 7; i++)
for (int i = 0; i < weeks.Count - 30; i++)
{
forecast_history_sales.Add("");
}
// 当日预测销量
var turnoverDateSales = (int)result[0].ToObj<List<decimal>>()[turnoverData.turnover_days + 7 - 1];
var turnoverDateSales = (int)result[0].ToObj<List<decimal>>()[turnoverData.turnover_days + 30 - 1];
var buyFormula = new
{
turnoverDateStr = turnoverDate.ToString("yyyy-MM-dd"), // 取值日期
turnoverDateSales = turnoverDateSales, // 当日预测销量
turnoverDateStock = (int)result[4].ToObj<List<decimal>>()[turnoverData.turnover_days + 7 - 1], // 当日预测库存,
turnoverDateStock = (int)result[4].ToObj<List<decimal>>()[turnoverData.turnover_days + 30 - 1], // 当日预测库存,
turnoverDatecumulativeSales = (int)turnoverDatecumulativeSales, // 累计销量
nowStr = DateTime.Now.ToString("yyyy-MM-dd"), // 今天的日期
nowShortage = (int)result[6].ToObj<List<decimal>>()[7], // 今天的实际缺货
cumulativeShortageDate = turnoverDate.AddDays(-1).ToString("yyyy-MM-dd"),// 一直到周转期前一天的日期
cumulativeShortage = (int)result[6].ToObj<List<decimal>>()[turnoverData.turnover_days + 7 - 1], // 一直到周转期前一天的累计缺货
cumulativeShortage = (int)result[6].ToObj<List<decimal>>()[turnoverData.turnover_days + 30 - 1], // 一直到周转期前一天的累计缺货
average_overdue = Math.Max(0, turnoverData.average_overdue),
nowDateStock = (int)result[5].ToObj<List<decimal>>()[7], // 今天的预测库存
turnoverDatepurchase = turnoverDatepurchase // 累计预计到货
......
......@@ -105,7 +105,7 @@ namespace ResetOutofstock
Console.WriteLine($"结束刷新 现金流 sku 报表 ,线程Id:{Thread.CurrentThread.ManagedThreadId}{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
if (now.Hour == 21 && now.Minute == 01)
if (now.Hour == 23 && now.Minute == 50)
{
Console.WriteLine($"开始拷贝 周转预测值 报表 数据,线程Id:{Thread.CurrentThread.ManagedThreadId}{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
dc_auto_turnover.CopyForecast();
......
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