Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mall.oytour.com
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄奎
mall.oytour.com
Commits
669cc6a7
Commit
669cc6a7
authored
Aug 06, 2024
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
111
parent
1703ac07
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
261 additions
and
9 deletions
+261
-9
ExcelTempLateHelper.cs
Mall.Common/Plugin/ExcelTempLateHelper.cs
+189
-0
TradeController.cs
Mall.WebApi/Controllers/TradePavilion/TradeController.cs
+72
-9
No files found.
Mall.Common/Plugin/ExcelTempLateHelper.cs
View file @
669cc6a7
...
...
@@ -417,6 +417,195 @@ namespace Mall.Common.Plugin
return
ms
.
ToArray
();
}
}
/// <summary>
/// 模板导出
/// </summary>
/// <param name="list">模板数据</param>
/// <param name="isTempLate">是否模板导出</param>
/// <param name="tempLatePath">模板文件路劲</param>
public
static
byte
[]
ToBrandExcelExtend
(
List
<
ExcelDataSource
>
list
,
string
filepath
)
{
HSSFWorkbook
workbook
=
null
;
HSSFSheet
sheet
;
workbook
=
new
HSSFWorkbook
();
sheet
=
workbook
.
CreateSheet
()
as
HSSFSheet
;
int
rowIndex
=
0
;
HSSFFont
ffont
=
(
HSSFFont
)
workbook
.
CreateFont
();
//单元格样式
HSSFCellStyle
fCellStyle
=
(
HSSFCellStyle
)
workbook
.
CreateCellStyle
();
//循环添加行
foreach
(
var
item
in
list
)
{
HSSFRow
dataRow
=
sheet
.
CreateRow
(
rowIndex
)
as
HSSFRow
;
if
(
item
.
ColumnHight
>
0
)
{
dataRow
.
Height
=
(
short
)(
item
.
ColumnHight
*
10
);
//行高
}
else
{
dataRow
.
Height
=
50
*
10
;
//行高
}
int
columnsIndex
=
0
;
//循环添加列
foreach
(
var
subItem
in
item
.
ExcelRows
)
{
if
(
subItem
.
Pic
==
1
&&
!
string
.
IsNullOrWhiteSpace
(
subItem
.
Value
))
{
HSSFPatriarch
patriarch
=
(
HSSFPatriarch
)
sheet
.
CreateDrawingPatriarch
();
try
{
string
fileName
=
System
.
IO
.
Path
.
GetFileName
(
subItem
.
Value
);
string
newPath
=
filepath
+
fileName
;
byte
[]
bytes
=
System
.
IO
.
File
.
ReadAllBytes
(
newPath
);
int
pictureIdx
=
workbook
.
AddPicture
(
bytes
,
PictureType
.
JPEG
);
HSSFClientAnchor
anchor
=
new
HSSFClientAnchor
(
0
,
0
,
0
,
0
,
columnsIndex
,
rowIndex
,
columnsIndex
+
1
,
rowIndex
+
1
);
//把图片插到相应的位置
HSSFPicture
pict
=
(
HSSFPicture
)
patriarch
.
CreatePicture
(
anchor
,
pictureIdx
);
}
catch
{
}
columnsIndex
++;
}
else
{
var
cell
=
dataRow
.
CreateCell
(
columnsIndex
);
fCellStyle
.
WrapText
=
true
;
//设置单元宽度
if
(
subItem
.
CellWidth
>
0
)
{
sheet
.
SetColumnWidth
(
columnsIndex
,
subItem
.
CellWidth
*
256
);
}
//设置单元格背景颜色
switch
(
subItem
.
BgColorEnum
)
{
case
ColorEnum
.
BrightGreen
:
fCellStyle
.
FillForegroundColor
=
HSSFColor
.
BrightGreen
.
Index
;
fCellStyle
.
FillPattern
=
FillPattern
.
SolidForeground
;
break
;
case
ColorEnum
.
DarkBlue
:
fCellStyle
.
FillForegroundColor
=
HSSFColor
.
DarkBlue
.
Index
;
fCellStyle
.
FillPattern
=
FillPattern
.
SolidForeground
;
break
;
case
ColorEnum
.
Red
:
fCellStyle
.
FillForegroundColor
=
HSSFColor
.
Red
.
Index
;
fCellStyle
.
FillPattern
=
FillPattern
.
SolidForeground
;
break
;
}
if
(
subItem
.
FontHeight
>
0
)
{
ffont
.
FontHeight
=
subItem
.
FontHeight
*
20
;
}
else
{
ffont
.
FontHeight
=
11
*
20
;
}
if
(!
string
.
IsNullOrWhiteSpace
(
subItem
.
FontName
))
{
ffont
.
FontName
=
subItem
.
FontName
;
}
else
{
ffont
.
FontName
=
"宋体"
;
}
if
(
subItem
.
FontSize
>
0
)
{
ffont
.
FontHeightInPoints
=
subItem
.
FontSize
;
}
//设置字体颜色
switch
(
subItem
.
FontColorEnum
)
{
case
ColorEnum
.
Red
:
ffont
.
Color
=
HSSFColor
.
Red
.
Index
;
break
;
case
ColorEnum
.
Green
:
ffont
.
Color
=
HSSFColor
.
Green
.
Index
;
break
;
}
//字体加粗
if
(
subItem
.
IsBold
)
{
ffont
.
IsBold
=
subItem
.
IsBold
;
}
fCellStyle
.
SetFont
(
ffont
);
//水平对齐方式
fCellStyle
.
Alignment
=
subItem
.
HAlignmentEnum
switch
{
HAlignmentEnum
.
CENTER
=>
HorizontalAlignment
.
Center
,
HAlignmentEnum
.
LEFT
=>
HorizontalAlignment
.
Left
,
HAlignmentEnum
.
RIGHT
=>
HorizontalAlignment
.
Right
,
_
=>
HorizontalAlignment
.
Center
,
};
//垂直对齐方式
fCellStyle
.
VerticalAlignment
=
subItem
.
VAlignmentEnum
switch
{
VAlignmentEnum
.
CENTER
=>
VerticalAlignment
.
Center
,
VAlignmentEnum
.
TOP
=>
VerticalAlignment
.
Top
,
VAlignmentEnum
.
BOTTOM
=>
VerticalAlignment
.
Bottom
,
_
=>
VerticalAlignment
.
Center
,
};
if
(!
subItem
.
IsSetBorder
)
{
fCellStyle
.
BorderBottom
=
BorderStyle
.
Thin
;
fCellStyle
.
BorderLeft
=
BorderStyle
.
Thin
;
fCellStyle
.
BorderRight
=
BorderStyle
.
Thin
;
fCellStyle
.
BorderTop
=
BorderStyle
.
Thin
;
}
else
{
fCellStyle
.
BorderBottom
=
BorderStyle
.
None
;
fCellStyle
.
BorderLeft
=
BorderStyle
.
None
;
fCellStyle
.
BorderRight
=
BorderStyle
.
None
;
fCellStyle
.
BorderTop
=
BorderStyle
.
None
;
}
//合并单元格
if
(
subItem
.
Colspan
>
1
||
subItem
.
Rowspan
>
1
)
{
var
region
=
new
CellRangeAddress
(
rowIndex
,
rowIndex
+
(
subItem
.
Rowspan
-
1
),
columnsIndex
,
columnsIndex
+
(
subItem
.
Colspan
-
1
));
sheet
.
AddMergedRegion
(
region
);
for
(
int
i
=
region
.
FirstRow
;
i
<=
region
.
LastRow
;
i
++)
{
IRow
row
=
CellUtil
.
GetRow
(
i
,
sheet
);
for
(
int
j
=
region
.
FirstColumn
;
j
<=
region
.
LastColumn
;
j
++)
{
ICell
singleCell
=
CellUtil
.
GetCell
(
row
,
(
short
)
j
);
singleCell
.
CellStyle
=
fCellStyle
;
}
}
columnsIndex
+=
subItem
.
Colspan
;
}
else
{
cell
.
CellStyle
=
fCellStyle
;
columnsIndex
++;
}
cell
.
SetCellValue
(
subItem
.
Value
??
""
);
}
}
rowIndex
++;
}
using
(
MemoryStream
ms
=
new
MemoryStream
())
{
workbook
.
Write
(
ms
);
ms
.
Flush
();
ms
.
Position
=
0
;
return
ms
.
ToArray
();
}
}
}
...
...
Mall.WebApi/Controllers/TradePavilion/TradeController.cs
View file @
669cc6a7
...
...
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using
System.Collections.Specialized
;
using
System.IO
;
using
System.Linq
;
using
System.Net
;
using
System.Text
;
using
System.Threading.Tasks
;
using
System.Web
;
...
...
@@ -21,6 +22,7 @@ using Microsoft.AspNetCore.Cors;
using
Microsoft.AspNetCore.Mvc
;
using
Newtonsoft.Json
;
using
Newtonsoft.Json.Linq
;
using
NPOI.SS.Formula.Functions
;
using
SharpCompress.Common
;
namespace
Mall.WebApi.Controllers.TradePavilion
...
...
@@ -2168,7 +2170,7 @@ namespace Mall.WebApi.Controllers.TradePavilion
if
(
string
.
IsNullOrEmpty
(
redisValue
))
{
redisHelper
.
StringSet
(
key
,
fileName
,
TimeSpan
.
FromMinutes
(
30
));
GetBrandListToExcel
(
demodel
,
ExcelEnumIds
,
fileUrl
);
GetBrandListToExcel
(
demodel
,
ExcelEnumIds
,
tempPath
,
fileUrl
);
}
}
return
await
Task
.
Run
<
ApiResult
>(()
=>
...
...
@@ -2179,8 +2181,10 @@ namespace Mall.WebApi.Controllers.TradePavilion
};
if
(
System
.
IO
.
File
.
Exists
(
fileUrl
))
{
var
filePath
=
"/upfile/temporary/"
+
hashKey
+
"/"
;
var
fileUrl
=
"/upfile/temporary/"
+
hashKey
+
"/"
+
fileName
;
apiResult
.
resultCode
=
1
;
apiResult
.
data
=
"/upfile/temporary/"
+
hashKey
+
"/"
+
fileName
;
apiResult
.
data
=
new
{
filePath
,
fileUrl
}
;
apiResult
.
message
=
key
;
}
return
apiResult
;
...
...
@@ -2197,13 +2201,18 @@ namespace Mall.WebApi.Controllers.TradePavilion
JObject
parms
=
JObject
.
Parse
(
RequestParm
.
msg
.
ToString
());
string
key
=
parms
.
GetStringValue
(
"key"
);
string
fileUrl
=
parms
.
GetStringValue
(
"fileUrl"
);
string
newPath
=
Directory
.
GetCurrentDirectory
()
+
fileUrl
;
string
filepath
=
parms
.
GetStringValue
(
"filepath"
);
string
newPath
=
Directory
.
GetCurrentDirectory
()
+
filepath
;
try
{
if
(
System
.
IO
.
File
.
Exists
(
newPath
))
if
(
Directory
.
Exists
(
newPath
))
{
System
.
IO
.
File
.
Delete
(
newPath
);
Directory
.
Delete
(
newPath
,
true
);
}
//if (System.IO.File.Exists(newPath))
//{
// System.IO.File.Delete(newPath);
//}
redisHelper
.
KeyDelete
(
key
);
}
catch
(
Exception
ex
)
...
...
@@ -2239,7 +2248,7 @@ namespace Mall.WebApi.Controllers.TradePavilion
/// 品牌下载
/// </summary>
private
void
GetBrandListToExcel
(
RB_Brand_Extend
demodel
,
List
<
int
>
ExcelEnumIds
,
string
excelFileUrl
)
private
void
GetBrandListToExcel
(
RB_Brand_Extend
demodel
,
List
<
int
>
ExcelEnumIds
,
string
filePath
,
string
excelFileUrl
)
{
try
{
...
...
@@ -2282,8 +2291,25 @@ namespace Mall.WebApi.Controllers.TradePavilion
try
{
List
<
Action
>
actions
=
new
List
<
Action
>();
var
list
=
carrierModule
.
GetBrandListByWhere
(
demodel
);
if
(
list
!=
null
&&
list
.
Count
>
0
)
{
foreach
(
var
item
in
list
)
{
actions
.
Add
(
new
Action
(()
=>
{
DownLoadUrl
(
item
.
Logo
,
filePath
);
}));
}
}
if
(
actions
!=
null
&&
actions
.
Count
>
0
)
{
ParallelOptions
options
=
new
ParallelOptions
{
MaxDegreeOfParallelism
=
4
};
// 设置最大并行度为 4
Parallel
.
Invoke
(
options
,
actions
.
ToArray
());
}
#
region
组装数据
int
Num
=
0
;
foreach
(
var
item
in
list
)
...
...
@@ -2350,7 +2376,7 @@ namespace Mall.WebApi.Controllers.TradePavilion
slist
.
Add
(
datarow
);
}
#
endregion
bytes
=
ExcelTempLateHelper
.
To
ExcelExtend
(
slist
);
bytes
=
ExcelTempLateHelper
.
To
BrandExcelExtend
(
slist
,
filePath
);
using
(
FileStream
fs
=
new
FileStream
(
excelFileUrl
,
FileMode
.
CreateNew
))
{
fs
.
Write
(
bytes
,
0
,
bytes
.
Length
);
...
...
@@ -2358,7 +2384,7 @@ namespace Mall.WebApi.Controllers.TradePavilion
}
catch
(
Exception
ex
)
{
bytes
=
ExcelTempLateHelper
.
To
ExcelExtend
(
slist
);
bytes
=
ExcelTempLateHelper
.
To
BrandExcelExtend
(
slist
,
filePath
);
using
(
FileStream
fs
=
new
FileStream
(
excelFileUrl
,
FileMode
.
CreateNew
))
{
fs
.
Write
(
bytes
,
0
,
bytes
.
Length
);
...
...
@@ -2367,6 +2393,43 @@ namespace Mall.WebApi.Controllers.TradePavilion
}
}
/// <summary>
/// 下载文件
/// </summary>
private
void
DownLoadUrl
(
string
url
,
string
savePath
)
{
Uri
uri
=
new
Uri
(
url
);
string
path
=
uri
.
AbsolutePath
;
int
lastSlashIndex
=
path
.
LastIndexOf
(
'/'
);
string
fileName
=
path
.
Substring
(
lastSlashIndex
+
1
);
string
newFilePath
=
savePath
+
fileName
;
string
logStr
=
string
.
Format
(
"{0} 开始下载 Url_{1} 文件 "
,
DateTime
.
Now
.
ToString
(
"MM-dd HH:mm:ss fff"
),
url
);
Console
.
WriteLine
(
logStr
);
LogHelper
.
WriteInfo
(
logStr
);
try
{
HttpWebRequest
request
=
(
HttpWebRequest
)
WebRequest
.
Create
(
url
);
request
.
Timeout
=
1000
*
60
*
20
;
// 10分钟超时时间
using
(
WebResponse
response
=
request
.
GetResponse
())
using
(
Stream
responseStream
=
response
.
GetResponseStream
())
using
(
Stream
fileStream
=
new
FileStream
(
newFilePath
,
FileMode
.
Create
,
FileAccess
.
Write
,
FileShare
.
None
))
{
responseStream
.
CopyTo
(
fileStream
);
}
}
catch
(
Exception
ex
)
{
logStr
=
string
.
Format
(
"{0} 下载 Url_{1} 异常:{2} message:{3}"
,
DateTime
.
Now
.
ToString
(
"MM-dd HH:mm:ss fff"
),
url
,
ex
.
StackTrace
,
ex
.
Message
);
Console
.
WriteLine
(
logStr
);
LogHelper
.
WriteInfo
(
logStr
);
}
logStr
=
string
.
Format
(
"{0} 下载 Url_{1} 文件结束 "
,
DateTime
.
Now
.
ToString
(
"MM-dd HH:mm:ss fff"
),
url
);
Console
.
WriteLine
(
logStr
);
LogHelper
.
WriteInfo
(
logStr
);
}
/// <summary>
/// 获取品牌下载枚举列表
/// </summary>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment