Commit 4a59478c by 泽锋 李

新增库存监控计算

parent 07fcd23f
using AutoTurnOver.DB.Base;
using AutoTurnOver.Models;
using AutoTurnOver.Models.Base;
using Dapper;
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.DB
{
public class dc_auto_stock_monitor_dao : connectionHelper
{
public static Page<dc_auto_stock_monitor_dto> GetPage(dc_auto_stock_monitor_search_dto search)
{
string sql = @" select
t1.bailun_sku,
t1.product_code,
t1.sku_title_cn,
t1.develop_time,
t1.push_time,
t1.product_type_desc,
t1.source,
t1.unit_price,
t1.buyer_name,
t1.weight,
( case when t5.bailun_sku is not null then '监控中' else '停止监控' end ) as 'monitor_status',
t2.*,
t1.`status`
from dc_base_sku as t1
left join dc_auto_stock_monitor as t2 on t1.bailun_sku = t2.bailun_sku
left join dc_auto_monitor_sku as t5 on t1.bailun_sku = t5.bailun_sku
where EXISTS (select * from dc_base_stock as t_s where t_s.bailun_sku = t1.bailun_sku) ";
DynamicParameters parameters = new DynamicParameters();
if (search != null)
{
if (search.bailun_sku != null)
{
sql += " and t1.bailun_sku=@bailun_sku ";
parameters.Add("bailun_sku", search.bailun_sku);
}
if (search.type==1)
{
sql += " and t1.haiwai_us_usable_stock>0 ";
}else if(search.type == 2)
{
sql += " and t1.haiwai_uk_usable_stock>0 ";
}else if(search.type == 3)
{
sql += " and t1.guangzhou01_transfer_stock<=0 ";
}else if(search.type == 4)
{
sql += " and t1.haiwai_uk_transfer<=0 ";
}else if(search.type == 5)
{
sql += " and t1.haiwai_us_transfer<=0 ";
}
}
return _connection.Page<dc_auto_stock_monitor_dto>(sql, search, parameters);
}
}
}
...@@ -790,6 +790,7 @@ end ...@@ -790,6 +790,7 @@ end
{ {
try try
{ {
_connection.Execute(@" -- 刷新 订单items映射表 _connection.Execute(@" -- 刷新 订单items映射表
set session transaction isolation level read uncommitted; set session transaction isolation level read uncommitted;
start transaction; start transaction;
...@@ -1288,6 +1289,25 @@ alter table dc_base_purchase_7 rename dc_base_purchase_7Temp; ...@@ -1288,6 +1289,25 @@ alter table dc_base_purchase_7 rename dc_base_purchase_7Temp;
alter table dc_base_purchase_7_temp rename dc_base_purchase_7; alter table dc_base_purchase_7_temp rename dc_base_purchase_7;
alter table dc_base_purchase_7Temp rename dc_base_purchase_7_temp; alter table dc_base_purchase_7Temp rename dc_base_purchase_7_temp;
truncate table dc_base_purchase_7_temp;", new { time = DateTime.Now.AddDays(-8).ToString("yyyy-MM-dd 00:00:00") }, commandTimeout: 0); truncate table dc_base_purchase_7_temp;", new { time = DateTime.Now.AddDays(-8).ToString("yyyy-MM-dd 00:00:00") }, commandTimeout: 0);
_connection.Execute(@"-- 刷新 订单 dc_auto_monitor_sku 映射表
set session transaction isolation level read uncommitted;
start transaction;
-- 清空视图表的数据
Truncate table dc_auto_monitor_sku_temp;
INSERT into dc_auto_monitor_sku_temp(`bailun_sku`) (
select
* from monitor_sku_view
);
alter table dc_auto_monitor_sku rename dc_auto_monitor_skuTemp;
alter table dc_auto_monitor_sku_temp rename dc_auto_monitor_sku;
alter table dc_auto_monitor_skuTemp rename dc_auto_monitor_sku_temp;
truncate table dc_auto_monitor_sku_temp; ", commandTimeout: 0);
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -1332,7 +1352,7 @@ sum(case when t2.hq_type='第三方仓库' and t2.area_id=6 then t3.usable_stock ...@@ -1332,7 +1352,7 @@ sum(case when t2.hq_type='第三方仓库' and t2.area_id=6 then t3.usable_stock
sum(case when t2.hq_type='第三方仓库' and t2.area_id=6 then t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'haiwai_uk_transfer', -- 海外仓uk仓 在途库存 sum(case when t2.hq_type='第三方仓库' and t2.area_id=6 then t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'haiwai_uk_transfer', -- 海外仓uk仓 在途库存
sum(case when t2.hq_type='第三方仓库' and t2.area_id=7 then t3.usable_stock else 0 end) as 'haiwai_us_usable_stock', -- 海外仓us仓 可配库存 sum(case when t2.hq_type='第三方仓库' and t2.area_id=7 then t3.usable_stock else 0 end) as 'haiwai_us_usable_stock', -- 海外仓us仓 可配库存
sum(case when t2.hq_type='第三方仓库' and t2.area_id=7 then t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'haiwai_us_transfer', -- 海外仓us仓 在途库存 sum(case when t2.hq_type='第三方仓库' and t2.area_id=7 then t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'haiwai_us_transfer', -- 海外仓us仓 在途库存
sum(case when t2.hq_type='FBA仓' then t3.usable_stock else 0 end) as 'fba_usable_stock', -- fba 可用库存 sum(case when t2.hq_type='FBA仓' then t3.usable_stock + t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'fba_usable_stock', -- fba 可用库存
sum(case when t2.hq_type in ('第三方仓库','FBA仓') then t3.usable_stock + t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'haiwai_usable_stock', -- 海外仓可用库存 sum(case when t2.hq_type in ('第三方仓库','FBA仓') then t3.usable_stock + t1.quantity_purchase + t1.quantity_transfer else 0 end) as 'haiwai_usable_stock', -- 海外仓可用库存
sum(case when t1.warehouse_code='GZBLWH' then t5.history_sevenday_sales else 0 end) as 'guangzhou01_history_sevenday_sales', -- 广州01 日均 sum(case when t1.warehouse_code='GZBLWH' then t5.history_sevenday_sales else 0 end) as 'guangzhou01_history_sevenday_sales', -- 广州01 日均
sum(case when t2.hq_type='第三方仓库' and t2.area_id=6 then t5.history_sevenday_sales else 0 end) as 'haiwai_uk_history_sevenday_sales', -- 海外仓uk仓 日均 sum(case when t2.hq_type='第三方仓库' and t2.area_id=6 then t5.history_sevenday_sales else 0 end) as 'haiwai_uk_history_sevenday_sales', -- 海外仓uk仓 日均
......
using System; using AutoTurnOver.Models.Base;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
...@@ -7,6 +8,67 @@ namespace AutoTurnOver.Models ...@@ -7,6 +8,67 @@ namespace AutoTurnOver.Models
public class dc_auto_stock_monitor_dto public class dc_auto_stock_monitor_dto
{ {
public int id { get; set; } public int id { get; set; }
/// <summary>
/// 商品编码
/// </summary>
public string product_code { get; set; }
/// <summary>
/// 中文标题
/// </summary>
public string sku_title_cn { get; set; }
/// <summary>
/// 开发时间
/// </summary>
public DateTime? develop_time { get; set; }
/// <summary>
/// 推送产品库时间
/// </summary>
public DateTime? push_time { get; set; }
/// <summary>
/// 产品类型
/// </summary>
public string product_type_desc { get; set; }
/// <summary>
/// 采购员
/// </summary>
public string buyer_name { get; set; }
/// <summary>
/// 重量
/// </summary>
public decimal weight { get; set; }
/// <summary>
/// 监控状态
/// </summary>
public string monitor_status { get; set; }
/// <summary>
/// 停售状态
/// </summary>
public int status { get; set; }
/// <summary>
/// 停售状态
/// </summary>
public string status_str { get {
switch (status)
{
case 1:return "停售";
case 2:return "在售";
default:return "未知";
}
} }
public int? source { get; set; }
public string source_str { get {
switch (source)
{
case 1:return "精准开发";
case 2:return "线下(其他)";
case 3:return "线下美容";
case 6:return "普货供应商推荐";
case 7:return "服装产品中心";
case 11:return "无库供应商推荐";
default:return (source??0).ToString();
}
} }
public decimal? unit_price { get; set; } public decimal? unit_price { get; set; }
public string bailun_sku { get; set; } public string bailun_sku { get; set; }
/// <summary> /// <summary>
...@@ -25,11 +87,19 @@ namespace AutoTurnOver.Models ...@@ -25,11 +87,19 @@ namespace AutoTurnOver.Models
/// 广州01 在途 /// 广州01 在途
/// </summary> /// </summary>
public decimal? guangzhou01_transfer_stock { get; set; } public decimal? guangzhou01_transfer_stock { get; set; }
/// <summary>
/// 广01总库存
/// </summary>
public decimal guangzhou01_stock { get
{
return (guangzhou01_transfer_stock ?? 0) + (guangzhou01_usable_stock ?? 0);
} }
/// <summary> /// <summary>
/// 广州01总库存金额 /// 广州01总库存金额
/// </summary> /// </summary>
public decimal? guangzhou01_stock_amount { get { public decimal? guangzhou01_stock_amount { get {
return ((guangzhou01_transfer_stock ?? 0) + (guangzhou01_usable_stock ?? 0)) * (unit_price ?? 0); return guangzhou01_stock * (unit_price ?? 0);
} } } }
/// <summary> /// <summary>
/// 海外仓uk仓 可配库存 /// 海外仓uk仓 可配库存
...@@ -42,7 +112,7 @@ namespace AutoTurnOver.Models ...@@ -42,7 +112,7 @@ namespace AutoTurnOver.Models
/// <summary> /// <summary>
/// 海外仓us仓 可配库存 /// 海外仓us仓 可配库存
/// </summary> /// </summary>
public decimal haiwai_us_usable_stock { get; set; } public decimal? haiwai_us_usable_stock { get; set; }
/// <summary> /// <summary>
/// 海外仓us仓 在途库存 /// 海外仓us仓 在途库存
/// </summary> /// </summary>
...@@ -52,26 +122,133 @@ namespace AutoTurnOver.Models ...@@ -52,26 +122,133 @@ namespace AutoTurnOver.Models
/// </summary> /// </summary>
public decimal? fba_usable_stock { get; set; } public decimal? fba_usable_stock { get; set; }
/// <summary> /// <summary>
/// 海外仓可用库存 /// 海外仓库存 (可配+在途)
/// </summary> /// </summary>
public decimal? haiwai_usable_stock { get; set; } public decimal? haiwai_usable_stock { get; set; }
/// <summary>
/// 海外仓库存金额
/// </summary>
public decimal? haiwai_stock_amount { get
{
return (haiwai_usable_stock ?? 0) * (unit_price ?? 0);
} }
/// <summary> /// <summary>
/// 广州01 日均 /// 广州01 日均
/// </summary> /// </summary>
public decimal? guangzhou01_history_sevenday_sales { get; set; } public decimal? guangzhou01_history_sevenday_sales { get; set; }
/// <summary>
/// 广01库存可消耗天数
/// </summary>
public decimal? guangzhou01_consume_days { get
{
if (guangzhou01_stock <= 0)
{
return 0;
}else if (guangzhou01_history_sevenday_sales==null || guangzhou01_history_sevenday_sales <= 0)
{
return 0;
}
else
{
return Math.Round(guangzhou01_stock*1.0M/ guangzhou01_history_sevenday_sales.Value, 2);
}
} }
/// <summary> /// <summary>
/// 海外仓uk仓 日均 /// 海外仓uk仓 日均
/// </summary> /// </summary>
public decimal? haiwai_uk_history_sevenday_sales { get; set; } public decimal? haiwai_uk_history_sevenday_sales { get; set; }
/// <summary>
/// 海外 uk 仓库存可消耗天
/// </summary>
public decimal haiwai_uk_consume_days
{
get
{
var sum_stock = (haiwai_uk_usable_stock ?? 0) + (haiwai_uk_transfer ?? 0);
if(sum_stock <= 0)
{
return 0;
}else if(haiwai_uk_history_sevenday_sales==null || haiwai_uk_history_sevenday_sales <= 0)
{
return 0;
}else
{
return Math.Round(sum_stock * 1.0M/ haiwai_uk_history_sevenday_sales.Value, 2);
}
}
}
/// <summary> /// <summary>
/// 海外仓us仓 日均 /// 海外仓us仓 日均
/// </summary> /// </summary>
public decimal? haiwai_us_history_sevenday_sales { get; set; } public decimal? haiwai_us_history_sevenday_sales { get; set; }
/// <summary> /// <summary>
/// 海外 us 仓库存可消耗天
/// </summary>
public decimal haiwai_us_consume_days
{
get
{
var sum_stock = (haiwai_us_usable_stock ?? 0) + (haiwai_us_transfer ?? 0);
if (sum_stock <= 0)
{
return 0;
}
else if (haiwai_us_history_sevenday_sales == null || haiwai_us_history_sevenday_sales <= 0)
{
return 0;
}
else
{
return Math.Round(sum_stock * 1.0M / haiwai_us_history_sevenday_sales.Value, 2);
}
}
}
/// <summary>
/// fba 仓 日均 /// fba 仓 日均
/// </summary> /// </summary>
public decimal? haiwai_fba_history_sevenday_sales { get; set; } public decimal? haiwai_fba_history_sevenday_sales { get; set; }
/// <summary>
/// fba 仓库存可用天数
/// </summary>
public decimal fba_consume_days
{
get
{
var sum_stock = (fba_usable_stock ?? 0);
if (sum_stock <= 0)
{
return 0;
}
else if (haiwai_fba_history_sevenday_sales == null || haiwai_fba_history_sevenday_sales <= 0)
{
return 0;
}
else
{
return Math.Round(sum_stock * 1.0M / haiwai_fba_history_sevenday_sales.Value, 2);
}
}
}
}
public class dc_auto_stock_monitor_search_dto : page_search_dto
{
/// <summary>
/// 1 = us海外仓可上-美国仓有库存
/// 2 = uk海外仓可上-英国国仓有库存
/// 3 = 中国未订货
/// 4 = uk海外仓未订货
/// 5 =us海外仓未订货
/// </summary>
public int? type { get; set; }
public string bailun_sku { get; set; }
} }
} }
using AutoTurnOver.DB;
using AutoTurnOver.Models;
using AutoTurnOver.Models.Base;
using AutoTurnOver.Utility;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
namespace AutoTurnOver.Services
{
public class StockMonitorService
{
public Page<dc_auto_stock_monitor_dto> GetPage(dc_auto_stock_monitor_search_dto search)
{
return dc_auto_stock_monitor_dao.GetPage(search);
}
private static int export_count = 0;
public MemoryStream Export(UserData user, dc_auto_stock_monitor_search_dto search)
{
try
{
export_count++;
var fileName = AppContext.BaseDirectory + $@"Result\RealtimeStock\{user.UserAccount}库存监控-{DateTime.Now.ToString("yyyyMMddHHmmss")}.csv";
int page = 1;
int rows = 50000;
if (export_count == 1)
{
rows = 250000;
}
while (true)
{
var page_data = GetPage(search);
var list = page_data.Items;
if (list == null || list.Count <= 0) break;
DataTable table = new DataTable();
string[] cols = new string[] { "商品编码","sku编码", "中文标题", "开发时间","推送产品库时间", "产品类型", "商品来源", "刊登标签","侵权标签",
"采购员","采购成本","重量","监控状态","停售状态","国内仓缺货总数","国外仓缺货总数","广州01可用库存","广州01在途库存","广州01仓总库存","广州01仓库存总金额",
"海外仓uk仓在途","海外仓uk仓可配库存","海外仓us仓在途","海外仓us仓可配库存","fba仓库存","海外仓总库存金额","广州01-7天日均","广州01-消化天数","uk海外仓-7天日均","uk海外仓-消化天数",
"us海外仓-7天日均","us海外仓-消化天数","fba仓-7天日均","fba仓-消化天数"
};
foreach (var item in cols)
{
table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["商品编码"] = itemData.product_code;
row["sku编码"] = itemData.bailun_sku;
row["中文标题"] = itemData.sku_title_cn;
row["开发时间"] = itemData.develop_time;
row["推送产品库时间"] = itemData.push_time;
row["产品类型"] = itemData.product_type_desc;
row["商品来源"] = itemData.source_str;
row["刊登标签"] = "暂无";
row["侵权标签"] = "暂无";
row["采购员"] = itemData.buyer_name;
row["采购成本"] = itemData.unit_price;
row["重量"] = itemData.weight;
row["监控状态"] = itemData.monitor_status;
row["停售状态"] = itemData.status_str;
row["国内仓缺货总数"] = itemData.china_quantity_out_stock;
row["国外仓缺货总数"] = itemData.not_china_quantity_out_stock;
row["广州01可用库存"] = itemData.guangzhou01_usable_stock;
row["广州01在途库存"] = itemData.guangzhou01_transfer_stock;
row["广州01仓总库存"] = itemData.guangzhou01_stock;
row["广州01仓库存总金额"] = itemData.guangzhou01_stock_amount;
row["海外仓uk仓在途"] = itemData.haiwai_uk_transfer;
row["海外仓uk仓可配库存"] = itemData.haiwai_uk_usable_stock;
row["海外仓us仓在途"] = itemData.haiwai_us_transfer;
row["海外仓us仓可配库存"] = itemData.haiwai_us_usable_stock;
row["fba仓库存"] = itemData.fba_usable_stock;
row["海外仓总库存金额"] = itemData.haiwai_stock_amount;
row["广州01-7天日均"] = itemData.guangzhou01_history_sevenday_sales;
row["广州01-消化天数"] = itemData.guangzhou01_consume_days;
row["uk海外仓-7天日均"] = itemData.haiwai_uk_history_sevenday_sales;
row["uk海外仓-消化天数"] = itemData.haiwai_uk_consume_days;
row["us海外仓-7天日均"] = itemData.haiwai_us_history_sevenday_sales;
row["us海外仓-消化天数"] = itemData.haiwai_us_consume_days;
row["fba仓-7天日均"] = itemData.haiwai_fba_history_sevenday_sales;
row["fba仓-消化天数"] = itemData.fba_consume_days;
table.Rows.Add(row);
}
CsvFileHelper.SaveCSV(table, fileName, page == 1);
page++;
}
var memory = new MemoryStream();
using (var stream = new FileStream(fileName, FileMode.Open))
{
stream.CopyTo(memory);
}
memory.Position = 0;
export_count--;
return memory;
}
catch (Exception)
{
export_count--;
throw;
}
}
}
}
...@@ -155,5 +155,48 @@ namespace AutoTurnOver.Controllers ...@@ -155,5 +155,48 @@ namespace AutoTurnOver.Controllers
total = total, total = total,
}); });
} }
/// <summary>
/// 库存监控
/// </summary>
/// <returns></returns>
public JsonResult StockMonitorList(int? type, string bailun_sku,int offset, int limit, string order, string sort)
{
try
{
var services = new StockMonitorService();
var page_data = services.GetPage(new dc_auto_stock_monitor_search_dto { type = type, bailun_sku =bailun_sku,page= offset+1,rows = limit,sidx = sort, sord = order });
return new JsonResult(new
{
rows = page_data.Items,
total = page_data.TotalItems
});
}
catch (Exception ex)
{
return new JsonResult(new
{
message = ex.Message,
stack_trace = ex.StackTrace
});
}
}
/// <summary>
/// 导出实时库存
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult ExportStockMonitor(int? type, string bailun_sku)
{
var user = AutoUtility.GetUser();
var memory = new StockMonitorService().Export(user, new dc_auto_stock_monitor_search_dto { type = type, bailun_sku = bailun_sku, page = 1, rows = int.MaxValue});
return File(memory, "text/csv", $"{user.UserAccount}库存监控.csv");
}
} }
} }
\ 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