Commit 163929af by lizefeng

优化库存导出

parent 619d0d12
...@@ -13,7 +13,7 @@ namespace AutoGeneratePurchaseAdvise ...@@ -13,7 +13,7 @@ namespace AutoGeneratePurchaseAdvise
{ {
Console.WriteLine("采购建议计算任务启动..."); Console.WriteLine("采购建议计算任务启动...");
// 创建采购计划 // 创建采购计划
//PurchaseAdviseServices.Generate(); //new DailyServices().GenerateData();
var builder = new HostBuilder().ConfigureServices((hostContext, services) => var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
{ {
services.AddHostedService<GeneratePurchaseAdviseBackgroundService>(); services.AddHostedService<GeneratePurchaseAdviseBackgroundService>();
......
using System;
using System.Collections.Generic;
using System.Text;
using Dapper;
using AutoTurnOver.Models;
namespace AutoTurnOver.DB
{
/// <summary>
/// jit 备货规则
/// </summary>
public class dc_auto_jit_tag_dao : connectionHelper
{
/// <summary>
/// 获取 jit 备货规则分页列表
/// </summary>
/// <param name="m"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <param name="total"></param>
/// <returns></returns>
public static List<dc_auto_jit_tag> JitTagList(int offset, int limit, ref int total)
{
var list = new List<dc_auto_jit_tag>();
try
{
var sql = @"select t1.* from dc_auto_jit_tag as t1 where 1 = 1 ";
total = _connection.ExecuteScalar<int>("select count(0) from (" + sql + ") tb1");
var obj = _connection.Query<dc_auto_jit_tag>(sql + " limit " + offset + "," + limit);
return obj.AsList();
}
catch (Exception)
{
return list;
}
}
/// <summary>
/// 保存安全库存规则
/// </summary>
/// <param name="m">销售设置model</param>
/// <param name="username">当前操作人名称</param>
/// <returns></returns>
public static string SaveJitTag(dc_auto_jit_tag m, string username)
{
var obj = _connection.QueryFirstOrDefault<dc_auto_jit_tag>("select * from dc_auto_jit_tag where id=" + m.id);
if (obj == null)
{
obj = new dc_auto_jit_tag { };
}
obj.gmt_update = DateTime.Now;
obj.id = m.id;
try
{
if (obj.id > 0)
{
var result = _connection.Update<dc_auto_jit_tag>(obj);
return result > 0 ? "" : "保存异常,请重试!";
}
else
{
var result = _connection.Insert<dc_auto_jit_tag>(obj);
return result.HasValue && result.Value > 0 ? "" : "提交异常,请重试!";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 获取安全库存规则设置详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static dc_auto_jit_tag GetJitTagById(int id)
{
return _connection.QueryFirstOrDefault<dc_auto_jit_tag>("select * from dc_auto_jit_tag where id=" + id);
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models
{
/// <summary>
/// 备货规则
/// </summary>
public class dc_auto_jit_tag
{
public int id { get; set; }
public string tag_name { get; set; }
/// <summary>
/// 1= 大于
/// 2 =等于
/// 3 = 小于
/// 4 = 大于等于
/// 5 = 小于等于
/// </summary>
public int is_gt_7 { get; set; }
public decimal quantity_sales7 { get; set; }
public decimal is_gt_14 { get; set; }
public decimal quantity_sales14 { get; set; }
/// <summary>
/// 安全库存天数
/// </summary>
public decimal quantity_safe_inventory { get; set; }
/// <summary>
/// 优先级别
/// </summary>
public int level { get; set; }
/// <summary>
/// 是否需要淘汰
/// </summary>
public int is_eliminate { get; set; }
public DateTime gmt_update { get; set; }
/// <summary>
/// 14 日销量的算法是否启用
/// </summary>
public int enable_14 { get; set; }
/// <summary>
/// 7 日销量的算法是否启用
/// </summary>
public int enable_7 { get; set; }
}
}
...@@ -13,6 +13,8 @@ namespace AutoTurnOver.Services ...@@ -13,6 +13,8 @@ namespace AutoTurnOver.Services
/// </summary> /// </summary>
public class DailyServices public class DailyServices
{ {
/// <summary> /// <summary>
/// 查询采购在途数据 /// 查询采购在途数据
/// </summary> /// </summary>
...@@ -66,104 +68,123 @@ namespace AutoTurnOver.Services ...@@ -66,104 +68,123 @@ namespace AutoTurnOver.Services
return DB.daily.OutOfStockOrderList(sku, warehouse_code); return DB.daily.OutOfStockOrderList(sku, warehouse_code);
} }
private static int export_count = 0;
public MemoryStream Export(UserData user, string sku, string bailun_sku, string warehousecode, 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, int? has_tort = null) public MemoryStream Export(UserData user, string sku, string bailun_sku, string warehousecode, 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, int? has_tort = null)
{ {
var services = new DailyServices(); try
var fileName = AppContext.BaseDirectory + $@"Result\RealtimeStock\{user.UserAccount}实时库存.csv";
int page = 1;
int rows = 50000;
while (true)
{ {
var list = services.RealtimeList(sku, bailun_sku, warehousecode, product_inner_code, sku_title_cn, supplier_name, (page - 1) * rows, rows, ref total, warehousetype, warehousearea, has_tort: has_tort); export_count++;
var services = new DailyServices();
var fileName = AppContext.BaseDirectory + $@"Result\RealtimeStock\{user.UserAccount}实时库存.csv";
int page = 1;
int rows = 50000;
if (export_count == 1)
{
rows = 500000;
}
while (true)
{
var list = services.RealtimeList(sku, bailun_sku, warehousecode, product_inner_code, sku_title_cn, supplier_name, (page - 1) * rows, rows, ref total, warehousetype, warehousearea, has_tort: has_tort);
if (list == null || list.Count <= 0) break; if (list == null || list.Count <= 0) break;
DataTable table = new DataTable(); DataTable table = new DataTable();
string[] cols = new string[] { "Sku", "采购名称", "中文名", "英文名称","内部编码", "仓库编码", "仓库名称", "货主编码","实时采购在途","实时调拨在途" string[] cols = new string[] { "Sku", "采购名称", "中文名", "英文名称","内部编码", "仓库编码", "仓库名称", "货主编码","实时采购在途","实时调拨在途"
,"订货数量","运输在途","中转仓库存","冻结库存","供应商库存","预售库存","不良品库存","在途库存","收货待检" ,"订货数量","运输在途","中转仓库存","冻结库存","供应商库存","预售库存","不良品库存","在途库存","收货待检"
,"待上架","可配库存","销售可用库存(聚合)","销售可用库存(私有)","销售可用库存(共享)","在仓库存(共享)","在仓库存(私有)","在仓库存(聚合)","仓库占用(共享)" ,"待上架","可配库存","销售可用库存(聚合)","销售可用库存(私有)","销售可用库存(共享)","在仓库存(共享)","在仓库存(私有)","在仓库存(聚合)","仓库占用(共享)"
,"仓库占用(私有)","仓库占用(聚合)","活动占用","单占用(私有)","订单占用(共享)","订单占用(聚合)","环球更新时间","供应商","采购员","重量","单价","已发货库存","实时缺货","是否侵权", ,"仓库占用(私有)","仓库占用(聚合)","活动占用","单占用(私有)","订单占用(共享)","订单占用(聚合)","环球更新时间","供应商","采购员","重量","单价","已发货库存","实时缺货","是否侵权",
"过去7日日均销量", "过去14日日均销量", "过去30日日均销量", "过去7日Eaby日均销量", "过去14日Eaby日均销量", "过去30日Eaby日均销量","监控状态" "过去7日日均销量", "过去14日日均销量", "过去30日日均销量", "过去7日Eaby日均销量", "过去14日Eaby日均销量", "过去30日Eaby日均销量","监控状态"
}; };
foreach (var item in cols) foreach (var item in cols)
{ {
table.Columns.Add(item); table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["Sku"] = itemData.bailun_sku;
row["采购名称"] = itemData.buyer_name;
row["中文名"] = itemData.sku_title_cn;
row["英文名称"] = itemData.sku_title_en;
row["内部编码"] = itemData.product_inner_code;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["货主编码"] = itemData.owner_code;
row["订货数量"] = itemData.quantity_reservation;
row["运输在途"] = itemData.quantity_transport;
row["中转仓库存"] = itemData.quantity_transfer;
row["冻结库存"] = itemData.quantity_freeze;
row["供应商库存"] = itemData.quantity_supplier;
row["预售库存"] = itemData.quantity_presell;
row["不良品库存"] = itemData.quantity_defective;
row["在途库存"] = itemData.quantity_transit;
row["收货待检"] = itemData.wait_check;
row["待上架"] = itemData.wait_putaway;
row["可配库存"] = itemData.usable_stock;
row["销售可用库存(聚合)"] = itemData.usable_sales;
row["销售可用库存(私有)"] = itemData.usable_sales_private;
row["销售可用库存(共享)"] = itemData.usable_sales_share;
row["在仓库存(共享)"] = itemData.in_warehouse_share;
row["在仓库存(私有)"] = itemData.in_warehouse_private;
row["在仓库存(聚合)"] = itemData.in_warehouse;
row["仓库占用(共享)"] = itemData.occupy_stock_share;
row["仓库占用(私有)"] = itemData.occupy_stock_private;
row["仓库占用(聚合)"] = itemData.occupy_stock;
row["活动占用"] = itemData.occupy_activity;
row["单占用(私有)"] = itemData.occupy_order_private;
row["订单占用(共享)"] = itemData.occupy_order;
row["订单占用(聚合)"] = itemData.occupy_order_share;
row["环球更新时间"] = itemData.update_time;
row["实时采购在途"] = itemData.realtime_quantity_purchase;
row["实时调拨在途"] = itemData.realtime_quantity_transfer;
row["供应商"] = itemData.suppliers_name;
row["采购员"] = itemData.buyer_name;
row["重量"] = itemData.weight;
row["单价"] = itemData.unit_price;
row["已发货库存"] = itemData.shipped_stock;
row["实时缺货"] = itemData.quantity_out_stock;
row["是否侵权"] = itemData.has_tort;
row["过去7日日均销量"] = itemData.history_sevenday_sales;
row["过去14日日均销量"] = itemData.history_fourteenday_sales;
row["过去30日日均销量"] = itemData.history_thirtyday_sales;
row["过去7日Eaby日均销量"] = itemData.history_sevenday_sales_ebay;
row["过去14日Eaby日均销量"] = itemData.history_fourteenday_sales_ebay;
row["过去30日Eaby日均销量"] = itemData.history_thirtyday_sales_ebay;
row["监控状态"] = itemData.monitor_status == 0 ? "监控中" : "停止监控";
table.Rows.Add(row);
}
CsvFileHelper.SaveCSV(table, fileName, page == 1);
page++;
} }
foreach (var itemData in list)
var memory = new MemoryStream();
using (var stream = new FileStream(fileName, FileMode.Open))
{ {
DataRow row = table.NewRow(); stream.CopyTo(memory);
row["Sku"] = itemData.bailun_sku;
row["采购名称"] = itemData.buyer_name;
row["中文名"] = itemData.sku_title_cn;
row["英文名称"] = itemData.sku_title_en;
row["内部编码"] = itemData.product_inner_code;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["货主编码"] = itemData.owner_code;
row["订货数量"] = itemData.quantity_reservation;
row["运输在途"] = itemData.quantity_transport;
row["中转仓库存"] = itemData.quantity_transfer;
row["冻结库存"] = itemData.quantity_freeze;
row["供应商库存"] = itemData.quantity_supplier;
row["预售库存"] = itemData.quantity_presell;
row["不良品库存"] = itemData.quantity_defective;
row["在途库存"] = itemData.quantity_transit;
row["收货待检"] = itemData.wait_check;
row["待上架"] = itemData.wait_putaway;
row["可配库存"] = itemData.usable_stock;
row["销售可用库存(聚合)"] = itemData.usable_sales;
row["销售可用库存(私有)"] = itemData.usable_sales_private;
row["销售可用库存(共享)"] = itemData.usable_sales_share;
row["在仓库存(共享)"] = itemData.in_warehouse_share;
row["在仓库存(私有)"] = itemData.in_warehouse_private;
row["在仓库存(聚合)"] = itemData.in_warehouse;
row["仓库占用(共享)"] = itemData.occupy_stock_share;
row["仓库占用(私有)"] = itemData.occupy_stock_private;
row["仓库占用(聚合)"] = itemData.occupy_stock;
row["活动占用"] = itemData.occupy_activity;
row["单占用(私有)"] = itemData.occupy_order_private;
row["订单占用(共享)"] = itemData.occupy_order;
row["订单占用(聚合)"] = itemData.occupy_order_share;
row["环球更新时间"] = itemData.update_time;
row["实时采购在途"] = itemData.realtime_quantity_purchase;
row["实时调拨在途"] = itemData.realtime_quantity_transfer;
row["供应商"] = itemData.suppliers_name;
row["采购员"] = itemData.buyer_name;
row["重量"] = itemData.weight;
row["单价"] = itemData.unit_price;
row["已发货库存"] = itemData.shipped_stock;
row["实时缺货"] = itemData.quantity_out_stock;
row["是否侵权"] = itemData.has_tort;
row["过去7日日均销量"] = itemData.history_sevenday_sales;
row["过去14日日均销量"] = itemData.history_fourteenday_sales;
row["过去30日日均销量"] = itemData.history_thirtyday_sales;
row["过去7日Eaby日均销量"] = itemData.history_sevenday_sales_ebay;
row["过去14日Eaby日均销量"] = itemData.history_fourteenday_sales_ebay;
row["过去30日Eaby日均销量"] = itemData.history_thirtyday_sales_ebay;
row["监控状态"] = itemData.monitor_status == 0 ? "监控中" : "停止监控";
table.Rows.Add(row);
} }
memory.Position = 0;
CsvFileHelper.SaveCSV(table, fileName, page == 1); return memory;
page++;
} }
catch (Exception)
{
throw;
var memory = new MemoryStream(); }
using (var stream = new FileStream(fileName, FileMode.Open)) finally
{ {
stream.CopyTo(memory); export_count--;
} }
memory.Position = 0;
return memory;
} }
public async void GenerateData() public async void GenerateData()
......
using AutoTurnOver.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Services
{
public class JitTagServices
{
#region 安全库存规则配置
/// <summary>
/// 获取安全库存规则设置分页列表
/// </summary>
/// <param name="m"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
public List<dc_auto_jit_tag> JitTagList(int offset, int limit, ref int total)
{
return DB.dc_auto_jit_tag_dao.JitTagList( offset, limit, ref total);
}
public string SaveJitTag(dc_auto_jit_tag m, string username)
{
return DB.dc_auto_jit_tag_dao.SaveJitTag(m, username);
}
public dc_auto_jit_tag GetJitTagById(int id)
{
return DB.dc_auto_jit_tag_dao.GetJitTagById(id);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoTurnOver.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace AutoTurnOver.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class JitTagController : ControllerBase
{
#region 安全库存规则
[HttpGet]
public JsonResult JitTagList(int limit, int offset, string order, string sort)
{
var total = 0;
var service = new Services.JitTagServices();
var list = service.JitTagList( offset, limit, ref total);
return new JsonResult(new
{
rows = list,
total = total,
});
}
[HttpPost]
public JsonResult SaveJitTag([FromBody]dc_auto_jit_tag m)
{
var result = new Services.JitTagServices().SaveJitTag(m, "");
return new JsonResult(result);
}
/// <summary>
/// 获取安全库存规则设置详情
/// </summary>
/// <param name="id">销售设置id</param>
/// <returns></returns>
[HttpGet]
public JsonResult GetJitTagById(int id)
{
var m = new Services.JitTagServices().GetInventoryById(id);
return new JsonResult(m);
}
#endregion
}
}
\ 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