Commit e8325f34 by lizefeng

新增实时缺货

parent 5870c325
......@@ -469,9 +469,10 @@ and EXISTS (
}
DynamicParameters parameters = new DynamicParameters();
parameters.Add("ids", ids);
string sql = @" select t1.*,t2.unit_price from dc_auto_purchase_advise_detailed as t1
string sql = @" select t1.*,t2.unit_price,t3.hq_type as 'warehouse_type' from dc_auto_purchase_advise_detailed as t1
left join dc_base_sku as t2 on t1.bailun_sku = t2.bailun_sku
where t1.id in @ids ";
left join dc_base_warehouse as t3 on t1.warehouse_code = t3.warehouse_code
where t1.id in @ids ";
if (ispush != null)
{
sql += " and ispush=@ispush ";
......
......@@ -119,5 +119,143 @@ where t1.quantity_out_stock>0
return list;
}
}
/// <summary>
/// 获取采购建议明细列表
/// </summary>
/// <param name="m"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <param name="total"></param>
/// <returns></returns>
public static List<quantity_out_stock_detail_dto> QuantityOutStockDetailList(quantity_out_stock_detail_search_dto m, int offset, int limit, ref int total, string order = "", string sort = "")
{
var list = new List<quantity_out_stock_detail_dto>();
try
{
DynamicParameters parameters = new DynamicParameters();
string sql = "";
string countSql = "";
countSql = @"
select
count(1)
from dc_base_oms_sku as t1
left join dc_base_warehouse as t_db on t1.warehouse_code = t_db.warehouse_code
left join dc_base_sku as t6 on t1.bailun_sku = t6.bailun_sku
where t1.shipping_status!='TotalShipping' and t1.pay_time>'2019-04-13'
";
sql = @"
select
t2.gmt_out_stock_modified,
t1.origin_order_id,
t1.platform_type,
t1.bailun_order_id,
t1.transaction_id,
t1.website,
t1.pay_time,
t1.seller_account,
t1.receipt_country,
t1.bailun_sku,
t1.bailun_sku_title_cn as 'sku_name',
t1.bailun_sku_quantity_ordered,
t1.warehouse_code,
t1.warehouse_name,
(case when t1.bailun_sku_quantity_ordered>t1.bailun_sku_quantity_shipped then '缺货' else '不缺货' end) as 'is_out_stock',
t2.quantity_out_stock,
t3.sum_usable_stock,
t4.sum_unshipped_quantity,
t3.warehouse_codes,
(ifnull(t4.sum_unshipped_quantity,0) - ifnull(t3.sum_usable_stock,0)) as 'sum_quantity_out_stock',
(case when t_db.hq_type!='国内仓' then '非国内仓' when ifnull(t3.sum_usable_stock,0) < ifnull(t4.sum_unshipped_quantity,0) then '缺货' else '未缺货' end) as 'is_sum_quantity_out_stock',
t6.buyer_name,
(GREATEST(t3.sum_usable_stock - t5.usable_stock,0)) as 'other_stock', -- 其他仓库存
t1.bailun_require_logistics,
t1.logistics_method_name,
( case when t7.`status`=0 or t7.`status` is null then '监控中' else '停止监控' end ) as 'monitor_status',
(case when t6.`status`=1 then '停售' else '在售' end) as 'sku_status',
(t2.quantity_transfer+t2.quantity_purchase) as 'quantity_ontheway', -- 总在途
t8.buy_ontheway_detail
from dc_base_oms_sku as t1
left join dc_mid_transit as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
left join dc_base_warehouse as t_db on t1.warehouse_code = t_db.warehouse_code
left join view_china_warehouse_stock as t3 on t1.bailun_sku = t3.bailun_sku and t_db.hq_type='国内仓'
left join view_china_warehouse_unshipped as t4 on t1.bailun_sku = t4.bailun_sku and t_db.hq_type='国内仓'
left join dc_base_stock 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 dc_auto_config_sku_warehouse as t7 on t1.bailun_sku = t7.bailun_sku and t1.warehouse_code = t7.warehouse_code
left join view_buy_ontheway_detail as t8 on t1.bailun_sku = t8.bailun_sku and t1.warehouse_code = t8.warehouse_code
where t1.shipping_status!='TotalShipping' and t1.pay_time>'2019-04-13'
";
if (!string.IsNullOrWhiteSpace(m.product_inner_code))
{
sql += " and t6.product_inner_code=@product_inner_code ";
countSql += " and t6.product_inner_code=@product_inner_code ";
parameters.Add("product_inner_code", m.product_inner_code);
}
if (!string.IsNullOrWhiteSpace(m.warehousetype))
{
sql += " and t_db.hq_type=" + $"'{m.warehousetype}'";
countSql += " and t_db.hq_type=" + $"'{m.warehousetype}'";
}
if (m.warehousearea > 0)
{
sql += " and t_db.area_id=" + m.warehousearea;
countSql += " and t_db.area_id=" + m.warehousearea;
}
if (!string.IsNullOrWhiteSpace(m.bailun_sku))
{
sql += $" and t1.bailun_sku=@bailun_sku ";
countSql += $" and t1.bailun_sku=@bailun_sku ";
parameters.Add("bailun_sku", m.bailun_sku);
}
if (m.warehouse_code != null)
{
sql += $" and t1.warehouse_code=@warehouse_code ";
countSql += $" and t1.warehouse_code=@warehouse_code ";
parameters.Add("warehouse_code", m.warehouse_code);
}
if (!string.IsNullOrWhiteSpace(m.purchase_user))
{
sql += " and t6.buyer_name =@buyer_name ";
countSql += " and t6.buyer_name =@buyer_name ";
parameters.Add("buyer_name", m.purchase_user);
}
if ( limit > 10000)
{
total = 0;
}
else
{
total = _connection.ExecuteScalar<int>(countSql, parameters);
//设置默认排序字段
if (!string.IsNullOrEmpty(sort) && !string.IsNullOrEmpty(order))
{
sql += " order by " + sort;
if (!string.IsNullOrEmpty(order))
{
sql += " " + order;
}
else
{
sql += " asc";
}
}
sql += " limit " + offset + "," + limit;
}
var obj = _connection.Query<quantity_out_stock_detail_dto>(sql, parameters, buffered: false, commandTimeout: 0);
return obj.AsList();
}
catch (Exception ex)
{
return list;
}
}
}
}
......
......@@ -7,10 +7,20 @@ namespace AutoTurnOver.Models.ApiDto
public class mPlanToPurchaseDto
{
///<summary>
///从哪个仓库发出(仓库编码)
///从哪个仓库发出(仓库编码) 国内到货仓
///</summary>
public string bp_sendfromCode { get; set; }
/// <summary>
/// 是否调拨
/// </summary>
public int bp_send { get; set; }
/// <summary>
/// 海外仓
/// </summary>
public string bp_sendtoCode { get; set; }
///<summary>
///运输方式
///</summary>
......
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models.Report
{
/// <summary>
/// 缺货明细
/// </summary>
public class quantity_out_stock_detail_dto
{
/// <summary>
/// 缺货更新时间
/// </summary>
public DateTime? gmt_out_stock_modified { get; set; }
/// <summary>
/// 平台订单号
/// </summary>
public string origin_order_id { get; set; }
/// <summary>
/// 平台
/// </summary>
public string platform_type { get; set; }
/// <summary>
/// 百伦订单号
/// </summary>
public string bailun_order_id { get; set; }
/// <summary>
/// 付款交易号
/// </summary>
public string transaction_id { get; set; }
public string website { get; set; }
/// <summary>
/// 付款时间
/// </summary>
public DateTime? pay_time { get; set; }
/// <summary>
/// 销售账号
/// </summary>
public string seller_account { get; set; }
/// <summary>
/// 国家
/// </summary>
public string receipt_country { get; set; }
/// <summary>
/// sku
/// </summary>
public string bailun_sku { get; set; }
public string sku_name { get; set; }
/// <summary>
/// 订单销量
/// </summary>
public decimal bailun_sku_quantity_ordered { get; set; }
public string warehouse_code { get; set; }
public string warehouse_name { get; set; }
public string is_out_stock { get; set; }
/// <summary>
/// 仓库总缺货
/// </summary>
public decimal? quantity_out_stock { get; set; }
/// <summary>
/// 国内仓可用库存
/// </summary>
public decimal? sum_usable_stock { get; set; }
/// <summary>
/// 国内仓待发货数量
/// </summary>
public decimal? sum_unshipped_quantity { get; set; }
/// <summary>
/// 国内仓累计缺货
/// </summary>
public decimal? sum_quantity_out_stock { get; set; }
/// <summary>
/// 国内有库存的仓库
/// </summary>
public string warehouse_codes { get; set; }
/// <summary>
/// 国内仓其他有库存仓库
/// </summary>
public string other_codes
{
get
{
if (!string.IsNullOrWhiteSpace(warehouse_codes))
{
return warehouse_codes.Replace(warehouse_code, "");
}
else
{
return null;
}
}
}
/// <summary>
/// 其他国内仓总库存
/// </summary>
public decimal? other_stock { get; set; }
/// <summary>
/// 国内仓总库存是否缺货
/// </summary>
public string is_sum_quantity_out_stock { get; set; }
/// <summary>
/// 采购员
/// </summary>
public string buyer_name { get; set; }
/// <summary>
/// 平台指定物流
/// </summary>
public string bailun_require_logistics { get; set; }
/// <summary>
/// 发货物流方式
/// </summary>
public string logistics_method_name { get; set; }
/// <summary>
/// 监控状态
/// </summary>
public string monitor_status { get; set; }
/// <summary>
/// 停售状态
/// </summary>
public string sku_status { get; set; }
/// <summary>
/// 总在途
/// </summary>
public decimal? quantity_ontheway { get; set; }
/// <summary>
/// 在途数据
/// </summary>
public string buy_ontheway_detail { get; set; }
}
public class quantity_out_stock_detail_search_dto
{
public string bailun_sku { get; set; }
public string warehousetype { get; set; }
public int? warehousearea { get; set; }
public string warehouse_code { get; set; }
public string product_inner_code { get; set; }
public string purchase_user { get; set; }
}
}
......@@ -56,6 +56,7 @@ namespace AutoTurnOver.Models.Report
public string purchase_user { get; set; }
public bool isSum { get; set; }
public bool isSum { get; set; }
}
}
......@@ -159,6 +159,11 @@ namespace AutoTurnOver.Models
/// 单价
/// </summary>
public decimal unit_price { get; set; }
/// <summary>
/// 仓库类型
/// </summary>
public string warehouse_type { get; set; }
}
public class dc_auto_purchase_advise_detailed_dto : dc_auto_purchase_advise_detailed
......@@ -195,6 +200,8 @@ namespace AutoTurnOver.Models
/// </summary>
public decimal sudden_increase { get; set; }
}
......
......@@ -147,13 +147,15 @@ namespace AutoTurnOver.Services
DateTime now = DateTime.Now;
// 查询未推送成功的采购建议的明细
var detailList = purchase_advise.BuyDetailList(datas.Select(s => s.id).ToList(), false);
foreach (var item in detailList.GroupBy(s => s.warehouse_code))
foreach (var item in detailList.GroupBy(s => new { s.warehouse_code, s.warehouse_type }))
{
mPlanToPurchaseDto data = new mPlanToPurchaseDto
{
bp_sendtype = 1,
bp_sendfromCode = item.Key,
bp_send = item.Key.warehouse_type != "国内仓" ? 1 : 0,
bp_sendfromCode = item.Key.warehouse_type != "国内仓" ? "GZBLZZG" : item.Key.warehouse_code,
bp_sendtoCode = item.Key.warehouse_type != "国内仓" ? item.Key.warehouse_code : null,
type = item.Any(s => s.type == 2) ? 2 : item.Any(s => s.type == 1) ? 1 : 3,
bi_buyplandetail = new List<bi_buyplandetail>(),
bp_remark = $"用户{user.UserName} 在 aims 操作推送"
......
......@@ -315,5 +315,10 @@ namespace AutoTurnOver.Services
{
return report.QuantityOutStockList(m, offset, limit,ref total, order, sort);
}
public List<quantity_out_stock_detail_dto> QuantityOutStockDetailList(quantity_out_stock_detail_search_dto m, int offset, int limit, ref int total, string order = "", string sort = "")
{
return report.QuantityOutStockDetailList(m, offset, limit, ref total, order, sort);
}
}
}
......@@ -174,7 +174,7 @@ namespace AutoTurnOver.Controllers
DataTable table = new DataTable();
string[] cols = new string[] { "初始建议数", "系统建议数", "采购数量", "是否已推送", "时间", "sku", "产品名称", "产品14日日均", "仓库编码","仓库名称",
"内部商品编码", "商品建议采购", "商品14日日均", "商品moq", "日均加权销量", "缺货", "调拨在途", "采购在途", "库存数",
"采购金额", "供应链长度", "供应商名称", "采购类型","采购员"
"采购金额", "供应链长度", "供应商名称", "采购类型","采购员","突增关注"
};
foreach (var item in cols)
{
......@@ -209,6 +209,7 @@ namespace AutoTurnOver.Controllers
row["供应商名称"] = itemData.suppliers_name;
row["采购类型"] = itemData.type_str;
row["采购员"] = itemData.buyer_name;
row["突增关注"] = itemData.sudden_increase;
table.Rows.Add(row);
}
......
......@@ -214,5 +214,118 @@ namespace AutoTurnOver.Controllers
return File(memory, "text/csv", "实时缺货数据.csv");
}
/// <summary>
/// 实时库存
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
public JsonResult QuantityOutStockDetailList(string bailun_sku, string warehousecode, string product_inner_code, string purchase_user, int offset, int limit, string order, string sort, string warehousetype, int? warehousearea)
{
var m = new quantity_out_stock_detail_search_dto
{
bailun_sku = bailun_sku,
product_inner_code = product_inner_code,
purchase_user = purchase_user,
warehousearea = warehousearea,
warehousetype = warehousetype,
warehouse_code = warehousecode
};
var services = new ReportServices();
var total = 0;
var list = services.QuantityOutStockDetailList(m, offset, limit, ref total, order: order, sort: sort);
return new JsonResult(new
{
rows = list,
total = total,
});
}
/// <summary>
/// 导出实时缺货
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult QuantityOutStockDetailExport(string bailun_sku, string warehousecode, string product_inner_code, string purchase_user, int offset, int limit, string order, string sort, string warehousetype, int? warehousearea)
{
var m = new quantity_out_stock_detail_search_dto
{
bailun_sku = bailun_sku,
product_inner_code = product_inner_code,
purchase_user = purchase_user,
warehousearea = warehousearea,
warehousetype = warehousetype,
warehouse_code = warehousecode
};
var services = new ReportServices();
var total = 0;
var list = services.QuantityOutStockDetailList(m, 0, int.MaxValue, ref total, order: order, sort: sort);
// Detail
DataTable table = new DataTable();
string[] cols = new string[] { "缺货统计时间", "平台订单号", "平台类型", "百伦订单号", "付款交易号", "站点", "付款时间", "销售账号","国家","sku",
"产品名称", "订单sku销量", "发货仓库编码","发货仓库", "是否缺货", "仓库总缺货", "国内仓总缺货", "其他有库存仓库", "其他仓库库存数","国内仓是否缺货","采购员",
"平台物流方式", "发货物流方式", "sku监控状态", "销售状态", "总在途库存数", "采购在途数据"
};
foreach (var item in cols)
{
table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["缺货统计时间"] = itemData.gmt_out_stock_modified;
row["平台订单号"] = itemData.origin_order_id;
row["平台类型"] = itemData.platform_type;
row["百伦订单号"] = itemData.bailun_order_id;
row["付款交易号"] = itemData.transaction_id;
row["站点"] = itemData.website;
row["付款时间"] = itemData.pay_time;
row["销售账号"] = itemData.seller_account;
row["国家"] = itemData.receipt_country;
row["sku"] = itemData.bailun_sku;
row["产品名称"] = itemData.sku_name;
row["订单sku销量"] = itemData.bailun_sku_quantity_ordered;
row["发货仓库编码"] = itemData.warehouse_code;
row["发货仓库"] = itemData.warehouse_name;
row["是否缺货"] = itemData.is_out_stock;
row["仓库总缺货"] = itemData.quantity_out_stock;
row["国内仓总缺货"] = itemData.sum_quantity_out_stock;
row["其他有库存仓库"] = itemData.other_codes;
row["其他仓库库存数"] = itemData.other_stock;
row["国内仓是否缺货"] = itemData.is_sum_quantity_out_stock;
row["采购员"] = itemData.buyer_name;
row["平台物流方式"] = itemData.bailun_require_logistics;
row["发货物流方式"] = itemData.logistics_method_name;
row["sku监控状态"] = itemData.monitor_status;
row["销售状态"] = itemData.sku_status;
row["总在途库存数"] = itemData.quantity_ontheway;
row["采购在途数据"] = itemData.buyer_name;
table.Rows.Add(row);
}
var fileName = AppContext.BaseDirectory + @"Result\RealtimeStock\实时缺货明细数据.csv";
DataTableHelper.SaveCSV(table, fileName);
var memory = new MemoryStream();
using (var stream = new FileStream(fileName, FileMode.Open))
{
stream.CopyTo(memory);
}
memory.Position = 0;
return File(memory, "text/csv", "实时缺货明细数据.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