Commit 5cab1cee by lizefeng

采购数不会递增

parent c2043ad7
...@@ -26,7 +26,7 @@ namespace AutoTurnOver.DB ...@@ -26,7 +26,7 @@ namespace AutoTurnOver.DB
parameters.Add("time", DateTime.Now.AddDays(0 - day).ToString("yyyy-MM-dd 00:00:00")); parameters.Add("time", DateTime.Now.AddDays(0 - day).ToString("yyyy-MM-dd 00:00:00"));
return _connection.Query<temp_sku_dto>(@"select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1 return _connection.Query<temp_sku_dto>(@"select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1
where t1.supplier_id>0 where t1.supplier_id>0
and EXISTS ( select * from dc_auto_turnover as t2 where t1.bailun_sku =t2.bailun_sku and t1.warehouse_code = t2.warehouse_code) -- and EXISTS ( select * from dc_auto_turnover as t2 where t1.bailun_sku =t2.bailun_sku and t1.warehouse_code = t2.warehouse_code)
GROUP BY t1.bailun_sku,t1.warehouse_code,t1.supplier_id "); GROUP BY t1.bailun_sku,t1.warehouse_code,t1.supplier_id ");
//return _connection.Query<temp_sku_dto>("select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1 where t1.update_time>=@time group by t1.bailun_sku,t1.warehouse_code,t1.supplier_id ", parameters); //return _connection.Query<temp_sku_dto>("select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1 where t1.update_time>=@time group by t1.bailun_sku,t1.warehouse_code,t1.supplier_id ", parameters);
} }
...@@ -138,7 +138,11 @@ ORDER BY t1.update_time desc LIMIT @seed_count ...@@ -138,7 +138,11 @@ ORDER BY t1.update_time desc LIMIT @seed_count
DynamicParameters parameters = new DynamicParameters(); DynamicParameters parameters = new DynamicParameters();
parameters.Add("purchase_ids", purchase_ids.ToArray()); parameters.Add("purchase_ids", purchase_ids.ToArray());
parameters.Add("bailun_sku", bailun_sku); parameters.Add("bailun_sku", bailun_sku);
return _connection.Query<dc_base_purchase_inbound_dto>(@"select * from dc_base_purchase_inbound where purchase_id in @purchase_ids and bailun_sku = @bailun_sku return _connection.Query<dc_base_purchase_inbound_dto>(@"
select t1.*,t2.update_time as 'arrival_time' from dc_base_purchase_inbound as t1
left join dc_base_purchase_arrival as t2 on t1.purchase_id = t2.purchase_id and t1.bailun_sku = t2.bailun_sku
where t1.purchase_id in @purchase_ids and t1.bailun_sku = @bailun_sku
and t2.update_time is not null
", parameters); ", parameters);
} }
......
...@@ -53,9 +53,13 @@ left join dc_base_warehouse as dbw on t1.warehouse_code = dbw.warehouse_code whe ...@@ -53,9 +53,13 @@ left join dc_base_warehouse as dbw on t1.warehouse_code = dbw.warehouse_code whe
sql += " and t1.has_confirm=0 "; sql += " and t1.has_confirm=0 ";
} }
} }
if (data.err_type != null)
{
sql += " and t1.`type`= "+ data.err_type;
}
if (data.has_overdue != null) if (data.has_overdue != null)
{ {
DateTime now = new DateTime(); DateTime now = DateTime.Now;
if (data.has_overdue == true) if (data.has_overdue == true)
{ {
sql += " and t1.end_time<@end_time "; sql += " and t1.end_time<@end_time ";
......
...@@ -134,6 +134,11 @@ left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code ...@@ -134,6 +134,11 @@ 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 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.ispush != null)
{
sql += " and t1.ispush=" + (m.ispush == true ? 1 : 0);
}
if (!string.IsNullOrWhiteSpace(m.warehousetype)) if (!string.IsNullOrWhiteSpace(m.warehousetype))
{ {
sql += " and t2.hq_type=" + $"'{m.warehousetype}'"; sql += " and t2.hq_type=" + $"'{m.warehousetype}'";
...@@ -194,13 +199,13 @@ where 1=1 "; ...@@ -194,13 +199,13 @@ where 1=1 ";
/// </summary> /// </summary>
/// <param name="mainid"></param> /// <param name="mainid"></param>
/// <returns></returns> /// <returns></returns>
public static IEnumerable<dc_auto_purchase_advise_detailed_buy_dto> BuyDetailList(int mainid, bool? ispush = null) public static IEnumerable<dc_auto_purchase_advise_detailed_buy_dto> BuyDetailList(List<int> ids, bool? ispush = null)
{ {
DynamicParameters parameters = new DynamicParameters(); DynamicParameters parameters = new DynamicParameters();
parameters.Add("mainid", mainid); 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 from dc_auto_purchase_advise_detailed as t1
left join dc_base_sku as t2 on t1.bailun_sku = t2.bailun_sku left join dc_base_sku as t2 on t1.bailun_sku = t2.bailun_sku
where t1.main_id=@mainid "; where t1.id in @ids ";
if (ispush != null) if (ispush != null)
{ {
sql += " and ispush=@ispush "; sql += " and ispush=@ispush ";
......
...@@ -95,6 +95,11 @@ namespace AutoTurnOver.Models ...@@ -95,6 +95,11 @@ namespace AutoTurnOver.Models
/// 是否已解决 /// 是否已解决
/// </summary> /// </summary>
public bool? has_solve { get; set; } public bool? has_solve { get; set; }
/// <summary>
/// 异常类型
/// </summary>
public int? err_type { get; set; }
} }
......
...@@ -90,6 +90,11 @@ namespace AutoTurnOver.Models ...@@ -90,6 +90,11 @@ namespace AutoTurnOver.Models
public int transfer_delivery { get; set; } public int transfer_delivery { get; set; }
public int sales_upper_limit { get; set; } public int sales_upper_limit { get; set; }
/// <summary>
/// 是否推送
/// </summary>
public int ispush { 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
...@@ -145,6 +150,11 @@ namespace AutoTurnOver.Models ...@@ -145,6 +150,11 @@ namespace AutoTurnOver.Models
public string warehousetype { get; set; } public string warehousetype { get; set; }
public int? warehousearea { get; set; } public int? warehousearea { get; set; }
/// <summary>
/// 是否推送
/// </summary>
public bool? ispush { get; set; }
} }
} }
...@@ -12,8 +12,16 @@ namespace AutoTurnOver.Models.dc_base_purchase ...@@ -12,8 +12,16 @@ namespace AutoTurnOver.Models.dc_base_purchase
public string warehouse_code { get; set; } public string warehouse_code { get; set; }
/// <summary>
/// 入库时间
/// </summary>
public DateTime update_time { get; set; } public DateTime update_time { get; set; }
/// <summary>
/// 到货时间
/// </summary>
public DateTime arrival_time { get; set; }
public int count { get; set; } public int count { get; set; }
} }
} }
...@@ -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() public static void PushBuySys(List<dc_auto_purchase_advise_detailed_dto> datas)
{ {
MySqlConnection conn = connectionHelper._connection; MySqlConnection conn = connectionHelper._connection;
conn.Open(); conn.Open();
...@@ -114,15 +114,14 @@ namespace AutoTurnOver.Services ...@@ -114,15 +114,14 @@ namespace AutoTurnOver.Services
{ {
//查询最近一个采购建议 //查询最近一个采购建议
// //
var lastPurchaseAdvise = conn.QueryFirstOrDefault<dc_auto_purchase_advise>(" select * from dc_auto_purchase_advise order by id desc limit 1 "); if (datas == null)
if (lastPurchaseAdvise.push_time != null)
{ {
throw new Exception("最新的一个采购建议已经推送过了,请勿重复推送"); return;
} }
List<string> planNos = new List<string>(); List<string> planNos = new List<string>();
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
// 查询未推送成功的采购建议的明细 // 查询未推送成功的采购建议的明细
var detailList = purchase_advise.BuyDetailList(lastPurchaseAdvise.id, false); 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 => s.warehouse_code))
{ {
...@@ -140,7 +139,7 @@ namespace AutoTurnOver.Services ...@@ -140,7 +139,7 @@ namespace AutoTurnOver.Services
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 main_id=@mainID ", new { mainID = lastPurchaseAdvise.id }, transaction); 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);
var result = ApiServices.PushBuyPlan(data); var result = ApiServices.PushBuyPlan(data);
if (result.IsSuccessed) if (result.IsSuccessed)
......
...@@ -37,7 +37,7 @@ namespace AutoTurnOver.Services ...@@ -37,7 +37,7 @@ namespace AutoTurnOver.Services
{ {
// 获取最近2天发送变化的SKU 用于计算 // 获取最近2天发送变化的SKU 用于计算
var chageSkuList = AveragePurchase.GetChangeSku(2); var chageSkuList = AveragePurchase.GetChangeSku(30);
foreach (var skuItem in chageSkuList) foreach (var skuItem in chageSkuList)
{ {
dc_average_purchase data = new dc_average_purchase() dc_average_purchase data = new dc_average_purchase()
...@@ -45,7 +45,7 @@ namespace AutoTurnOver.Services ...@@ -45,7 +45,7 @@ namespace AutoTurnOver.Services
bailun_sku = skuItem.bailun_sku, bailun_sku = skuItem.bailun_sku,
supplier_id = skuItem.supplier_id ?? 0 supplier_id = skuItem.supplier_id ?? 0
}; };
// 查询相关采购单 // 查询相关采购单
...@@ -81,9 +81,9 @@ namespace AutoTurnOver.Services ...@@ -81,9 +81,9 @@ namespace AutoTurnOver.Services
// 平均采购交期 // 平均采购交期
data.delivery_days = delivery_days / purchaseList.Count; data.delivery_days = delivery_days / purchaseList.Count;
//写入数据库 //写入数据库
AveragePurchase.Save(data, conn); AveragePurchase.Save(data, conn);
...@@ -102,33 +102,24 @@ namespace AutoTurnOver.Services ...@@ -102,33 +102,24 @@ namespace AutoTurnOver.Services
}; };
// 计算平均入库天数 // 计算平均入库天数
// 查询相关的入库记录 // 查询相关的入库记录
var inbound_days = 0;
var inboundList = AveragePurchase.GetInboundList(purchaseWList.Select(s => s.purchase_id), skuItem.bailun_sku); var inboundList = AveragePurchase.GetInboundList(purchaseWList.Select(s => s.purchase_id), skuItem.bailun_sku);
foreach (var itemInboundList in inboundList.GroupBy(s => s.purchase_id)) if (inboundList != null && inboundList.Count() >= 1)
{ {
var tempPurchase = purchaseWList.SingleOrDefault(s => s.purchase_id == itemInboundList.Key); dataWarehouse.inbound_days = (int)inboundList.Sum(s => (s.update_time - s.arrival_time).TotalDays) / inboundList.Count();
}
if (tempPurchase.pay_type == 1) else
{ {
inbound_days += (int)(itemInboundList.Max(s => s.update_time) - tempPurchase.pay_time).Value.TotalDays; dataWarehouse.inbound_days = 0;
}
else
{
inbound_days += (int)(itemInboundList.Max(s => s.update_time) - tempPurchase.confirm_time).Value.TotalDays;
}
} }
// 平均入库天数
dataWarehouse.inbound_days = inbound_days / purchaseWList.Count;
// 计算平均海运调拨天数 // 计算平均海运调拨天数
// 查询最近5次海运(已完成)记录 // 查询最近5次海运(已完成)记录
var transport1List = AveragePurchase.GetTransportList(skuItem.bailun_sku, skuItem.warehouse_code,"海运", _seed_count); var transport1List = AveragePurchase.GetTransportList(skuItem.bailun_sku, skuItem.warehouse_code, "海运", _seed_count);
if(transport1List!=null && transport1List.Count() >= 1) if (transport1List != null && transport1List.Count() >= 1)
{ {
dataWarehouse.transfer_type_1_days = (decimal)transport1List.Sum(s => (s.complete_time - s.bale_time).TotalDays) / transport1List.Count(); dataWarehouse.transfer_type_1_days = (decimal)transport1List.Sum(s => (s.complete_time - s.bale_time).TotalDays) / transport1List.Count();
} }
// 计算平均空运调拨天数 // 计算平均空运调拨天数
// 查询最近5次空运(已完成)记录 // 查询最近5次空运(已完成)记录
...@@ -143,8 +134,8 @@ namespace AutoTurnOver.Services ...@@ -143,8 +134,8 @@ namespace AutoTurnOver.Services
if (transport3List != null && transport3List.Count() >= 1) if (transport3List != null && transport3List.Count() >= 1)
{ {
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.complete_time - s.verify_time).TotalDays) / transport3List.Count(); dataWarehouse.transfer_delivery = (decimal)transport3List.Sum(s => (s.arrival_time - s.verify_time).TotalDays) / transport3List.Count();
dataWarehouse.abroad_inbound_delivery = (decimal)transport3List.Sum(s => (s.inbound_time - s.delivery_time).TotalDays) / transport3List.Count(); dataWarehouse.abroad_inbound_delivery = (decimal)transport3List.Sum(s => (s.inbound_time - s.arrival_time).TotalDays) / transport3List.Count();
} }
AveragePurchase.Save(dataWarehouse, conn); AveragePurchase.Save(dataWarehouse, conn);
......
...@@ -15,7 +15,7 @@ namespace AutoTurnOver.Controllers ...@@ -15,7 +15,7 @@ namespace AutoTurnOver.Controllers
{ {
[HttpGet] [HttpGet]
public JsonResult List(int limit, int offset, string order, string sort, string sku, string warehousecode, string warehousetype, int? warehousearea, public JsonResult List(int limit, int offset, string order, string sort, string sku, string warehousecode, string warehousetype, int? warehousearea,
bool? has_overdue = null, bool? has_confirm = null, bool? has_solve = null) bool? has_overdue = null, bool? has_confirm = null, bool? has_solve = null,int? err_type = null)
{ {
var m = new dc_auto_forecast_fluctuation_search_dto var m = new dc_auto_forecast_fluctuation_search_dto
{ {
...@@ -25,7 +25,8 @@ namespace AutoTurnOver.Controllers ...@@ -25,7 +25,8 @@ namespace AutoTurnOver.Controllers
has_confirm = has_confirm, has_confirm = has_confirm,
has_solve = has_solve, has_solve = has_solve,
warehousetype = warehousetype, warehousetype = warehousetype,
warehousearea = warehousearea warehousearea = warehousearea,
err_type = err_type
}; };
var total = 0; var total = 0;
......
...@@ -7,6 +7,9 @@ using AutoTurnOver.Services; ...@@ -7,6 +7,9 @@ using AutoTurnOver.Services;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using AutoTurnOver.Utility; using AutoTurnOver.Utility;
using System.Data;
using AutoTurnOver.Common;
using System.IO;
namespace AutoTurnOver.Controllers namespace AutoTurnOver.Controllers
{ {
...@@ -55,7 +58,7 @@ namespace AutoTurnOver.Controllers ...@@ -55,7 +58,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) 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)
{ {
var m = new dc_auto_purchase_advise_detailed_search_dto var m = new dc_auto_purchase_advise_detailed_search_dto
{ {
...@@ -65,7 +68,8 @@ namespace AutoTurnOver.Controllers ...@@ -65,7 +68,8 @@ namespace AutoTurnOver.Controllers
end_date = end_date, end_date = end_date,
start_date = start_date, start_date = start_date,
warehousearea = warehousearea, warehousearea = warehousearea,
warehousetype = warehousetype warehousetype = warehousetype ,
ispush = ispush
}; };
var total = 0; var total = 0;
...@@ -79,6 +83,63 @@ namespace AutoTurnOver.Controllers ...@@ -79,6 +83,63 @@ namespace AutoTurnOver.Controllers
} }
/// <summary> /// <summary>
/// 导出实时库存
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <returns></returns>
public FileResult Export(int main_id, string sort, string sku, string warehousecode, DateTime? end_date, DateTime? start_date, string warehousetype, int? warehousearea, bool? ispush = null)
{
var m = new dc_auto_purchase_advise_detailed_search_dto
{
main_id = main_id,
sku = sku,
warehouse_code = warehousecode,
end_date = end_date,
start_date = start_date,
warehousearea = warehousearea,
warehousetype = warehousetype,
ispush = ispush
};
var total = 0;
var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total);
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.create_time_str;
row["sku"] = itemData.bailun_sku;
row["产品名称"] = itemData.sku_name;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["建议采购数量"] = itemData.quantity_init_advise;
row["实际下单数量"] = itemData.quantity_actual;
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>
/// 设置采购数量 /// 设置采购数量
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
...@@ -107,11 +168,25 @@ namespace AutoTurnOver.Controllers ...@@ -107,11 +168,25 @@ namespace AutoTurnOver.Controllers
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public JsonResult PushBuySys() public JsonResult PushBuySys(int main_id, string sort, string sku, string warehousecode, DateTime? end_date, DateTime? start_date, string warehousetype, int? warehousearea)
{ {
try try
{ {
PurchaseAdviseServices.PushBuySys(); var m = new dc_auto_purchase_advise_detailed_search_dto
{
main_id = main_id,
sku = sku,
warehouse_code = warehousecode,
end_date = end_date,
start_date = start_date,
warehousearea = warehousearea,
warehousetype = warehousetype,
ispush = false
};
var total = 0;
var list = PurchaseAdviseServices.DetailList(m, 0, int.MaxValue, ref total);
PurchaseAdviseServices.PushBuySys(list);
return new JsonResult(new return new JsonResult(new
{ {
success = true success = true
......
...@@ -168,13 +168,14 @@ namespace AutoTurnOver.Controllers ...@@ -168,13 +168,14 @@ namespace AutoTurnOver.Controllers
p.forecast_oneday_sales2, p.forecast_oneday_sales2,
p.product_inner_code, p.product_inner_code,
p.product_code, p.product_code,
p.bailun_category_name p.bailun_category_name,
p.monitor_status
}); });
DataTable table = new DataTable(); DataTable table = new DataTable();
string[] cols = new string[] { "Sku","商品编码", "内部编码", "sku标题", "仓库编码", "仓库名称", "MOQ", string[] cols = new string[] { "Sku","商品编码", "内部编码", "sku标题", "仓库编码", "仓库名称", "MOQ",
"采购在途", "调拨在途", "昨日销量", "明日销量", "未来7天日均", "未来14天日均", "建议采购数", "活动促销数量", "采购在途", "调拨在途", "昨日销量", "明日销量", "未来7天日均", "未来14天日均", "建议采购数", "活动促销数量",
"实际库存", "安全库存", "周转天数", "供应商交期", "质检入库天数", "调拨头程天数", "预测是否断货", "缺货数量" "实际库存", "安全库存", "周转天数", "供应商交期", "质检入库天数", "调拨头程天数", "预测是否断货", "缺货数量","监控状态"
}; };
foreach (var item in cols) foreach (var item in cols)
{ {
...@@ -208,6 +209,7 @@ namespace AutoTurnOver.Controllers ...@@ -208,6 +209,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?"停止监控":"监控中";
table.Rows.Add(row); table.Rows.Add(row);
} }
......
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