Commit 19fcf4dc by guanzhenshan

增加销售平台流水模版导出和平台流水数据导入,支持万能格式

parent dc5a8260
...@@ -27,5 +27,6 @@ namespace Bailun.DC.Models.DataWareHouse ...@@ -27,5 +27,6 @@ namespace Bailun.DC.Models.DataWareHouse
public DateTime? datatime { get; set; } public DateTime? datatime { get; set; }
public string platformsku { get; set; }
} }
} }
...@@ -26,7 +26,7 @@ namespace Bailun.DC.Services.DataWareHouse ...@@ -26,7 +26,7 @@ namespace Bailun.DC.Services.DataWareHouse
var sql = $"select t1.website from flowing_sales t1 where t1.platform='{platform}' group by t1.website"; var sql = $"select t1.website from flowing_sales t1 where t1.platform='{platform}' group by t1.website";
return cn.Query<string>(sql).ToList(); return cn.Query<string>(sql).Where(a=>!string.IsNullOrEmpty(a)).ToList();
} }
} }
...@@ -107,5 +107,82 @@ namespace Bailun.DC.Services.DataWareHouse ...@@ -107,5 +107,82 @@ namespace Bailun.DC.Services.DataWareHouse
} }
/// <summary>
/// 获取销售平台流水的模版数据
/// </summary>
/// <param name="platform"></param>
/// <param name="website"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public Models.DataWareHouse.flowing_sales Get(string platform,string website,DateTime? start,DateTime? end)
{
var sql = "select * from flowing_sales where 1=1";
var sqlParam = new DynamicParameters();
if (!string.IsNullOrEmpty(platform))
{
sql += " and platform=@platform";
sqlParam.Add("platform", platform);
}
if (!string.IsNullOrEmpty(website))
{
sql += " and website=@website";
sqlParam.Add("website", website);
}
if(start.HasValue)
{
sql += $" and datatime>='{start.Value.ToString("yyyy-MM-dd")}'";
}
if(end.HasValue)
{
sql += $" and datatime<'{end.Value.AddDays(1).ToString("yyyy-MM-dd")}'";
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_DW))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.QueryFirstOrDefault<Models.DataWareHouse.flowing_sales>(sql,sqlParam);
return obj;
}
}
/// <summary>
/// 保存流水信息
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public string InsertOrderBilling(List<Models.DataWareHouse.flowing_sales> list)
{
try
{
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_DW))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
foreach (var item in list)
{
cn.Insert(item);
}
}
return "";
}
catch (Exception ex)
{
return ex.Message;
}
}
} }
} }
...@@ -6,6 +6,7 @@ using System.Linq; ...@@ -6,6 +6,7 @@ using System.Linq;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Bailun.DC.Web.Areas.DataWareHouse.Controllers namespace Bailun.DC.Web.Areas.DataWareHouse.Controllers
{ {
[Area("DataWareHouse")] [Area("DataWareHouse")]
...@@ -189,5 +190,161 @@ namespace Bailun.DC.Web.Areas.DataWareHouse.Controllers ...@@ -189,5 +190,161 @@ namespace Bailun.DC.Web.Areas.DataWareHouse.Controllers
ms.Position = 0; ms.Position = 0;
return File(ms, "text/csv", filename + ".csv"); return File(ms, "text/csv", filename + ".csv");
} }
/// <summary>
/// 下载销售平台流水上传模版
/// </summary>
/// <param name="platform"></param>
/// <param name="website"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public ActionResult DownLoadOrderBillingTemplate(string platform,string website,DateTime? start,DateTime? end)
{
if (string.IsNullOrEmpty(platform))
{
return Content("请选择完平台再导出");
}
var obj = new Services.DataWareHouse.PlatformOrderServices().Get(platform, website, start, end);
if (obj == null)
{
return Content("系统没有该平台的模版可导出,你可自定义一个模版,后面的导入都以本次导入的格式作为新模板。");
}
DataTable dataTable = new DataTable(); //实例化
var jsonData = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(obj.jsondata);
var colnames = new List<string>();
foreach (var item in jsonData)
{
dataTable.Columns.Add(item.Key, typeof(string));
colnames.Add(item.Key);
}
jsonData = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(obj.jsondata);
DataRow dataRow = dataTable.NewRow();
foreach (var c in jsonData)
{
dataRow[c.Key] = c.Value;
}
dataTable.Rows.Add(dataRow);
//for (var i = 0; i < dataTable.Columns.Count; i++)
//{
// colnames.Add(dataTable.Columns[i].ColumnName);
//}
var listVal = new List<string>();
for (int j = 0; j < dataTable.Rows.Count; j++)
{
var s = "";
for (int k = 0; k < dataTable.Columns.Count; k++)
{
string tmpRowValue = dataTable.Rows[j][k].ToString();
s += tmpRowValue + "|";
}
//s = s.Substring(0, s.Length - 1);
listVal.Add(s);
}
var guid = Guid.NewGuid().ToString();
var filename = platform + " " + ((start.HasValue ? start.Value.ToString("yyyy-MM-dd") : "" + (end.HasValue ? "至" + end.Value.ToString("yyyy-MM-dd") : ""))) + "的上传模版";
var filepath = _hostingEnvironment.WebRootPath + "\\Files\\Report\\" + DateTime.Now.ToString("yyyy-MM-dd") + "\\";
//ToCSV(listVal, colnames, guid, filepath);
ToExcel(dataTable, guid, filepath);
var ms = new System.IO.MemoryStream();
using (var f = new System.IO.FileStream(filepath + guid + ".xls", System.IO.FileMode.Open))
{
f.CopyTo(ms);
}
ms.Position = 0;
return File(ms, "text/xls", filename + ".xls");
}
/// <summary>
/// 上传销售平台流水
/// </summary>
/// <param name="platform">平台类型</param>
/// <param name="website">站点</param>
/// <returns></returns>
public JsonResult UploadOrderBilling(string platform, string website)
{
if (Request.Form.Files.Count == 0)
{
return Json(new
{
success = false,
msg = "请上传文件!"
});
}
var file = Request.Form.Files[0];
Dictionary<string, DataTable> dic = Base.NpolHelper.ExcelToDataTable(file.OpenReadStream(), file.FileName, true);
if (dic.Count > 0)
{
var tb = dic.FirstOrDefault();
var list = Dtb2Json(tb.Value);
var listOrders = new List<Models.DataWareHouse.flowing_sales>();
foreach (var item in list)
{
//保存数据
var m = new Models.DataWareHouse.flowing_sales {
accountname = "",
createtime = DateTime.Now,
jsondata = Newtonsoft.Json.JsonConvert.SerializeObject(item),
month = "",
platform = platform,
website = website??"",
orderno = "",
platformsku = "",
};
listOrders.Add(m);
}
var result = new Services.DataWareHouse.PlatformOrderServices().InsertOrderBilling(listOrders);
return Json(new {
success = string.IsNullOrEmpty(result),
msg = result
});
}
return Json(new {
success = false,
msg="无法识别表格的数据,请下载模版重新导入,或者检查下表格数据是否正确。",
});
}
private System.Collections.ArrayList Dtb2Json(DataTable dtb)
{
System.Collections.ArrayList dic = new System.Collections.ArrayList();
foreach (DataRow dr in dtb.Rows)
{
System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>();
foreach (DataColumn dc in dtb.Columns)
{
drow.Add(dc.ColumnName, dr[dc.ColumnName]);
}
dic.Add(drow);
}
return dic;
}
} }
} }
@{ @{
ViewData["Title"] = "平台账单流水"; ViewData["Title"] = "平台账单流水";
Layout = "~/Pages/Shared/_MainLayout.cshtml"; Layout = "~/Pages/Shared/_MainLayout.cshtml";
ViewBag.Nav = new string[] { "销售平台流水", ViewBag.platform+"账单流水" }; ViewBag.Nav = new string[] { "销售平台流水", (ViewBag.platform==""?"其他": ViewBag.platform) +"账单流水" };
} }
...@@ -10,16 +10,21 @@ ...@@ -10,16 +10,21 @@
<div class="ibox-content m-b-sm border-bottom"> <div class="ibox-content m-b-sm border-bottom">
<form id="toolbar"> <form id="toolbar">
<div class="form-inline" style="line-height:40px;"> <div class="form-inline" style="line-height:40px;">
<div id="sel_platform_contain" class="form-group" style="display:none;">
<label>平台:</label>
<select id="platform" name="platform" class="form-control" style="width:120px">
<option value="JOOM">JOOM</option>
<option value="WISH">WISH</option>
<option value="Walmart">Walmart</option>
<option value="Shopify">Shopify</option>
<option value="opensky">opensky</option>
<option value="esty">esty</option>
<option value="Dhgate">Dhgate</option>
<option value="JD">JD</option>
<option value="Fyndiq">Fyndiq</option>
</select>
</div>
<div class="form-group"> <div class="form-group">
@*<label>站点</label>
<select id="website" name="website" class="form-control" style="width:130px;">
<option value="">请选择站点</option>
@foreach (var item in ViewBag.sites)
{
<option value="@item">@item</option>
<button class="btn btn-info" type="button" aria-pressed="false"></button>
}
</select>*@
站点: 站点:
<div data-toggle="buttons-checkbox" class="btn-group"> <div data-toggle="buttons-checkbox" class="btn-group">
@foreach (var item in ViewBag.sites) @foreach (var item in ViewBag.sites)
...@@ -43,6 +48,8 @@ ...@@ -43,6 +48,8 @@
<label>&nbsp;</label> <label>&nbsp;</label>
<button type="button" class="btn btn-primary" onclick="list();"><i class="fa fa-search"></i>&nbsp;查询</button> <button type="button" class="btn btn-primary" onclick="list();"><i class="fa fa-search"></i>&nbsp;查询</button>
<button id="btnexport" style="" type="button" class="btn btn-success" onclick="ExportCSV()">导出</button> <button id="btnexport" style="" type="button" class="btn btn-success" onclick="ExportCSV()">导出</button>
<button type="button" style="margin-left:10px" class="btn btn-warning" onclick="downloadTemplate()">模版下载</button>
<button id="btn_Upload" type="button" style="" class="btn btn-warning">导入流水</button>
</div> </div>
</div> </div>
</form> </form>
...@@ -66,7 +73,24 @@ ...@@ -66,7 +73,24 @@
</div> </div>
@section css{ @section css{
<link href="~/js/webuploader-0.1.5/webuploader.css" rel="stylesheet" />
<style> <style>
.webuploader-pick {
position: relative;
display: block;
cursor: pointer;
background: none;
padding: 0px;
color: #fff;
text-align: center;
border-radius: 3px;
overflow: hidden;
}
.webuploader-container {
background-color: cornflowerblue !important;
}
.mules { .mules {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
...@@ -171,16 +195,31 @@ ...@@ -171,16 +195,31 @@
@section scripts{ @section scripts{
<script src="~/js/jspagination/bootstrap-paginator.js"></script> <script src="~/js/jspagination/bootstrap-paginator.js"></script>
<script src="~/js/webuploader-0.1.5/webuploader.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var tb; var tb;
var current_page = 1; var current_page = 1;
var website = ''; var website = '';
var websitecount = '@(ViewBag.sites.Count)';
var platform = '@(ViewBag.platform)';
var BASE_URL = '@(Url.Content("~/js/webuploader-0.1.5/"))';
$(document).ready(function () { $(document).ready(function () {
//其他平台,默认选择第一个平台
if (platform == '') {
$('#sel_platform_contain').css('display', 'inline');
platform = $('#platform').val();
}
list(); list();
laydate.render({ elem: '#start' }); laydate.render({ elem: '#start' });
laydate.render({ elem: '#end' }); laydate.render({ elem: '#end' });
initUpload();
}) })
function list() { function list() {
...@@ -202,18 +241,24 @@ ...@@ -202,18 +241,24 @@
var end = $('#end').val(); var end = $('#end').val();
var orderno = $('#orderno').val(); var orderno = $('#orderno').val();
if (platform == '') {
alert('请选择平台');
return false;
}
var load_index = layer.load(); var load_index = layer.load();
$.submit({ $.submit({
url: '@Url.Content("~/DataWareHouse/PlatformOrder/OrderBillingsJson")', url: '@Url.Content("~/DataWareHouse/PlatformOrder/OrderBillingsJson")',
type:'POST', type:'POST',
paramData: 'page=' + current_page + '&platform=@(ViewBag.platform)&website=' + website + '&start=' + start + '&end=' + end + '&orderno=' + orderno, paramData: 'page=' + current_page + '&platform=' + platform+'&website=' + website + '&start=' + start + '&end=' + end + '&orderno=' + orderno,
func: function (result) { func: function (result) {
layer.close(load_index) layer.close(load_index)
$('#tb').html(''); $('#tb').html('');
if (result.success) { if (result.success) {
//表头 //表头
if (result.total == 0) { if (result.total == 0) {
alert('没有找到该平台数据,请上传'); //alert('没有找到该平台数据,请上传');
layer.msg("没有找到该平台数据,请上传");
return false; return false;
} }
var firstrow = result.rows[0].jsondata; var firstrow = result.rows[0].jsondata;
...@@ -256,6 +301,31 @@ ...@@ -256,6 +301,31 @@
}) })
} }
function initUpload() {
if (platform == '') {
alert('请选择平台');
return false;
}
if (websitecount > 0 && website == '') {
alert('请选择站点,再下载导入模版。');
return false;
}
uploadfile('btn_Upload',
'@Url.Content("~/DataWareHouse/PlatformOrder/UploadOrderBilling")' + '?platform=' + platform + '&website=' + website,
function(result){
if(result.success)
{
alert('上传成功!');
}
else
{
alert(result.msg);
}
});
}
function selWebsite(site,data) { function selWebsite(site,data) {
website = site; website = site;
...@@ -265,6 +335,10 @@ ...@@ -265,6 +335,10 @@
}) })
$(data).prop('aria-pressed', 'true'); $(data).prop('aria-pressed', 'true');
list();
initUpload();
} }
function InitPage(totalpage) { function InitPage(totalpage) {
...@@ -286,7 +360,7 @@ ...@@ -286,7 +360,7 @@
current_page = page; current_page = page;
list(); list();
} }
, onPageChanged: function (page) { , onPageChUrlnged: function (page) {
} }
...@@ -314,14 +388,68 @@ ...@@ -314,14 +388,68 @@
var start = $('#start').val(); var start = $('#start').val();
var end = $('#end').val(); var end = $('#end').val();
var orderno = $('#orderno').val(); var orderno = $('#orderno').val();
if (platform == '') {
alert('请选择平台');
return false;
}
//if (month == '') { //if (month == '') {
// alert('请选择月份'); // alert('请选择月份');
// return false; // return false;
//} //}
window.open('@Url.Content("~/DataWareHouse/PlatformOrder/ExportOrderBillings")' + '?platform=@(ViewBag.platform)&website=' + website + '&start=' + start + '&end=' + end + '&orderno=' + orderno); window.open('@Url.Content("~/DataWareHouse/PlatformOrder/ExportOrderBillings")' + '?platform=' + platform+'&website=' + website + '&start=' + start + '&end=' + end + '&orderno=' + orderno);
} }
function downloadTemplate() {
if (websitecount > 0 && website=='') {
alert('请选择站点,再下载导入模版。');
return false;
}
if (platform == '') {
alert('请选择平台');
return false;
}
var start = $('#start').val();
var end = $('#end').val();
var orderno = $('#orderno').val();
window.open('@Url.Content("~/DataWareHouse/PlatformOrder/DownLoadOrderBillingTemplate?platform=")' + platform + '&website=' + website + '&start=' + start + '&end=' + end,'_blank');
}
function uploadfile(id,url,callback)
{
var uploader = new WebUploader.Uploader({
// swf文件路径
swf: BASE_URL + 'Uploader.swf',
// 文件接收服务端。
server: url!=undefined?url:'@Url.Content("~/File/UploadFile")',
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#'+id,
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
resize: false,
auto: true,
accept: {
extensions: "xls,xlsx",
mimeTypes: ".xls,.xlsx"
}
});
uploader.on('uploadSuccess', function (file, response) {
if(callback!=undefined)
{
callback(response);
}
});
uploader.on('uploadError', function (file) {
layer.msg("上传出错");
});
}
</script> </script>
} }
\ No newline at end of file
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
...@@ -96,6 +99,63 @@ namespace Bailun.DC.Web.Base ...@@ -96,6 +99,63 @@ namespace Bailun.DC.Web.Base
writer.Dispose(); writer.Dispose();
} }
public void ToExcel(DataTable dt, string filename, string filePath)
{
#region 3s
//创建全新的Workbook
var workbook = new HSSFWorkbook();//一個sheet最多65536行
var count = 0;
for (double i = 0; i < Convert.ToDouble(dt.Rows.Count) / Convert.ToDouble(65534); i++)//每个Excel文件的一个页签只能存放65536行数据
{
var row_index = 0;
//创建Sheet
workbook.CreateSheet("Sheet" + (i+1));
//根据Sheet名字获得Sheet对象
var sheet = workbook.GetSheet("Sheet" + (i + 1));
IRow row;
row = sheet.CreateRow(row_index);
//写入标题
for (int j = 0; j < dt.Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(dt.Columns[j].Caption.ToString());
}
row = sheet.CreateRow(++row_index);
//写入数据
for (int j = 0; j < (dt.Rows.Count - count > 65534 ? 65534 : dt.Rows.Count - count); j++)
{
var r = dt.Rows[j + count];
for (int k = 0; k < dt.Columns.Count; k++)
{
row.CreateCell(k).SetCellValue(r[k].ToString());
//如果是数字,判断是否需要转换为数字
//if (IsNumeric(r[k].ToString()))
//{
// row.CreateCell(k).SetCellValue(Convert.ToDouble(r[k].ToString()));
//}
//else
//{
// row.CreateCell(k).SetCellValue(r[k].ToString());
//}
}
row = sheet.CreateRow(++row_index);
}
count += row_index - 2;
}
//保存Workbook方式一: 以文件形式保存到服务器中(每次导出都会生成一个文件,慎重使用)
//var FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
var sw = System.IO.File.Create(filePath + filename+ ".xls");
workbook.Write(sw);
sw.Close();
#endregion
}
#endregion #endregion
} }
......
...@@ -133,6 +133,8 @@ namespace Bailun.DC.Web.Base ...@@ -133,6 +133,8 @@ namespace Bailun.DC.Web.Base
row = sheet.GetRow(i); row = sheet.GetRow(i);
if (row == null) continue; if (row == null) continue;
if (row.FirstCellNum == -1) continue;
try try
{ {
dataRow = dataTable.NewRow(); dataRow = dataTable.NewRow();
......
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