Commit cdcdeac0 by lizefeng

导出优化

parent 23bd71bb
...@@ -3,6 +3,9 @@ using System.Collections.Generic; ...@@ -3,6 +3,9 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using AutoTurnOver.Models; using AutoTurnOver.Models;
using System.Linq; using System.Linq;
using System.IO;
using System.Data;
using AutoTurnOver.Utility;
namespace AutoTurnOver.Services namespace AutoTurnOver.Services
{ {
...@@ -271,5 +274,93 @@ namespace AutoTurnOver.Services ...@@ -271,5 +274,93 @@ namespace AutoTurnOver.Services
return DB.dc_auto_turnover.SkuNewSupplierDeliveryList(); return DB.dc_auto_turnover.SkuNewSupplierDeliveryList();
} }
public MemoryStream Export(UserData user, Condition_AutoTurnOver m,string order,string sort)
{
var fileName = AppContext.BaseDirectory + $@"Result\RealtimeStock\{user.UserAccount}周转表.csv";
var total = 0;
var service = new Services.SkuAutoTurnServices();
int page = 1;
int rows = 50000;
while (true)
{
var list = service.List(m, (page - 1) * rows, rows, ref total, order, sort);
if (list == null || list.Count <= 0) break;
DataTable table = new DataTable();
string[] cols = new string[] { "Sku","商品编码", "内部编码", "sku标题", "仓库编码", "仓库名称", "MOQ",
"采购在途", "调拨在途", "昨日销量", "明日销量", "未来7天日均", "未来14天日均", "建议采购数", "活动促销数量",
"实际库存", "安全库存", "周转天数", "供应商交期", "质检入库天数", "调拨头程天数", "预测是否断货", "缺货数量","监控状态","供应商","采购员","交期异常",
"过去7天日均","过去14天日均","过去30天日均","重量","单价","实时库存","ebay最近7天日均销量","ebay最近14天日均销量","ebay最近30天日均销量","已发货库存","开发时间","是否侵权"
};
foreach (var item in cols)
{
table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["Sku"] = itemData.bailun_sku;
row["商品编码"] = itemData.product_code;
row["内部编码"] = itemData.product_inner_code;
row["sku标题"] = itemData.sku_title;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["MOQ"] = itemData.quantity_minimum_order;
row["采购在途"] = itemData.quantity_purchase;
row["调拨在途"] = itemData.quantity_transfer;
row["昨日销量"] = itemData.oneday_sales;
row["明日销量"] = itemData.forecast_oneday_sales2;
row["未来7天日均"] = itemData.forecast_sevenday_sales;
row["未来14天日均"] = itemData.forecast_fourteenday_sales;
row["建议采购数"] = itemData.quantity_final_advise;
row["活动促销数量"] = itemData.quantity_promotion;
row["实际库存"] = itemData.quantity_inventory;
row["安全库存"] = itemData.quantity_safe_inventory;
row["周转天数"] = itemData.turnover_days;
row["供应商交期"] = itemData.supplier_delivery;
row["质检入库天数"] = itemData.inspection_delivery;
row["调拨头程天数"] = itemData.transfer_delivery;
row["预测是否断货"] = itemData.status == 1 ? "是" : "否";
row["缺货数量"] = itemData.quantity_out_stock;
row["监控状态"] = itemData.monitor_status == 1 ? "停止监控" : "监控中";
row["供应商"] = itemData.supplier_name;
row["采购员"] = itemData.buyer_name;
row["交期异常"] = itemData.delivery_days_error;
row["过去7天日均"] = itemData.history_sevenday_sales;
row["过去14天日均"] = itemData.history_fourteenday_sales;
row["过去30天日均"] = itemData.history_thirtyday_sales;
row["重量"] = itemData.weight;
row["单价"] = itemData.unit_price;
row["实时库存"] = itemData.usable_stock;
row["ebay最近7天日均销量"] = itemData.history_sevenday_sales_ebay;
row["ebay最近14天日均销量"] = itemData.history_fourteenday_sales_ebay;
row["ebay最近30天日均销量"] = itemData.history_thirtyday_sales_ebay;
row["已发货库存"] = itemData.shipped_stock;
row["开发时间"] = itemData.develop_time;
row["是否侵权"] = itemData.has_tort;
table.Rows.Add(row);
}
CsvFileHelper.SaveCSV(table, fileName, page == 1);
page++;
}
var memory = new MemoryStream();
using (var stream = new FileStream(fileName, FileMode.Open))
{
stream.CopyTo(memory);
}
memory.Position = 0;
return memory;
}
} }
} }
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
namespace AutoTurnOver.Utility
{
public class CsvFileHelper
{
/// <summary>
/// 将DataTable中数据写入到CSV文件中
/// </summary>
/// <param name="dt">提供保存数据的DataTable</param>
/// <param name="fileName">CSV的文件路径</param>
/// <param name="isShowColumnName">是否写出列名</param>
public static void SaveCSV(DataTable dt, string fullPath, bool isShowColumnName = true)
{
FileInfo fi = new FileInfo(fullPath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
FileStream fs = isShowColumnName ? new FileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write) : new FileStream(fullPath, System.IO.FileMode.Append, System.IO.FileAccess.Write);
//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
string data = "";
//写出列名称
if (isShowColumnName)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
data += dt.Columns[i].ColumnName.ToString();
if (i < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
//写出各行数据
for (int i = 0; i < dt.Rows.Count; i++)
{
data = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
string str = dt.Rows[i][j].ToString();
//if (str.Contains(',') || str.Contains('"')
// || str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中
//{
// str = string.Format("\"{0}\"", str);
//}
data += ToStr(str);
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
sw.Close();
fs.Close();
}
private static string ToStr(object obj)
{
if (obj == null) return "";
return obj.ToString().Replace(",", "").Replace("\n", "");
}
/// <summary>
/// 将DataTable转成csv字符串
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public static string ToCSV(DataTable table)
{
var result = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
result.Append(table.Columns[i].ColumnName.ToString());
result.Append(i == table.Columns.Count - 1 ? "\n" : ",");
}
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
string str = row[i].ToString();
if (str.Contains(',') || str.Contains('"')
|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中
{
str = string.Format("\"{0}\"", str);
}
result.Append(str);
result.Append(i == table.Columns.Count - 1 ? "\n" : ",");
}
}
return result.ToString();
}
}
}
...@@ -12,7 +12,7 @@ namespace AutoTurnOver.Common ...@@ -12,7 +12,7 @@ namespace AutoTurnOver.Common
/// <summary> /// <summary>
/// csv操作类 /// csv操作类
/// </summary> /// </summary>
public class CsvFileHelper public class CsvFileHelper_bak
{ {
/// <summary> /// <summary>
/// 将DataTable中数据写入到CSV文件中 /// 将DataTable中数据写入到CSV文件中
......
...@@ -7,6 +7,7 @@ using System.Threading.Tasks; ...@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using AutoTurnOver.Common; using AutoTurnOver.Common;
using AutoTurnOver.Models; using AutoTurnOver.Models;
using AutoTurnOver.Services; using AutoTurnOver.Services;
using AutoTurnOver.Utility;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace AutoTurnOver.Controllers namespace AutoTurnOver.Controllers
...@@ -115,7 +116,7 @@ namespace AutoTurnOver.Controllers ...@@ -115,7 +116,7 @@ namespace AutoTurnOver.Controllers
/// <param name="sku"></param> /// <param name="sku"></param>
/// <param name="warehousecode"></param> /// <param name="warehousecode"></param>
/// <returns></returns> /// <returns></returns>
public FileResult ExportRealtime(string sku,string bailun_sku, string warehousecode, string product_inner_code, string sku_title_cn,string supplier_name, string warehousetype, int? warehousearea,int? has_tort = null) public FileResult ExportRealtime(string sku, string bailun_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, int? has_tort = null)
{ {
var user = AutoUtility.GetUser(); var user = AutoUtility.GetUser();
var services = new DailyServices(); var services = new DailyServices();
......
...@@ -99,8 +99,6 @@ namespace AutoTurnOver.Controllers ...@@ -99,8 +99,6 @@ namespace AutoTurnOver.Controllers
{ {
var user = AutoUtility.GetUser(); var user = AutoUtility.GetUser();
if (user == null) throw new Exception("登陆失效,请重新登录"); if (user == null) throw new Exception("登陆失效,请重新登录");
var fileName = AppContext.BaseDirectory + $@"Result\RealtimeStock\{user.UserAccount}周转表.csv";
var m = new Condition_AutoTurnOver var m = new Condition_AutoTurnOver
{ {
searchType = searchType, searchType = searchType,
...@@ -118,88 +116,7 @@ namespace AutoTurnOver.Controllers ...@@ -118,88 +116,7 @@ namespace AutoTurnOver.Controllers
supplier_name = supplier_name, supplier_name = supplier_name,
has_tort = has_tort has_tort = has_tort
}; };
var memory = new SkuAutoTurnServices().Export(user, m,order,sort);
var total = 0;
var service = new Services.SkuAutoTurnServices();
int page = 1;
int rows = 50000;
while (true)
{
var list = service.List(m, (page-1)* rows, rows, ref total, order, sort);
if (list == null || list.Count <= 0) break;
DataTable table = new DataTable();
string[] cols = new string[] { "Sku","商品编码", "内部编码", "sku标题", "仓库编码", "仓库名称", "MOQ",
"采购在途", "调拨在途", "昨日销量", "明日销量", "未来7天日均", "未来14天日均", "建议采购数", "活动促销数量",
"实际库存", "安全库存", "周转天数", "供应商交期", "质检入库天数", "调拨头程天数", "预测是否断货", "缺货数量","监控状态","供应商","采购员","交期异常",
"过去7天日均","过去14天日均","过去30天日均","重量","单价","实时库存","ebay最近7天日均销量","ebay最近14天日均销量","ebay最近30天日均销量","已发货库存","开发时间","是否侵权"
};
foreach (var item in cols)
{
table.Columns.Add(item);
}
foreach (var itemData in list)
{
DataRow row = table.NewRow();
row["Sku"] = itemData.bailun_sku;
row["商品编码"] = itemData.product_code;
row["内部编码"] = itemData.product_inner_code;
row["sku标题"] = itemData.sku_title;
row["仓库编码"] = itemData.warehouse_code;
row["仓库名称"] = itemData.warehouse_name;
row["MOQ"] = itemData.quantity_minimum_order;
row["采购在途"] = itemData.quantity_purchase;
row["调拨在途"] = itemData.quantity_transfer;
row["昨日销量"] = itemData.oneday_sales;
row["明日销量"] = itemData.forecast_oneday_sales2;
row["未来7天日均"] = itemData.forecast_sevenday_sales;
row["未来14天日均"] = itemData.forecast_fourteenday_sales;
row["建议采购数"] = itemData.quantity_final_advise;
row["活动促销数量"] = itemData.quantity_promotion;
row["实际库存"] = itemData.quantity_inventory;
row["安全库存"] = itemData.quantity_safe_inventory;
row["周转天数"] = itemData.turnover_days;
row["供应商交期"] = itemData.supplier_delivery;
row["质检入库天数"] = itemData.inspection_delivery;
row["调拨头程天数"] = itemData.transfer_delivery;
row["预测是否断货"] = itemData.status == 1 ? "是" : "否";
row["缺货数量"] = itemData.quantity_out_stock;
row["监控状态"] = itemData.monitor_status == 1 ? "停止监控" : "监控中";
row["供应商"] = itemData.supplier_name;
row["采购员"] = itemData.buyer_name;
row["交期异常"] = itemData.delivery_days_error;
row["过去7天日均"] = itemData.history_sevenday_sales;
row["过去14天日均"] = itemData.history_fourteenday_sales;
row["过去30天日均"] = itemData.history_thirtyday_sales;
row["重量"] = itemData.weight;
row["单价"] = itemData.unit_price;
row["实时库存"] = itemData.usable_stock;
row["ebay最近7天日均销量"] = itemData.history_sevenday_sales_ebay;
row["ebay最近14天日均销量"] = itemData.history_fourteenday_sales_ebay;
row["ebay最近30天日均销量"] = itemData.history_thirtyday_sales_ebay;
row["已发货库存"] = itemData.shipped_stock;
row["开发时间"] = itemData.develop_time;
row["是否侵权"] = itemData.has_tort;
table.Rows.Add(row);
}
CsvFileHelper.SaveCSV(table, fileName,page==1);
page++;
}
var memory = new MemoryStream();
using (var stream = new FileStream(fileName, FileMode.Open))
{
stream.CopyTo(memory);
}
memory.Position = 0;
return File(memory, "text/csv", $"{user.UserAccount}周转表.csv"); return File(memory, "text/csv", $"{user.UserAccount}周转表.csv");
} }
catch (Exception ex) catch (Exception ex)
......
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