Commit 5870c325 by lizefeng

补缺货sku 被误删

parent a2c09187
......@@ -199,7 +199,7 @@ WHERE
/// <param name="sku">sku</param>
/// <param name="warehouse_code">仓库编码</param>
/// <returns></returns>
public static List<dc_base_stock_dto> RealtimeList(string sku, string warehouse_code, string product_inner_code, string sku_title_cn, int offset, int limit, ref int total, string warehousetype, int? warehousearea, bool isSum = false, string order = null, string sort = null)
public static List<dc_base_stock_dto> RealtimeList(string sku, string warehouse_code, string product_inner_code, string sku_title_cn,string supplier_name, int offset, int limit, ref int total, string warehousetype, int? warehousearea, bool isSum = false, string order = null, string sort = null)
{
var sql = "";
if (isSum)
......@@ -318,6 +318,11 @@ where 1=1
countSql += " and t1.warehouse_code=@warehouse_code ";
parameters.Add("warehouse_code", warehouse_code);
}
if (!string.IsNullOrWhiteSpace(supplier_name))
{
sql += " and t3.suppliers_name =@suppliers_name ";
parameters.Add("suppliers_name", supplier_name);
}
if (isSum)
{
......
......@@ -92,47 +92,6 @@ select
)
", new { main_id = mainID }, commandTimeout: 0);
// 采购员为 赵美聪 的商品 按缺货数量下单
_connection.Execute(@" 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`,`suppliers_id`)
(
select
t1.bailun_sku,
'GZBLWH' as 'warehouse_code',
sum(t1.quantity_init_advise) as 'quantity_init_advise', -- 原始采购建议数量 new
( sum(t1.quantity_out_stock) - ( sum((case when t1.quantity_out_stock>0 then 0 else t1.quantity_inventory end )) + sum(t1.quantity_transfer) + sum(t1.quantity_purchase) ) ) as 'quantity_final_advise', -- 计算moq之后的数量 new
t6.product_inner_code as 'product_inner_code', -- 内部商品编码 new
0 as 'goods_quantity_init_advise', -- 商品本次的建议下单数量 new
0 as 'goods_moq', -- 商品的moq new
0 as 'good_sku_codes', -- 商品涉及的下单所有sku new
0 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',
t1.turnover_days,
t1.supplier_delivery,
t1.inspection_delivery,
t1.transfer_delivery,
t1.sales_upper_limit,
0 as 'ispush',
1 as 'type',
t6.suppliers_id
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
left join dc_base_sku as t6 on t1.bailun_sku = t6.bailun_sku
where t6.buyer_name in ('赵美聪','张莹霞','张莹霞1','冯兆欣')
and t1.warehouse_code in ('GZBLWH','GZBLYS')
GROUP BY t1.bailun_sku
HAVING ( sum((case when t1.quantity_out_stock>0 then 0 else t1.quantity_inventory end )) + sum(t1.quantity_transfer) + sum(t1.quantity_purchase) < sum(t1.quantity_out_stock) )
) ", new { main_id = mainID }, commandTimeout: 0);
// 凑单sku(初始建议数没有) 如果下单数只有一个,改为2 ( 只补缺货的不管 )
_connection.Execute(@" update dc_auto_purchase_advise_detailed as t1,
......@@ -152,10 +111,7 @@ where t1.bailun_sku = t2.bailun_sku and quantity_final_advise=1 and quantity_ini
{
foreach (var itemGoods in datas.GroupBy(s => new { s.suppliers_id, s.product_inner_code, s.warehouse_code }))
{
if (itemGoods.Key.product_inner_code == "8538364")
{
}
// 判断总建议采购数是否达到了moq
var difference = itemGoods.Max(s => s.goods_moq) - itemGoods.Sum(s => s.quantity_final_advise);
if (difference > 0)
......@@ -195,6 +151,46 @@ where t1.bailun_sku = t2.bailun_sku and quantity_final_advise=1 and quantity_ini
}
// 采购员为 赵美聪 的商品 按缺货数量下单
_connection.Execute(@" 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`,`suppliers_id`)
(
select
t1.bailun_sku,
'GZBLWH' as 'warehouse_code',
sum(t1.quantity_init_advise) as 'quantity_init_advise', -- 原始采购建议数量 new
( sum(t1.quantity_out_stock) - ( sum((case when t1.quantity_out_stock>0 then 0 else t1.quantity_inventory end )) + sum(t1.quantity_transfer) + sum(t1.quantity_purchase) ) ) as 'quantity_final_advise', -- 计算moq之后的数量 new
t6.product_inner_code as 'product_inner_code', -- 内部商品编码 new
0 as 'goods_quantity_init_advise', -- 商品本次的建议下单数量 new
0 as 'goods_moq', -- 商品的moq new
0 as 'good_sku_codes', -- 商品涉及的下单所有sku new
0 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',
t1.turnover_days,
t1.supplier_delivery,
t1.inspection_delivery,
t1.transfer_delivery,
t1.sales_upper_limit,
0 as 'ispush',
1 as 'type',
t6.suppliers_id
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
left join dc_base_sku as t6 on t1.bailun_sku = t6.bailun_sku
where t6.buyer_name in ('赵美聪','张莹霞','张莹霞1','冯兆欣')
and t1.warehouse_code in ('GZBLWH','GZBLYS')
GROUP BY t1.bailun_sku
HAVING ( sum((case when t1.quantity_out_stock>0 then 0 else t1.quantity_inventory end )) + sum(t1.quantity_transfer) + sum(t1.quantity_purchase) < sum(t1.quantity_out_stock) )
) ", new { main_id = mainID }, commandTimeout: 0);
}
/// <summary>
......
using AutoTurnOver.Models.Report;
using Dapper;
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.DB
{
public class report : connectionHelper
{
/// <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_dto> QuantityOutStockList(quantity_out_stock_search_dto m, int offset, int limit, ref int total, string order = "", string sort = "")
{
var list = new List<quantity_out_stock_dto>();
try
{
DynamicParameters parameters = new DynamicParameters();
string sql = "";
if (m.isSum)
{
sql = @"
select
sum(t1.quantity_out_stock) as 'quantity_out_stock',
sum(t1.quantity_transfer+t1.quantity_purchase) as 'quantity_ontheway'
from dc_mid_transit as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code
left join dc_base_sku as t3 on t1.bailun_sku = t3.bailun_sku
where t1.quantity_out_stock>0 ";
}
else
{
sql = @"
select t1.warehouse_code,
t2.warehouse_name,
t1.bailun_sku,
t3.sku_title_cn as 'sku_name',
t1.quantity_out_stock,
t3.buyer_name,
t1.gmt_out_stock_modified as 'update_time',
(t1.quantity_transfer+t1.quantity_purchase) as 'quantity_ontheway', -- 总在途
t1.gmt_purchase_modified,
t1.gmt_transfer_modified
from dc_mid_transit as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code
left join dc_base_sku as t3 on t1.bailun_sku = t3.bailun_sku
where t1.quantity_out_stock>0
";
}
if (!string.IsNullOrWhiteSpace(m.product_inner_code))
{
sql += " and t3.product_inner_code=@product_inner_code ";
parameters.Add("product_inner_code", m.product_inner_code);
}
if (!string.IsNullOrWhiteSpace(m.warehousetype))
{
sql += " and t2.hq_type=" + $"'{m.warehousetype}'";
}
if (m.warehousearea > 0)
{
sql += " and t2.area_id=" + m.warehousearea;
}
if (!string.IsNullOrWhiteSpace(m.bailun_sku))
{
sql += $" 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 ";
parameters.Add("warehouse_code", m.warehouse_code);
}
if (!string.IsNullOrWhiteSpace(m.purchase_user))
{
sql += " and t3.buyer_name =@buyer_name ";
parameters.Add("buyer_name", m.purchase_user);
}
if (m.isSum || limit > 10000)
{
total = 0;
}
else
{
total = _connection.ExecuteScalar<int>("select count(0) from (" + sql + ") tb1", parameters);
//设置默认排序字段
if (string.IsNullOrWhiteSpace(sort)) sort = "t1.quantity_out_stock";
if (!string.IsNullOrEmpty(sort))
{
sql += " order by " + sort;
if (!string.IsNullOrEmpty(order))
{
sql += " " + order;
}
else
{
sql += " asc";
}
}
sql += " limit " + offset + "," + limit;
}
var obj = _connection.Query<quantity_out_stock_dto>(sql, parameters, buffered: false, commandTimeout: 0);
return obj.AsList();
}
catch (Exception ex)
{
return list;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models.Report
{
/// <summary>
/// 缺货
/// </summary>
public class quantity_out_stock_dto
{
public string warehouse_code { get; set; }
public string warehouse_name { get; set; }
public string bailun_sku { get; set; }
public string sku_name { get; set; }
public decimal quantity_out_stock { get; set; }
public string buyer_name { get; set; }
/// <summary>
/// 最后更新时间
/// </summary>
public DateTime? update_time { get; set; }
/// <summary>
/// 总在途
/// </summary>
public decimal quantity_ontheway { get; set; }
/// <summary>
/// 采购在途更新时间
/// </summary>
public DateTime? gmt_purchase_modified { get; set; }
/// <summary>
/// 调拨在途更新时间
/// </summary>
public DateTime? gmt_transfer_modified { get; set; }
}
public class quantity_out_stock_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; }
public bool isSum { get; set; }
}
}
......@@ -33,9 +33,9 @@ namespace AutoTurnOver.Services
}
public List<dc_base_stock_dto> RealtimeList(string sku, string warehouse_code, string product_inner_code, string sku_title_cn, int offset, int limit, ref int total, string warehousetype, int? warehousearea,bool isSum = false,string order = null,string sort = null)
public List<dc_base_stock_dto> RealtimeList(string sku, string warehouse_code, string product_inner_code, string sku_title_cn,string supplier_name, int offset, int limit, ref int total, string warehousetype, int? warehousearea,bool isSum = false,string order = null,string sort = null)
{
return DB.daily.RealtimeList(sku, warehouse_code,product_inner_code,sku_title_cn,offset, limit, ref total,warehousetype,warehousearea, isSum, order, sort);
return DB.daily.RealtimeList(sku, warehouse_code,product_inner_code,sku_title_cn, supplier_name, offset, limit, ref total,warehousetype,warehousearea, isSum, order, sort);
}
......
......@@ -5,6 +5,7 @@ using AutoTurnOver.Models;
using AutoTurnOver.DB;
using System.Linq;
using AutoTurnOver.Utility;
using AutoTurnOver.Models.Report;
namespace AutoTurnOver.Services
{
......@@ -42,7 +43,7 @@ namespace AutoTurnOver.Services
list.Add(sales != null ? sales.sales_details.ToObj<List<decimal>>().Select(s => (int)Math.Ceiling(s)).ToJson() : "[]");
list.Add(sales != null ? sales.sales_explain_details.Replace("[","").Replace("]","").Split(',').ToJson() : "[]");
list.Add(sales != null ? sales.sales_explain_details.Replace("[", "").Replace("]", "").Split(',').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() : "[]");
......@@ -310,6 +311,9 @@ namespace AutoTurnOver.Services
return list;
}
public List<quantity_out_stock_dto> QuantityOutStockList(quantity_out_stock_search_dto m, int offset, int limit, ref int total, string order = "", string sort = "")
{
return report.QuantityOutStockList(m, offset, limit,ref total, order, sort);
}
}
}
......@@ -61,12 +61,12 @@ namespace AutoTurnOver.Controllers
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
public JsonResult RealtimeList(string sku, string warehousecode, string product_inner_code, string sku_title_cn, int offset, int limit, string order, string sort, string warehousetype, int? warehousearea)
public JsonResult RealtimeList(string sku, string warehousecode, string product_inner_code, string sku_title_cn,string supplier_name, int offset, int limit, string order, string sort, string warehousetype, int? warehousearea)
{
var services = new DailyServices();
var total = 0;
var list = services.RealtimeList(sku, warehousecode,product_inner_code, sku_title_cn, offset, limit, ref total,warehousetype,warehousearea,order: order, sort: sort);
var list = services.RealtimeList(sku, warehousecode,product_inner_code, sku_title_cn, supplier_name, offset, limit, ref total,warehousetype,warehousearea,order: order, sort: sort);
return new JsonResult(new
{
......@@ -75,12 +75,12 @@ namespace AutoTurnOver.Controllers
});
}
public JsonResult RealtimeListSumFooter(string sku, string warehousecode, string product_inner_code, string sku_title_cn, int offset, int limit, string order, string sort, string warehousetype, int? warehousearea)
public JsonResult RealtimeListSumFooter(string sku, string warehousecode, string product_inner_code, string sku_title_cn,string supplier_name, int offset, int limit, string order, string sort, string warehousetype, int? warehousearea)
{
var services = new DailyServices();
var total = 0;
var list = services.RealtimeList(sku, warehousecode, product_inner_code, sku_title_cn, offset, limit, ref total, warehousetype, warehousearea,true);
var list = services.RealtimeList(sku, warehousecode, product_inner_code, sku_title_cn, supplier_name, offset, limit, ref total, warehousetype, warehousearea,true);
return new JsonResult(list == null || list.Count <= 0 ? new dc_base_stock_dto() : list[0]);
}
......@@ -115,11 +115,11 @@ namespace AutoTurnOver.Controllers
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult ExportRealtime(string sku, string warehousecode, string product_inner_code, string sku_title_cn, string warehousetype, int? warehousearea)
public FileResult ExportRealtime(string sku, string warehousecode, string product_inner_code, string sku_title_cn,string supplier_name, string warehousetype, int? warehousearea)
{
var services = new DailyServices();
var total = 0;
var list = services.RealtimeList(sku, warehousecode, product_inner_code, sku_title_cn, 0, int.MaxValue, ref total,warehousetype,warehousearea);
var list = services.RealtimeList(sku, warehousecode, product_inner_code, sku_title_cn, supplier_name, 0, int.MaxValue, ref total,warehousetype,warehousearea);
DataTable table = new DataTable();
string[] cols = new string[] { "Sku", "采购名称", "中文名", "英文名称","内部编码", "仓库编码", "仓库名称", "货主编码","实时采购在途","实时调拨在途"
......
......@@ -6,6 +6,10 @@ using AutoTurnOver.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using AutoTurnOver.Utility;
using AutoTurnOver.Models.Report;
using System.Data;
using AutoTurnOver.Common;
using System.IO;
namespace AutoTurnOver.Controllers
{
......@@ -44,7 +48,7 @@ namespace AutoTurnOver.Controllers
date.Add(today.AddDays(i).ToString("MM/dd"));
}
var names = new List<string>() { "销量","计算规则", "预计入库", "可用库存", "预计缺货数量", "特殊销量", "市场因素", "建议下单数量", "人工下单数量" };
var names = new List<string>() { "销量", "计算规则", "预计入库", "可用库存", "预计缺货数量", "特殊销量", "市场因素", "建议下单数量", "人工下单数量" };
var turnoverData = new Services.SkuAutoTurnServices().GetModel(sku, warehousecode);
var saleVolumeData = new Services.SaleVolumeServices().GetBySkuWarehouseCode(sku, warehousecode);
var averageTargets = PurchaseAverageTargetServices.GetListByWCode(sku, warehousecode);
......@@ -54,7 +58,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 = 7; i < turnoverData.turnover_days + 7 - 1; i++)
{
turnoverDatecumulativeSales += salesList[i];
}
......@@ -69,12 +73,12 @@ namespace AutoTurnOver.Controllers
}
// 当日预测销量
var turnoverDateSales =(int)result[0].ToObj<List<decimal>>()[turnoverData.turnover_days + 7-1];
var turnoverDateSales = (int)result[0].ToObj<List<decimal>>()[turnoverData.turnover_days + 7 - 1];
var buyFormula = new
{
turnoverDateStr = turnoverDate.ToString("yyyy-MM-dd"), // 取值日期
turnoverDateSales = turnoverDateSales, // 当日预测销量
turnoverDateStock = (int)result[3].ToObj<List<decimal>>()[turnoverData.turnover_days + 7-1], // 当日预测库存,
turnoverDateStock = (int)result[3].ToObj<List<decimal>>()[turnoverData.turnover_days + 7 - 1], // 当日预测库存,
turnoverDatecumulativeSales = (int)turnoverDatecumulativeSales, // 累计销量
nowStr = DateTime.Now.ToString("yyyy-MM-dd"), // 今天的日期
nowShortage = (int)result[4].ToObj<List<decimal>>()[7], // 今天的实际缺货
......@@ -98,5 +102,117 @@ namespace AutoTurnOver.Controllers
);
}
/// <summary>
/// 实时库存
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
public JsonResult QuantityOutStockList(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_search_dto
{
bailun_sku = bailun_sku,
isSum = false,
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.QuantityOutStockList(m, offset, limit, ref total, order: order, sort: sort);
return new JsonResult(new
{
rows = list,
total = total,
});
}
public JsonResult QuantityOutStockFooter(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_search_dto
{
bailun_sku = bailun_sku,
isSum = true,
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.QuantityOutStockList(m, offset, limit, ref total, order: order, sort: sort);
return new JsonResult(list == null || list.Count <= 0 ? new quantity_out_stock_dto() : list[0]);
}
/// <summary>
/// 导出实时缺货
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult QuantityOutStockExport(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_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.QuantityOutStockList(m, 0, int.MaxValue, ref total, order: order, sort: sort);
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["仓库名称"] = itemData.warehouse_name;
row["sku"] = itemData.bailun_sku;
row["产品名称"] = itemData.sku_name;
row["缺货总数量"] = itemData.quantity_out_stock;
row["采购员"] = itemData.buyer_name;
row["缺货最后更新时间"] = itemData.update_time;
row["总在途"] = itemData.quantity_ontheway;
row["调拨在途最后更新时间"] = itemData.gmt_transfer_modified;
row["采购在途最后更新时间"] = itemData.gmt_purchase_modified;
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