Commit 5cab1cee by lizefeng

采购数不会递增

parent c2043ad7
......@@ -26,7 +26,7 @@ namespace AutoTurnOver.DB
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
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 ");
//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
DynamicParameters parameters = new DynamicParameters();
parameters.Add("purchase_ids", purchase_ids.ToArray());
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);
}
......
......@@ -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 ";
}
}
if (data.err_type != null)
{
sql += " and t1.`type`= "+ data.err_type;
}
if (data.has_overdue != null)
{
DateTime now = new DateTime();
DateTime now = DateTime.Now;
if (data.has_overdue == true)
{
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
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.ispush != null)
{
sql += " and t1.ispush=" + (m.ispush == true ? 1 : 0);
}
if (!string.IsNullOrWhiteSpace(m.warehousetype))
{
sql += " and t2.hq_type=" + $"'{m.warehousetype}'";
......@@ -194,13 +199,13 @@ where 1=1 ";
/// </summary>
/// <param name="mainid"></param>
/// <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();
parameters.Add("mainid", mainid);
parameters.Add("ids", ids);
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
where t1.main_id=@mainid ";
where t1.id in @ids ";
if (ispush != null)
{
sql += " and ispush=@ispush ";
......
......@@ -95,6 +95,11 @@ namespace AutoTurnOver.Models
/// 是否已解决
/// </summary>
public bool? has_solve { get; set; }
/// <summary>
/// 异常类型
/// </summary>
public int? err_type { get; set; }
}
......
......@@ -90,6 +90,11 @@ namespace AutoTurnOver.Models
public int transfer_delivery { 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
......@@ -145,6 +150,11 @@ namespace AutoTurnOver.Models
public string warehousetype { get; set; }
public int? warehousearea { get; set; }
/// <summary>
/// 是否推送
/// </summary>
public bool? ispush { get; set; }
}
}
......@@ -12,8 +12,16 @@ namespace AutoTurnOver.Models.dc_base_purchase
public string warehouse_code { get; set; }
/// <summary>
/// 入库时间
/// </summary>
public DateTime update_time { get; set; }
/// <summary>
/// 到货时间
/// </summary>
public DateTime arrival_time { get; set; }
public int count { get; set; }
}
}
......@@ -105,7 +105,7 @@ namespace AutoTurnOver.Services
/// 把最新一批的采购单推送到采购系统
/// </summary>
/// <param name="mainId"></param>
public static void PushBuySys()
public static void PushBuySys(List<dc_auto_purchase_advise_detailed_dto> datas)
{
MySqlConnection conn = connectionHelper._connection;
conn.Open();
......@@ -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 (lastPurchaseAdvise.push_time != null)
if (datas == null)
{
throw new Exception("最新的一个采购建议已经推送过了,请勿重复推送");
return;
}
List<string> planNos = new List<string>();
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))
{
......@@ -140,7 +139,7 @@ namespace AutoTurnOver.Services
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 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);
if (result.IsSuccessed)
......
......@@ -37,7 +37,7 @@ namespace AutoTurnOver.Services
{
// 获取最近2天发送变化的SKU 用于计算
var chageSkuList = AveragePurchase.GetChangeSku(2);
var chageSkuList = AveragePurchase.GetChangeSku(30);
foreach (var skuItem in chageSkuList)
{
dc_average_purchase data = new dc_average_purchase()
......@@ -45,7 +45,7 @@ namespace AutoTurnOver.Services
bailun_sku = skuItem.bailun_sku,
supplier_id = skuItem.supplier_id ?? 0
};
// 查询相关采购单
......@@ -81,9 +81,9 @@ namespace AutoTurnOver.Services
// 平均采购交期
data.delivery_days = delivery_days / purchaseList.Count;
//写入数据库
AveragePurchase.Save(data, conn);
......@@ -102,33 +102,24 @@ namespace AutoTurnOver.Services
};
// 计算平均入库天数
// 查询相关的入库记录
var inbound_days = 0;
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);
if (tempPurchase.pay_type == 1)
{
inbound_days += (int)(itemInboundList.Max(s => s.update_time) - tempPurchase.pay_time).Value.TotalDays;
}
else
{
inbound_days += (int)(itemInboundList.Max(s => s.update_time) - tempPurchase.confirm_time).Value.TotalDays;
}
dataWarehouse.inbound_days = (int)inboundList.Sum(s => (s.update_time - s.arrival_time).TotalDays) / inboundList.Count();
}
else
{
dataWarehouse.inbound_days = 0;
}
// 平均入库天数
dataWarehouse.inbound_days = inbound_days / purchaseWList.Count;
// 计算平均海运调拨天数
// 查询最近5次海运(已完成)记录
var transport1List = AveragePurchase.GetTransportList(skuItem.bailun_sku, skuItem.warehouse_code,"海运", _seed_count);
if(transport1List!=null && transport1List.Count() >= 1)
var transport1List = AveragePurchase.GetTransportList(skuItem.bailun_sku, skuItem.warehouse_code, "海运", _seed_count);
if (transport1List != null && transport1List.Count() >= 1)
{
dataWarehouse.transfer_type_1_days = (decimal)transport1List.Sum(s => (s.complete_time - s.bale_time).TotalDays) / transport1List.Count();
}
// 计算平均空运调拨天数
// 查询最近5次空运(已完成)记录
......@@ -143,8 +134,8 @@ namespace AutoTurnOver.Services
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_delivery = (decimal)transport3List.Sum(s => (s.complete_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.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.arrival_time).TotalDays) / transport3List.Count();
}
AveragePurchase.Save(dataWarehouse, conn);
......
......@@ -15,7 +15,7 @@ namespace AutoTurnOver.Controllers
{
[HttpGet]
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
{
......@@ -25,7 +25,8 @@ namespace AutoTurnOver.Controllers
has_confirm = has_confirm,
has_solve = has_solve,
warehousetype = warehousetype,
warehousearea = warehousearea
warehousearea = warehousearea,
err_type = err_type
};
var total = 0;
......
......@@ -7,6 +7,9 @@ using AutoTurnOver.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using AutoTurnOver.Utility;
using System.Data;
using AutoTurnOver.Common;
using System.IO;
namespace AutoTurnOver.Controllers
{
......@@ -55,7 +58,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)
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
{
......@@ -65,7 +68,8 @@ namespace AutoTurnOver.Controllers
end_date = end_date,
start_date = start_date,
warehousearea = warehousearea,
warehousetype = warehousetype
warehousetype = warehousetype ,
ispush = ispush
};
var total = 0;
......@@ -79,6 +83,63 @@ namespace AutoTurnOver.Controllers
}
/// <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>
/// <param name="id"></param>
......@@ -107,11 +168,25 @@ namespace AutoTurnOver.Controllers
/// </summary>
/// <param name="id"></param>
/// <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
{
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
{
success = true
......
......@@ -168,13 +168,14 @@ namespace AutoTurnOver.Controllers
p.forecast_oneday_sales2,
p.product_inner_code,
p.product_code,
p.bailun_category_name
p.bailun_category_name,
p.monitor_status
});
DataTable table = new DataTable();
string[] cols = new string[] { "Sku","商品编码", "内部编码", "sku标题", "仓库编码", "仓库名称", "MOQ",
"采购在途", "调拨在途", "昨日销量", "明日销量", "未来7天日均", "未来14天日均", "建议采购数", "活动促销数量",
"实际库存", "安全库存", "周转天数", "供应商交期", "质检入库天数", "调拨头程天数", "预测是否断货", "缺货数量"
"实际库存", "安全库存", "周转天数", "供应商交期", "质检入库天数", "调拨头程天数", "预测是否断货", "缺货数量","监控状态"
};
foreach (var item in cols)
{
......@@ -208,6 +209,7 @@ namespace AutoTurnOver.Controllers
row["调拨头程天数"] = itemData.transfer_delivery;
row["预测是否断货"] = itemData.status == 1 ? "是" : "否";
row["缺货数量"] = itemData.quantity_out_stock;
row["监控状态"] = itemData.monitor_status==1?"停止监控":"监控中";
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