Commit 3cc443ae by lizefeng

把sku的调拨入库,调拨打包,调拨头程配置导入

把所有被指定的默认打包天数都改成1
采购平均交期按第一次的签收时间
如果调拨单的数据只有一条,则忽略,不计算平均值
针对商品编码进行moq特殊计算
parent c4b9b8b2
...@@ -179,12 +179,14 @@ left join (select t2_1.transfer_order_id,max(t2_1.arrival_time) as 'create_time' ...@@ -179,12 +179,14 @@ left join (select t2_1.transfer_order_id,max(t2_1.arrival_time) as 'create_time'
left join (select t2_1.transfer_order_id,max(t2_1.create_time) as 'create_time' from dc_base_transfer_inbound as t2_1 where deleted =0 GROUP BY t2_1.transfer_order_id) as t4 on t1.transfer_order_id = t4.transfer_order_id left join (select t2_1.transfer_order_id,max(t2_1.create_time) as 'create_time' from dc_base_transfer_inbound as t2_1 where deleted =0 GROUP BY t2_1.transfer_order_id) as t4 on t1.transfer_order_id = t4.transfer_order_id
left join (select t2_1.transfer_order_id,max(t2_1.create_time) as 'create_time' from dc_base_transfer_verify as t2_1 where deleted =0 GROUP BY t2_1.transfer_order_id) as t5 on t1.transfer_order_id = t5.transfer_order_id left join (select t2_1.transfer_order_id,max(t2_1.create_time) as 'create_time' from dc_base_transfer_verify as t2_1 where deleted =0 GROUP BY t2_1.transfer_order_id) as t5 on t1.transfer_order_id = t5.transfer_order_id
left join (select t2_1.transfer_order_id,max(t2_1.create_time) as 'create_time' from dc_base_transfer_complete as t2_1 where deleted =0 GROUP BY t2_1.transfer_order_id) as t6 on t1.transfer_order_id = t6.transfer_order_id left join (select t2_1.transfer_order_id,max(t2_1.create_time) as 'create_time' from dc_base_transfer_complete as t2_1 where deleted =0 GROUP BY t2_1.transfer_order_id) as t6 on t1.transfer_order_id = t6.transfer_order_id
left join dc_base_warehouse as t_w on t1.warehouse_code = t_w.warehouse_code
where t1.bailun_sku=@bailun_sku and t1.warehouse_code=@warehouse_code and t1.deleted=0 where t1.bailun_sku=@bailun_sku and t1.warehouse_code=@warehouse_code and t1.deleted=0
and t1.create_time is not null and t2.create_time is not null and t4.create_time is not null and t5.create_time is not null and t6.create_time is not null and t1.create_time is not null and t2.create_time is not null and t4.create_time is not null and t5.create_time is not null and t6.create_time is not null
and t4.create_time>='2018-01-01' and t3.create_time>='2018-01-01' and t4.create_time>='2018-01-01' and t3.create_time>='2018-01-01'
and t2.create_time < t1.create_time -- 调拨天数不为负数 and t2.create_time < t1.create_time -- 调拨天数不为负数
and t5.create_time < t3.create_time -- 头程天数不为负数 and t5.create_time < t3.create_time -- 头程天数不为负数
and t3.create_time < t4.create_time -- 入库天数不为负数 and t3.create_time < t4.create_time -- 入库天数不为负数
and t_w.hq_type!='国内仓'
"; ";
if (!string.IsNullOrWhiteSpace(type)) if (!string.IsNullOrWhiteSpace(type))
{ {
......
...@@ -35,14 +35,37 @@ namespace AutoTurnOver.DB ...@@ -35,14 +35,37 @@ namespace AutoTurnOver.DB
public static void ImportDetailed(int mainID) public static void ImportDetailed(int mainID)
{ {
_connection.Execute(@" _connection.Execute(@"
INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quantity_init_advise`,`quantity_actual`,`main_id`, INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quantity_init_advise`,`quantity_final_advise`,
`forecast_formula`,`fit_forecast_formula`,`turnover_days`,`supplier_delivery`,`inspection_delivery`,`transfer_delivery`,`sales_upper_limit`,`ispush`,`is_outofstock`) `product_inner_code`,`goods_quantity_init_advise`,`goods_moq`,`good_sku_codes`,`goods_history_fourteenday_sales`,`history_fourteenday_sales`,
`quantity_actual`,`main_id`,
`forecast_formula`,`fit_forecast_formula`,`turnover_days`,`supplier_delivery`,`inspection_delivery`,`transfer_delivery`,`sales_upper_limit`,`ispush`,`type`)
( (
select select
t1.bailun_sku, t1.bailun_sku,
t1.warehouse_code, t1.warehouse_code,
t1.quantity_final_advise as 'quantity_init_advise', t1.quantity_init_advise as 'quantity_init_advise', -- 原始采购建议数量 new
0 as 'quantity_actual', (
case
when t7.sum_quantity_init_advise>=t7.max_moq then t1.quantity_init_advise -- 如果商品的下单总量达到moq了,就直接下单
when t7.sku_count=1 then t7.max_moq -- 如果该商品只有一个sku需要下单,则直接下一个moq
else
CEILING(
t1.quantity_init_advise +
(
(t7.max_moq-t7.sum_quantity_init_advise)
*
(t1.history_fourteenday_sales / t7.sum_history_fourteenday_sales )
)
)-- 如果以上条件都不满足,则计算该sku需要摊分多少moq余下的任务
end
) as 'quantity_final_advise', -- 计算moq之后的数量 new
t7.product_inner_code as 'product_inner_code', -- 内部商品编码 new
t7.sum_quantity_init_advise as 'goods_quantity_init_advise', -- 商品本次的建议下单数量 new
t7.max_moq as 'goods_moq', -- 商品的moq new
t7.sku_codes as 'good_sku_codes', -- 商品涉及的下单所有sku new
t7.sum_history_fourteenday_sales as 'goods_history_fourteenday_sales', -- 商品的最近14日总日均销量
t1.history_fourteenday_sales as 'history_fourteenday_sales', -- sku的最近14日日均
0 as 'quantity_actual', -- 真实下单数量
@main_id as 'main_id', @main_id as 'main_id',
t2.forecast_formula as 'forecast_formula', t2.forecast_formula as 'forecast_formula',
t2.fit_forecast_formula as 'fit_forecast_formula', t2.fit_forecast_formula as 'fit_forecast_formula',
...@@ -52,12 +75,15 @@ INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quan ...@@ -52,12 +75,15 @@ INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quan
t1.transfer_delivery, t1.transfer_delivery,
t1.sales_upper_limit, t1.sales_upper_limit,
0 as 'ispush', 0 as 'ispush',
t1.status as 'is_outofstock' (case when t1.quantity_out_stock>0 then 2 when t1.`status` then 1 else 3 end) as 'type'
from dc_auto_turnover as t1 from dc_auto_turnover 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_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 left join dc_auto_config_sku_warehouse as t5 on t1.bailun_sku = t5.bailun_sku and t1.warehouse_code = t5.warehouse_code
where (t1.history_fourteenday_sales>0 or t1.quantity_out_stock>0 ) and t1.quantity_final_advise>0 and ( t5.`status`=0 or t5.`status` is null ) left join dc_base_sku as t6 on t1.bailun_sku = t6.bailun_sku
) left join view_goods_moq as t7 on t6.product_inner_code = t7.product_inner_code and t1.warehouse_code = t7.warehouse_code and t6.suppliers_id = t7.suppliers_id
where (t1.history_fourteenday_sales>0 or t1.quantity_out_stock>0 ) and t1.quantity_init_advise>0 and ( t5.`status`=0 or t5.`status` is null )
)
", new { main_id = mainID }); ", new { main_id = mainID });
} }
...@@ -144,6 +170,10 @@ left join dc_base_sku as t3 on t1.bailun_sku = t3.bailun_sku ...@@ -144,6 +170,10 @@ left join dc_base_sku as t3 on t1.bailun_sku = t3.bailun_sku
left join dc_auto_purchase_advise as t4 on t1.main_id = t4.id left join dc_auto_purchase_advise as t4 on t1.main_id = t4.id
where 1=1 "; where 1=1 ";
if (m.type != null)
{
sql += " and t1.`type`= " + m.type;
}
if (m.ispush != null) if (m.ispush != null)
{ {
sql += " and t1.ispush=" + (m.ispush == true ? 1 : 0); sql += " and t1.ispush=" + (m.ispush == true ? 1 : 0);
...@@ -183,7 +213,7 @@ where 1=1 "; ...@@ -183,7 +213,7 @@ where 1=1 ";
parameters.Add("warehouse_code", m.warehouse_code); parameters.Add("warehouse_code", m.warehouse_code);
} }
sql += " order by t1.quantity_init_advise desc "; sql += " order by t1.quantity_final_advise desc ";
total = _connection.ExecuteScalar<int>("select count(0) from (" + sql + ") tb1", parameters); total = _connection.ExecuteScalar<int>("select count(0) from (" + sql + ") tb1", parameters);
......
...@@ -17,9 +17,12 @@ namespace AutoTurnOver.Models.ApiDto ...@@ -17,9 +17,12 @@ namespace AutoTurnOver.Models.ApiDto
public int bp_sendtype { get; set; } public int bp_sendtype { get; set; }
/// <summary> /// <summary>
/// 是否预计缺货 1 = 预计缺货 /// 采购单类型
/// 1 = 预计缺货
/// 2 = 实际缺货
/// 3 = 补货
/// </summary> /// </summary>
public int sys_source { get; set; } public int type { get; set; }
/// <summary> /// <summary>
/// 采购计划单sku /// 采购计划单sku
......
...@@ -97,9 +97,43 @@ namespace AutoTurnOver.Models ...@@ -97,9 +97,43 @@ namespace AutoTurnOver.Models
public int ispush { get; set; } public int ispush { get; set; }
/// <summary> /// <summary>
/// 是否预计缺货 /// 采购单类型
/// </summary> /// </summary>
public int is_outofstock { get; set; } public int type { get; set; }
/// <summary>
/// 系统建议数量
/// </summary>
public int quantity_final_advise { get; set; }
/// <summary>
/// 内部商品编码
/// </summary>
public string product_inner_code { get; set; }
/// <summary>
/// 商品建议下单数
/// </summary>
public decimal goods_quantity_init_advise { get; set; }
/// <summary>
/// 商品MOQ
/// </summary>
public int goods_moq { get; set; }
/// <summary>
/// 商品下所有sku
/// </summary>
public string good_sku_codes { get; set; }
/// <summary>
/// 商品的最近14日日均销量
/// </summary>
public decimal goods_history_fourteenday_sales { get; set; }
/// <summary>
/// 产品的最近14日日均
/// </summary>
public decimal history_fourteenday_sales { get; set; }
} }
public class dc_auto_purchase_advise_detailed_buy_dto: dc_auto_purchase_advise_detailed public class dc_auto_purchase_advise_detailed_buy_dto: dc_auto_purchase_advise_detailed
...@@ -165,6 +199,8 @@ namespace AutoTurnOver.Models ...@@ -165,6 +199,8 @@ namespace AutoTurnOver.Models
/// 是否推送 /// 是否推送
/// </summary> /// </summary>
public bool? ispush { get; set; } public bool? ispush { get; set; }
public int? type { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models
{
/// <summary>
/// 系统全局 SKU配置数据
/// </summary>
public class dc_sku_config_dto
{
public string warehouse_type { get; set; }
public string warehouse_code { get; set; }
public string warehouse_name { get; set; }
public string bailun_sku { get; set; }
public string sku_title { get; set; }
public string product_code { get; set; }
public string product_inner_code { get; set; }
public string buyer_name { get; set; }
/// <summary>
/// 头程调拨初始值
/// </summary>
public decimal? transfer_config_delivery { get; set; }
/// <summary>
/// 头程调拨平均值
/// </summary>
public decimal? transfer_delivery { get; set; }
/// <summary>
/// 海外仓入库天数初始值
/// </summary>
public decimal? abroad_inbound_config_delivery { get; set; }
/// <summary>
/// 海外仓入库天数平均值
/// </summary>
public decimal abroad_inbound_delivery { get; set; }
/// <summary>
/// 海外仓打包天数初始
/// </summary>
public decimal transfer_bale_config_delivery { get; set; }
/// <summary>
/// 海外仓打包天数平均值
/// </summary>
public decimal transfer_bale_delivery { get; set; }
/// <summary>
/// 初始采购交期
/// </summary>
public decimal? supplier_delivery { get; set; }
/// <summary>
/// 最近一个单的预计到货时间
/// </summary>
public decimal? new_supplier_delivery { get; set; }
/// <summary>
/// 安全库存波峰天数(平均逾期天数)
/// </summary>
public decimal? average_overdue { get; set; }
/// <summary>
/// moq
/// </summary>
public decimal? moq { get; set; }
/// <summary>
/// 安全库存数量
/// </summary>
public decimal? quantity_safe { get; set; }
/// <summary>
/// 实际到货平均值
/// </summary>
public decimal? average_arrival { get; set; }
/// <summary>
/// 实际库存
/// </summary>
public decimal? stock { get; set; }
/// <summary>
/// 日均加权销量
/// </summary>
public decimal? quantity_safe_inventory { get; set; }
/// <summary>
/// 未来7天日均
/// </summary>
public decimal? forecast_sevenday_sales { get; set; }
/// <summary>
/// 周转天数(供应链长度)
/// </summary>
public decimal? turnover_days { get; set; }
/// <summary>
/// 采购在途
/// </summary>
public decimal? realtime_quantity_purchase { get; set; }
/// <summary>
/// 调拨在途
/// </summary>
public decimal? realtime_quantity_transfer { get; set; }
/// <summary>
/// 缺货数量
/// </summary>
public decimal? quantity_out_stock { get; set; }
/// <summary>
/// 监控状态
/// </summary>
public string monitor_status { get; set; }
}
public class new_supplier_delivery_dto
{
public string warehouse_code { get; set; }
public string bailun_sku { get; set; }
private decimal? _new_supplier_delivery;
public decimal? new_supplier_delivery { get {
if (_new_supplier_delivery > 0) return _new_supplier_delivery;
else return null;
} set { _new_supplier_delivery = value; } }
}
}
...@@ -105,7 +105,7 @@ namespace AutoTurnOver.Services ...@@ -105,7 +105,7 @@ namespace AutoTurnOver.Services
/// 把最新一批的采购单推送到采购系统 /// 把最新一批的采购单推送到采购系统
/// </summary> /// </summary>
/// <param name="mainId"></param> /// <param name="mainId"></param>
public static void PushBuySys(List<dc_auto_purchase_advise_detailed_dto> datas,int is_outofstock) public static void PushBuySys(List<dc_auto_purchase_advise_detailed_dto> datas,int type)
{ {
MySqlConnection conn = connectionHelper._connection; MySqlConnection conn = connectionHelper._connection;
conn.Open(); conn.Open();
...@@ -129,18 +129,18 @@ namespace AutoTurnOver.Services ...@@ -129,18 +129,18 @@ namespace AutoTurnOver.Services
{ {
bp_sendtype = 1, bp_sendtype = 1,
bp_sendfromCode = item.Key, bp_sendfromCode = item.Key,
sys_source = is_outofstock, type = type,
bi_buyplandetail = new List<bi_buyplandetail>() bi_buyplandetail = new List<bi_buyplandetail>()
}; };
data.bi_buyplandetail = item.Select(s => new bi_buyplandetail data.bi_buyplandetail = item.Select(s => new bi_buyplandetail
{ {
bd_count = s.quantity_actual > 0 ? s.quantity_actual : s.quantity_init_advise, bd_count = s.quantity_actual > 0 ? s.quantity_actual : s.quantity_final_advise,
bd_price = s.unit_price, bd_price = s.unit_price,
bd_sku = s.bailun_sku bd_sku = s.bailun_sku
}).ToList(); }).ToList();
//把采购数量没有填的都补上 建议采购数 //把采购数量没有填的都补上 建议采购数
conn.Execute(" update dc_auto_purchase_advise_detailed set quantity_actual=quantity_init_advise where quantity_actual<=0 and id in @ids ", new { ids = datas.Select(s=>s.id).ToList() }, transaction); conn.Execute(" update dc_auto_purchase_advise_detailed set quantity_actual=quantity_final_advise where quantity_actual<=0 and id in @ids ", new { ids = datas.Select(s=>s.id).ToList() }, transaction);
var result = ApiServices.PushBuyPlan(data); var result = ApiServices.PushBuyPlan(data);
if (result.IsSuccessed) if (result.IsSuccessed)
......
...@@ -70,11 +70,11 @@ namespace AutoTurnOver.Services ...@@ -70,11 +70,11 @@ namespace AutoTurnOver.Services
if (tempPurchase.pay_type == 1) if (tempPurchase.pay_type == 1)
{ {
delivery_days += (int)(itemArrivalList.Max(s => s.update_time) - tempPurchase.pay_time).Value.TotalDays; delivery_days += (int)(itemArrivalList.Min(s => s.update_time) - tempPurchase.pay_time).Value.TotalDays;
} }
else else
{ {
delivery_days += (int)(itemArrivalList.Max(s => s.update_time) - tempPurchase.confirm_time).Value.TotalDays; delivery_days += (int)(itemArrivalList.Min(s => s.update_time) - tempPurchase.confirm_time).Value.TotalDays;
} }
} }
...@@ -131,7 +131,8 @@ namespace AutoTurnOver.Services ...@@ -131,7 +131,8 @@ namespace AutoTurnOver.Services
//头程天数 //头程天数
var transport3List = AveragePurchase.GetTransportList(skuItem.bailun_sku, skuItem.warehouse_code, "", _seed_count); var transport3List = AveragePurchase.GetTransportList(skuItem.bailun_sku, skuItem.warehouse_code, "", _seed_count);
if (transport3List != null && transport3List.Count() >= 1) // 大于两条记录,才计算平均值,否则没有意义
if (transport3List != null && transport3List.Count() >= 2)
{ {
dataWarehouse.transfer_bale_delivery = (decimal)transport3List.Sum(s => (s.delivery_time - s.bale_time).TotalDays) / transport3List.Count(); dataWarehouse.transfer_bale_delivery = (decimal)transport3List.Sum(s => (s.delivery_time - s.bale_time).TotalDays) / transport3List.Count();
dataWarehouse.transfer_delivery = (decimal)transport3List.Sum(s => (s.arrival_time - s.verify_time).TotalDays) / transport3List.Count(); dataWarehouse.transfer_delivery = (decimal)transport3List.Sum(s => (s.arrival_time - s.verify_time).TotalDays) / transport3List.Count();
......
...@@ -113,7 +113,7 @@ namespace AutoTurnOver.Services ...@@ -113,7 +113,7 @@ namespace AutoTurnOver.Services
{ {
if (tempDateEnd < DateTime.Now) if (tempDateEnd < DateTime.Now)
{ {
tempAdviseStrList.Add(tempPurchaseDetailData.quantity_init_advise); tempAdviseStrList.Add(tempPurchaseDetailData.quantity_final_advise);
} }
tempActualStrList.Add(tempPurchaseDetailData.quantity_actual); tempActualStrList.Add(tempPurchaseDetailData.quantity_actual);
......
...@@ -253,5 +253,23 @@ namespace AutoTurnOver.Services ...@@ -253,5 +253,23 @@ namespace AutoTurnOver.Services
return DB.dc_auto_turnover.GetModel(sku, wCode); return DB.dc_auto_turnover.GetModel(sku, wCode);
} }
/// <summary>
/// 查询SKU基础配置数据
/// </summary>
/// <returns></returns>
public List<dc_sku_config_dto> SkuConfigList()
{
return DB.dc_auto_turnover.SkuConfigList();
}
/// <summary>
/// 查询SKU基础配置数据
/// </summary>
/// <returns></returns>
public List<new_supplier_delivery_dto> SkuNewSupplierDeliveryList()
{
return DB.dc_auto_turnover.SkuNewSupplierDeliveryList();
}
} }
} }
...@@ -59,7 +59,7 @@ namespace AutoTurnOver.Controllers ...@@ -59,7 +59,7 @@ namespace AutoTurnOver.Controllers
/// <param name="start_date"></param> /// <param name="start_date"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public string DetailList(int limit, int offset, int main_id, string sort, string sku, string warehousecode, DateTime? end_date, DateTime? start_date, string warehousetype, int? warehousearea, bool? ispush = null) public string DetailList(int limit, int offset, int main_id, string sort, string sku, string warehousecode, DateTime? end_date, DateTime? start_date, string warehousetype, int? warehousearea, bool? ispush = null,int? type = null)
{ {
var m = new dc_auto_purchase_advise_detailed_search_dto var m = new dc_auto_purchase_advise_detailed_search_dto
{ {
...@@ -70,7 +70,8 @@ namespace AutoTurnOver.Controllers ...@@ -70,7 +70,8 @@ namespace AutoTurnOver.Controllers
start_date = start_date, start_date = start_date,
warehousearea = warehousearea, warehousearea = warehousearea,
warehousetype = warehousetype, warehousetype = warehousetype,
ispush = ispush ispush = ispush,
type = type
}; };
var total = 0; var total = 0;
...@@ -107,7 +108,7 @@ namespace AutoTurnOver.Controllers ...@@ -107,7 +108,7 @@ namespace AutoTurnOver.Controllers
var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total); var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total);
DataTable table = new DataTable(); DataTable table = new DataTable();
string[] cols = new string[] { "时间", "sku", "产品名称", "仓库编码", "仓库名称", "建议采购数量", "实际下单数量" }; string[] cols = new string[] { "时间", "sku", "产品名称", "仓库编码", "仓库名称", "初始建议数", "建议采购数量", "实际下单数量" };
foreach (var item in cols) foreach (var item in cols)
{ {
table.Columns.Add(item); table.Columns.Add(item);
...@@ -122,7 +123,8 @@ namespace AutoTurnOver.Controllers ...@@ -122,7 +123,8 @@ namespace AutoTurnOver.Controllers
row["产品名称"] = itemData.sku_name; row["产品名称"] = itemData.sku_name;
row["仓库编码"] = itemData.warehouse_code; row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name; row["仓库名称"] = itemData.warehouse_name;
row["建议采购数量"] = itemData.quantity_init_advise; row["初始建议数"] = itemData.quantity_init_advise;
row["建议采购数量"] = itemData.quantity_final_advise;
row["实际下单数量"] = itemData.quantity_actual; row["实际下单数量"] = itemData.quantity_actual;
table.Rows.Add(row); table.Rows.Add(row);
} }
...@@ -188,15 +190,12 @@ namespace AutoTurnOver.Controllers ...@@ -188,15 +190,12 @@ namespace AutoTurnOver.Controllers
var total = 0; var total = 0;
var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total); var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total);
if(list.Any(s => s.is_outofstock == 1)) foreach (var item in list.GroupBy(s=>s.type))
{
PurchaseAdviseServices.PushBuySys(list.Where(s => s.is_outofstock == 1).ToList(),1);
}
if(list.Any(s => s.is_outofstock == 0))
{ {
PurchaseAdviseServices.PushBuySys(list.Where(s => s.is_outofstock == 0).ToList(),0); PurchaseAdviseServices.PushBuySys(item.ToList(), item.Key);
} }
return new JsonResult(new return new JsonResult(new
{ {
success = true success = true
...@@ -237,5 +236,7 @@ namespace AutoTurnOver.Controllers ...@@ -237,5 +236,7 @@ namespace AutoTurnOver.Controllers
}); });
} }
} }
} }
} }
\ No newline at end of file
...@@ -12,6 +12,7 @@ using AutoTurnOver.Utility; ...@@ -12,6 +12,7 @@ using AutoTurnOver.Utility;
using System.Data; using System.Data;
using AutoTurnOver.Common; using AutoTurnOver.Common;
using System.IO; using System.IO;
using AutoTurnOver.Services;
namespace AutoTurnOver.Controllers namespace AutoTurnOver.Controllers
{ {
...@@ -27,7 +28,7 @@ namespace AutoTurnOver.Controllers ...@@ -27,7 +28,7 @@ namespace AutoTurnOver.Controllers
/// <param name="pagesize">每页记录数</param> /// <param name="pagesize">每页记录数</param>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public JsonResult List(int limit, int offset, string order, string sort, string sku, int? IsRedundant, int? IsStockOut, string warehousecode, string warehousetype, int? warehousearea, bool? hasDefectConfig, string product_inner_code, string sku_name, string product_code, bool? hasAadvise = null, string categoryIds = null,int? monitor_status = null) public JsonResult List(int limit, int offset, string order, string sort, string sku, int? IsRedundant, int? IsStockOut, string warehousecode, string warehousetype, int? warehousearea, bool? hasDefectConfig, string product_inner_code, string sku_name, string product_code, bool? hasAadvise = null, string categoryIds = null, int? monitor_status = null)
{ {
var m = new Condition_AutoTurnOver var m = new Condition_AutoTurnOver
...@@ -121,7 +122,7 @@ namespace AutoTurnOver.Controllers ...@@ -121,7 +122,7 @@ namespace AutoTurnOver.Controllers
/// <param name="sku"></param> /// <param name="sku"></param>
/// <param name="warehousecode"></param> /// <param name="warehousecode"></param>
/// <returns></returns> /// <returns></returns>
public FileResult Export(int limit, int offset, string order, string sort, string sku, int? IsRedundant, int? IsStockOut, string warehousecode, string warehousetype, int? warehousearea, bool? hasDefectConfig, string product_inner_code, string sku_name, string product_code, bool? hasAadvise = null, string categoryIds = null,int? monitor_status = null) public FileResult Export(int limit, int offset, string order, string sort, string sku, int? IsRedundant, int? IsStockOut, string warehousecode, string warehousetype, int? warehousearea, bool? hasDefectConfig, string product_inner_code, string sku_name, string product_code, bool? hasAadvise = null, string categoryIds = null, int? monitor_status = null)
{ {
var m = new Condition_AutoTurnOver var m = new Condition_AutoTurnOver
{ {
...@@ -209,7 +210,7 @@ namespace AutoTurnOver.Controllers ...@@ -209,7 +210,7 @@ namespace AutoTurnOver.Controllers
row["调拨头程天数"] = itemData.transfer_delivery; row["调拨头程天数"] = itemData.transfer_delivery;
row["预测是否断货"] = itemData.status == 1 ? "是" : "否"; row["预测是否断货"] = itemData.status == 1 ? "是" : "否";
row["缺货数量"] = itemData.quantity_out_stock; row["缺货数量"] = itemData.quantity_out_stock;
row["监控状态"] = itemData.monitor_status==1?"停止监控":"监控中"; row["监控状态"] = itemData.monitor_status == 1 ? "停止监控" : "监控中";
table.Rows.Add(row); table.Rows.Add(row);
} }
...@@ -484,5 +485,116 @@ namespace AutoTurnOver.Controllers ...@@ -484,5 +485,116 @@ namespace AutoTurnOver.Controllers
#endregion #endregion
/// <summary>
/// 导出sku基础配置
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult ExportSkuConfig()
{
var list = new SkuAutoTurnServices().SkuConfigList();
DataTable table = new DataTable();
string[] cols = new string[] { "仓库类型", "仓库编码", "仓库名称", "SKU", "产品编码", "内部编码", "标题",
"采购员", "头程调拨初始值", "头程调拨平均值", "海外仓入库天数初始值", "海外仓入库天数平均值", "海外仓打包天数初始", "海外仓打包天数平均值",
"初始采购交期","最近一个单的预计到货时间", "安全库存波峰天数(平均逾期天数)", "moq", "安全库存数量", "实际到货平均值", "实际库存",
"日均加权销量", "未来7天日均", "周转天数(供应链长度)", "采购在途", "调拨在途", "缺货数量", "监控状态",
};
foreach (var item in cols)
{
table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["仓库类型"] = itemData.warehouse_type;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["SKU"] = itemData.bailun_sku;
row["产品编码"] = itemData.product_code;
row["内部编码"] = itemData.product_inner_code;
row["标题"] = itemData.sku_title;
row["采购员"] = itemData.buyer_name;
row["头程调拨初始值"] = itemData.transfer_config_delivery;
row["头程调拨平均值"] = itemData.transfer_delivery;
row["海外仓入库天数初始值"] = itemData.abroad_inbound_config_delivery;
row["海外仓入库天数平均值"] = itemData.abroad_inbound_delivery;
row["海外仓打包天数初始"] = itemData.transfer_bale_config_delivery;
row["海外仓打包天数平均值"] = itemData.transfer_bale_delivery;
row["初始采购交期"] = itemData.supplier_delivery;
row["最近一个单的预计到货时间"] = itemData.new_supplier_delivery;
row["安全库存波峰天数(平均逾期天数)"] = itemData.average_overdue;
row["moq"] = itemData.moq;
row["安全库存数量"] = itemData.quantity_safe;
row["实际到货平均值"] = itemData.average_arrival;
row["实际库存"] = itemData.stock;
row["日均加权销量"] = itemData.quantity_safe_inventory;
row["未来7天日均"] = itemData.forecast_sevenday_sales;
row["周转天数(供应链长度)"] = itemData.turnover_days;
row["采购在途"] = itemData.realtime_quantity_purchase;
row["调拨在途"] = itemData.realtime_quantity_transfer;
row["缺货数量"] = itemData.quantity_out_stock;
row["监控状态"] = itemData.monitor_status;
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");
}
/// <summary>
/// 导出sku基础配置
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult ExportSkuNewSupplierDelivery()
{
var list = new SkuAutoTurnServices().SkuNewSupplierDeliveryList();
DataTable table = new DataTable();
string[] cols = new string[] { "仓库编码", "SKU", "最近一个单的预计交期" };
foreach (var item in cols)
{
table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["仓库编码"] = itemData.warehouse_code;
row["SKU"] = itemData.bailun_sku;
row["最近一个单的预计交期"] = itemData.new_supplier_delivery;
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