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'
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_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
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 t2.create_time < t1.create_time -- 调拨天数不为负数
and t5.create_time < t3.create_time -- 头程天数不为负数
and t3.create_time < t4.create_time -- 入库天数不为负数
and t_w.hq_type!='国内仓'
";
if (!string.IsNullOrWhiteSpace(type))
{
......
......@@ -9,7 +9,7 @@ using System.Linq;
namespace AutoTurnOver.DB
{
public class dc_auto_turnover: connectionHelper
public class dc_auto_turnover : connectionHelper
{
public dc_auto_turnover()
{
......@@ -25,7 +25,7 @@ namespace AutoTurnOver.DB
/// <param name="order">排序类型</param>
/// <param name="sort">排序字段</param>
/// <returns></returns>
public static List<Models.dc_auto_turnover_Extend> List(Condition_AutoTurnOver m,int offset, int limit, ref int total,string order="",string sort= "",bool isSum=false)
public static List<Models.dc_auto_turnover_Extend> List(Condition_AutoTurnOver m, int offset, int limit, ref int total, string order = "", string sort = "", bool isSum = false)
{
try
{
......@@ -71,11 +71,11 @@ left join dc_auto_config_sku_warehouse as t5 on dat.bailun_sku = t5.bailun_sku a
where 1=1 ";
if (m.categoryModels!=null)
if (m.categoryModels != null)
{
sql += " and t4.bailun_category_id in ( "+ string.Join(",", m.categoryModels.Select(s=>s.C_ID).Distinct()) +")" ;
sql += " and t4.bailun_category_id in ( " + string.Join(",", m.categoryModels.Select(s => s.C_ID).Distinct()) + ")";
sqlCount += " and t4.bailun_category_id in ( " + string.Join(",", m.categoryModels.Select(s => s.C_ID).Distinct()) + ")";
}
if (m.monitor_status == 1)
......@@ -119,7 +119,7 @@ where 1=1 ";
sql += " and ( dat.abroad_inbound_delivery <=0 or dat.transfer_bale_delivery <=0 or dat.transfer_delivery <=0 ) ";
sqlCount += " and ( dat.abroad_inbound_delivery <=0 or dat.transfer_bale_delivery <=0 or dat.transfer_delivery <=0 ) ";
}
if(m.hasDefectConfig == false)
if (m.hasDefectConfig == false)
{
sql += " and ( dat.abroad_inbound_delivery >0 and dat.transfer_bale_delivery >0 and dat.transfer_delivery >0 ) ";
sqlCount += " and ( dat.abroad_inbound_delivery >0 and dat.transfer_bale_delivery >0 and dat.transfer_delivery >0 ) ";
......@@ -136,13 +136,13 @@ where 1=1 ";
}
if (!string.IsNullOrEmpty(m.bailun_sku))
{
sql += " and dat.bailun_sku like '%" + m.bailun_sku+"%'";
sql += " and dat.bailun_sku like '%" + m.bailun_sku + "%'";
sqlCount += " and dat.bailun_sku like '%" + m.bailun_sku + "%'";
}
if (!string.IsNullOrEmpty(m.warehouse_code))
{
sql += " and dat.warehouse_code='" + m.warehouse_code+"'";
sql += " and dat.warehouse_code='" + m.warehouse_code + "'";
sqlCount += " and dat.warehouse_code='" + m.warehouse_code + "'";
}
......@@ -178,20 +178,20 @@ where 1=1 ";
sql += " limit " + offset + "," + limit;
}
var obj = _connection.Query<Models.dc_auto_turnover_Extend>(sql);
return obj.AsList();
}
catch (Exception)
{
{
return new List<Models.dc_auto_turnover_Extend>();
}
}
......@@ -205,7 +205,7 @@ where 1=1 ";
/// <param name="limit"></param>
/// <param name="total"></param>
/// <returns></returns>
public static List<dc_auto_config_promotion> ListConfigPromotion(Condition_ConfigPromotion m, int offset, int limit,ref int total)
public static List<dc_auto_config_promotion> ListConfigPromotion(Condition_ConfigPromotion m, int offset, int limit, ref int total)
{
var list = new List<dc_auto_config_promotion>();
......@@ -222,18 +222,18 @@ where 1=1 ";
{
sql += " and dbw.area_id=" + m.warehousearea;
}
if (m.IsEffective==true)
if (m.IsEffective == true)
{
sql += $" and dacp.promotion_time>= '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' ";
}
if (!string.IsNullOrWhiteSpace(m.sku))
{
sql += " and dacp.bailun_sku like '%" + m.sku+"%'";
sql += " and dacp.bailun_sku like '%" + m.sku + "%'";
}
if (!string.IsNullOrWhiteSpace(m.warehousecode))
{
sql += " and dacp.warehouse_code='" + m.warehousecode+"'";
sql += " and dacp.warehouse_code='" + m.warehousecode + "'";
}
if (m.status.HasValue)
......@@ -261,7 +261,7 @@ where 1=1 ";
/// <param name="warehousecode"></param>
/// <param name="days"></param>
/// <returns></returns>
public static IEnumerable<dc_auto_config_promotion> ListConfigPromotion(string sku, string warehousecode,DateTime btime, DateTime etime)
public static IEnumerable<dc_auto_config_promotion> ListConfigPromotion(string sku, string warehousecode, DateTime btime, DateTime etime)
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("bailun_sku", sku);
......@@ -291,13 +291,13 @@ where 1=1 ";
{
if (obj.status != 0)
{
return "该销售设置不能修改,目前状态为:"+Enum.GetName(typeof(EnumSaleSettingStatus),obj.status);
return "该销售设置不能修改,目前状态为:" + Enum.GetName(typeof(EnumSaleSettingStatus), obj.status);
}
}
obj.id = m.id;
obj.bailun_sku = m.bailun_sku;
obj.bl_operator = username??"";
obj.bl_operator = username ?? "";
obj.bl_auditor = "";
obj.gmt_modified = DateTime.Now;
obj.promotion_time = m.promotion_time;
......@@ -373,7 +373,7 @@ where 1=1 ";
/// <returns></returns>
public static dc_auto_config_promotion GetSaleSettingById(int id)
{
return _connection.QueryFirstOrDefault<dc_auto_config_promotion>("select * from dc_auto_config_promotion where id="+id);
return _connection.QueryFirstOrDefault<dc_auto_config_promotion>("select * from dc_auto_config_promotion where id=" + id);
}
......@@ -389,9 +389,9 @@ where 1=1 ";
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public static dc_auto_inventory GetAutoInventoryBySkuWH(string sku,string warehousecode)
public static dc_auto_inventory GetAutoInventoryBySkuWH(string sku, string warehousecode)
{
var sql = "select * from dc_auto_inventory where warehouse_code='"+warehousecode+ "' and bailun_sku='"+sku+"'";
var sql = "select * from dc_auto_inventory where warehouse_code='" + warehousecode + "' and bailun_sku='" + sku + "'";
return _connection.QueryFirstOrDefault<dc_auto_inventory>(sql);
}
......@@ -407,9 +407,9 @@ where 1=1 ";
/// <param name="warehousecode">库存编码</param>
/// <param name="type">入库类型,1是采购入库, 2是调拨入库 </param>
/// <returns></returns>
public static dc_auto_inbound GetAutoInboundBySkuWH(string sku, string warehousecode,int type)
public static dc_auto_inbound GetAutoInboundBySkuWH(string sku, string warehousecode, int type)
{
var sql = "select * from dc_auto_inbound where bailun_sku='" + sku+ "' and warehouse_code='" +warehousecode+"'";
var sql = "select * from dc_auto_inbound where bailun_sku='" + sku + "' and warehouse_code='" + warehousecode + "'";
if (type > 0)
{
sql += $" and type={type} ";
......@@ -442,10 +442,10 @@ where 1=1 ";
/// <param name="sku">产品SKU</param>
/// <param name="wCode">仓库编码</param>
/// <returns></returns>
public static Models.dc_auto_turnover GetModel(string sku,string wCode)
public static Models.dc_auto_turnover GetModel(string sku, string wCode)
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("bailun_sku",sku);
parameters.Add("bailun_sku", sku);
parameters.Add("warehouse_code", wCode);
return _connection.QueryFirst<Models.dc_auto_turnover>(" select * from dc_auto_turnover where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", parameters);
}
......@@ -553,7 +553,7 @@ where 1=1 ";
// 检查该数据在时间段上是否有交叉重复
var oldDataList = ListCorrection(m.bailun_sku, m.warehouse_code, obj.start_time, obj.end_time);
if(oldDataList!=null && oldDataList.Any(s=>s.id!= obj.id))
if (oldDataList != null && oldDataList.Any(s => s.id != obj.id))
{
return $" SKU:【{m.bailun_sku}】,仓库:【{m.warehouse_code}】 在在所选时间范围已经有配置了数据,请勿重复配置 ";
}
......@@ -581,7 +581,7 @@ where 1=1 ";
/// <summary>
/// 获取特殊销售设置详情
......@@ -597,5 +597,97 @@ where 1=1 ";
#endregion
/// <summary>
/// 查询SKU基础配置数据
/// </summary>
/// <returns></returns>
public static List<dc_sku_config_dto> SkuConfigList()
{
var sql = @"
-- select * from view_estimated_arrival_time
select
dbw.hq_type as 'warehouse_type',
t_base.warehouse_code as 'warehouse_code',
(case when dbw.hq_type='fba仓' then dbw.bailun_account else dbw.warehouse_name end) as warehouse_name,
t3.bailun_sku as 'bailun_sku',
t3.sku_title_cn as 'sku_title',
t3.product_code as 'product_code',
t3.product_inner_code as 'product_inner_code',
t3.buyer_name as 'buyer_name',
t5.transfer_config_delivery as 'transfer_config_delivery', -- 头程调拨初始值
t6.transfer_delivery as 'transfer_delivery', -- 头程调拨平均值
t5.abroad_inbound_config_delivery as 'abroad_inbound_config_delivery', -- 海外仓入库天数初始值
t6.abroad_inbound_delivery as 'abroad_inbound_delivery', -- 海外仓入库天数平均值
t5.transfer_bale_config_delivery as 'transfer_bale_config_delivery', -- 海外仓打包天数初始
t6.transfer_bale_delivery as 'transfer_bale_delivery', -- 海外仓打包天数平均值
t3.supplier_delivery as 'supplier_delivery', -- 初始采购交期
(case when t7.new_supplier_delivery >0 then t7.new_supplier_delivery else 0 end ) as 'new_supplier_delivery', -- 最近一个单的预计到货时间
( case when t5.average_overdue> 0 then t5.average_overdue else null end ) as 'average_overdue', -- 安全库存波峰天数(平均逾期天数),
t3.moq as 'moq',
(( case when t5.average_overdue> 0 then t5.average_overdue else 1 end ) * t5.quantity_safe_inventory ) as 'quantity_safe', -- 安全库存数量
t9.delivery_days as 'average_arrival' ,-- '实际到货平均值',
t1.usable_stock as 'stock', -- 实际库存
t5.quantity_safe_inventory as 'quantity_safe_inventory', -- 日均加权销量
t5.forecast_sevenday_sales as 'forecast_sevenday_sales', -- 未来7天日均
t5.turnover_days as 'turnover_days', -- 周转天数(供应商长度)
t4.quantity_purchase as 'realtime_quantity_purchase', -- 采购在途
t4.quantity_transfer as 'realtime_quantity_transfer', -- 调拨在途
t5.quantity_out_stock as 'quantity_out_stock', -- 缺货数量
( case when t8.`status`=0 or t8.`status` is null then '正常监控' else '停止监控' end ) as 'monitor_status'
from
(SELECT
t1.warehouse_code,t1.bailun_sku
FROM
dc_mid_transit AS t1
union
SELECT
t1.warehouse_code,t1.bailun_sku
FROM
dc_base_stock AS t1
) as t_base
left join dc_base_stock as t1 on t_base.bailun_sku = t1.bailun_sku and t_base.warehouse_code = t1.warehouse_code
left join dc_base_sku as t3 on t_base.bailun_sku = t3.bailun_sku
left join dc_base_warehouse as dbw on t_base.warehouse_code = dbw.warehouse_code
left join dc_mid_transit as t4 on t_base.bailun_sku = t4.bailun_sku and t_base.warehouse_code = t4.warehouse_code
left join dc_auto_turnover as t5 on t_base.bailun_sku = t5.bailun_sku and t_base.warehouse_code = t5.warehouse_code
left join dc_average_warehouse as t6 on t_base.bailun_sku = t6.bailun_sku and t_base.warehouse_code = t6.warehouse_code
left join view_estimated_arrival_time as t7 on t1.bailun_sku = t7.bailun_sku and t1.warehouse_code = t7.warehouse_code
left join dc_auto_config_sku_warehouse as t8 on t_base.bailun_sku = t8.bailun_sku and t_base.warehouse_code = t8.warehouse_code
left join dc_average_purchase as t9 on t1.bailun_sku = t9.bailun_sku and t3.suppliers_id = t9.supplier_id
";
var datas = _connection.Query<dc_sku_config_dto>(sql, commandTimeout: 0).ToList();
return datas;
}
/// <summary>
/// 查询SKU最近一个单的供应商交期
/// </summary>
/// <returns></returns>
public static List<new_supplier_delivery_dto> SkuNewSupplierDeliveryList()
{
var sql = @"
select t7_1.warehouse_code,t7_1.bailun_sku,(to_days(t7_1.estimated_arrival_time) - ( case when t7_1.pay_type=1 then to_days(t7_1.pay_time) else to_days(t7_1.confirm_time) end ) ) as 'new_supplier_delivery' from dc_base_purchase as t7_1
where t7_1.id in (
select max(id) from dc_base_purchase as t7_2 where t7_2.estimated_arrival_time is not null GROUP BY t7_2.warehouse_code,t7_2.bailun_sku
)
";
var datas = _connection.Query<new_supplier_delivery_dto>(sql).ToList();
return datas;
}
}
}
......@@ -35,14 +35,37 @@ namespace AutoTurnOver.DB
public static void ImportDetailed(int mainID)
{
_connection.Execute(@"
INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quantity_init_advise`,`quantity_actual`,`main_id`,
`forecast_formula`,`fit_forecast_formula`,`turnover_days`,`supplier_delivery`,`inspection_delivery`,`transfer_delivery`,`sales_upper_limit`,`ispush`,`is_outofstock`)
INSERT into dc_auto_purchase_advise_detailed(`bailun_sku`,`warehouse_code`,`quantity_init_advise`,`quantity_final_advise`,
`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
t1.bailun_sku,
t1.warehouse_code,
t1.quantity_final_advise as 'quantity_init_advise',
0 as 'quantity_actual',
t1.quantity_init_advise as 'quantity_init_advise', -- 原始采购建议数量 new
(
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',
t2.forecast_formula as '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
t1.transfer_delivery,
t1.sales_upper_limit,
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
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
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 });
}
......@@ -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
where 1=1 ";
if (m.type != null)
{
sql += " and t1.`type`= " + m.type;
}
if (m.ispush != null)
{
sql += " and t1.ispush=" + (m.ispush == true ? 1 : 0);
......@@ -183,7 +213,7 @@ where 1=1 ";
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);
......
......@@ -17,9 +17,12 @@ namespace AutoTurnOver.Models.ApiDto
public int bp_sendtype { get; set; }
/// <summary>
/// 是否预计缺货 1 = 预计缺货
/// 采购单类型
/// 1 = 预计缺货
/// 2 = 实际缺货
/// 3 = 补货
/// </summary>
public int sys_source { get; set; }
public int type { get; set; }
/// <summary>
/// 采购计划单sku
......
......@@ -97,9 +97,43 @@ namespace AutoTurnOver.Models
public int ispush { get; set; }
/// <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
......@@ -165,6 +199,8 @@ namespace AutoTurnOver.Models
/// 是否推送
/// </summary>
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
/// 把最新一批的采购单推送到采购系统
/// </summary>
/// <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;
conn.Open();
......@@ -129,18 +129,18 @@ namespace AutoTurnOver.Services
{
bp_sendtype = 1,
bp_sendfromCode = item.Key,
sys_source = is_outofstock,
type = type,
bi_buyplandetail = new List<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_sku = s.bailun_sku
}).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);
if (result.IsSuccessed)
......
......@@ -70,11 +70,11 @@ namespace AutoTurnOver.Services
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
{
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
//头程天数
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_delivery = (decimal)transport3List.Sum(s => (s.arrival_time - s.verify_time).TotalDays) / transport3List.Count();
......
......@@ -113,7 +113,7 @@ namespace AutoTurnOver.Services
{
if (tempDateEnd < DateTime.Now)
{
tempAdviseStrList.Add(tempPurchaseDetailData.quantity_init_advise);
tempAdviseStrList.Add(tempPurchaseDetailData.quantity_final_advise);
}
tempActualStrList.Add(tempPurchaseDetailData.quantity_actual);
......
......@@ -253,5 +253,23 @@ namespace AutoTurnOver.Services
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
/// <param name="start_date"></param>
/// <returns></returns>
[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
{
......@@ -70,7 +70,8 @@ namespace AutoTurnOver.Controllers
start_date = start_date,
warehousearea = warehousearea,
warehousetype = warehousetype,
ispush = ispush
ispush = ispush,
type = type
};
var total = 0;
......@@ -107,7 +108,7 @@ namespace AutoTurnOver.Controllers
var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total);
DataTable table = new DataTable();
string[] cols = new string[] { "时间", "sku", "产品名称", "仓库编码", "仓库名称", "建议采购数量", "实际下单数量" };
string[] cols = new string[] { "时间", "sku", "产品名称", "仓库编码", "仓库名称", "初始建议数", "建议采购数量", "实际下单数量" };
foreach (var item in cols)
{
table.Columns.Add(item);
......@@ -122,7 +123,8 @@ namespace AutoTurnOver.Controllers
row["产品名称"] = itemData.sku_name;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["建议采购数量"] = itemData.quantity_init_advise;
row["初始建议数"] = itemData.quantity_init_advise;
row["建议采购数量"] = itemData.quantity_final_advise;
row["实际下单数量"] = itemData.quantity_actual;
table.Rows.Add(row);
}
......@@ -188,15 +190,12 @@ namespace AutoTurnOver.Controllers
var total = 0;
var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total);
if(list.Any(s => s.is_outofstock == 1))
{
PurchaseAdviseServices.PushBuySys(list.Where(s => s.is_outofstock == 1).ToList(),1);
}
if(list.Any(s => s.is_outofstock == 0))
foreach (var item in list.GroupBy(s=>s.type))
{
PurchaseAdviseServices.PushBuySys(list.Where(s => s.is_outofstock == 0).ToList(),0);
PurchaseAdviseServices.PushBuySys(item.ToList(), item.Key);
}
return new JsonResult(new
{
success = true
......@@ -237,5 +236,7 @@ namespace AutoTurnOver.Controllers
});
}
}
}
}
\ No newline at end of file
......@@ -12,6 +12,7 @@ using AutoTurnOver.Utility;
using System.Data;
using AutoTurnOver.Common;
using System.IO;
using AutoTurnOver.Services;
namespace AutoTurnOver.Controllers
{
......@@ -27,7 +28,7 @@ namespace AutoTurnOver.Controllers
/// <param name="pagesize">每页记录数</param>
/// <returns></returns>
[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
......@@ -121,7 +122,7 @@ namespace AutoTurnOver.Controllers
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <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
{
......@@ -209,7 +210,7 @@ namespace AutoTurnOver.Controllers
row["调拨头程天数"] = itemData.transfer_delivery;
row["预测是否断货"] = itemData.status == 1 ? "是" : "否";
row["缺货数量"] = itemData.quantity_out_stock;
row["监控状态"] = itemData.monitor_status==1?"停止监控":"监控中";
row["监控状态"] = itemData.monitor_status == 1 ? "停止监控" : "监控中";
table.Rows.Add(row);
}
......@@ -484,5 +485,116 @@ namespace AutoTurnOver.Controllers
#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