Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-cr20g
Project
Project
Details
Activity
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
Administrator
dsk-cr20g
Commits
1593724c
Commit
1593724c
authored
Aug 29, 2023
by
yht15023815643
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev20230707' of
http://192.168.60.201/root/dsk-operate-sys
into dev20230707
parents
1f8f212d
a8339010
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
801 additions
and
831 deletions
+801
-831
JskCombineInfoController.java
.../com/dsk/web/controller/dsk/JskCombineInfoController.java
+57
-23
ExcelUtil.java
...mon/src/main/java/com/dsk/common/utils/poi/ExcelUtil.java
+359
-625
index.vue
dsk-operate-ui/src/views/custom/overview/index.vue
+171
-177
JskCombineSearchDto.java
...va/com/dsk/system/domain/dsk/dto/JskCombineSearchDto.java
+4
-0
JskCombineBidProjectExportVo.java
...sk/system/domain/dsk/vo/JskCombineBidProjectExportVo.java
+55
-0
JskCombineWinBidProjectExportVo.java
...system/domain/dsk/vo/JskCombineWinBidProjectExportVo.java
+55
-0
EnterpriseBussinessService.java
...com/dsk/system/dskService/EnterpriseBussinessService.java
+34
-1
JskCombineInfoService.java
...java/com/dsk/system/dskService/JskCombineInfoService.java
+66
-5
No files found.
dsk-admin/src/main/java/com/dsk/web/controller/dsk/JskCombineInfoController.java
View file @
1593724c
package
com
.
dsk
.
web
.
controller
.
dsk
;
package
com
.
dsk
.
web
.
controller
.
dsk
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.dsk.common.core.controller.BaseController
;
import
com.dsk.common.core.controller.BaseController
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.utils.poi.ExcelUtil
;
import
com.dsk.system.domain.dsk.dto.JskCombineCertificateDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineCertificateDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineSearchDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineSearchDto
;
import
com.dsk.system.domain.dsk.vo.JskCombineBidProjectExportVo
;
import
com.dsk.system.domain.dsk.vo.JskCombineWinBidProjectExportVo
;
import
com.dsk.system.dskService.JskCombineInfoService
;
import
com.dsk.system.dskService.JskCombineInfoService
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.util.IOUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* 集团户相关信息
* 集团户相关信息
*
* @author lcl
* @author lcl
* @create 2023/8/7
* @create 2023/8/7
*/
*/
...
@@ -59,6 +68,7 @@ public class JskCombineInfoController extends BaseController {
...
@@ -59,6 +68,7 @@ public class JskCombineInfoController extends BaseController {
public
TableDataInfo
certificateList
(
@RequestBody
JskCombineSearchDto
dto
)
throws
Exception
{
public
TableDataInfo
certificateList
(
@RequestBody
JskCombineSearchDto
dto
)
throws
Exception
{
return
baseService
.
certificateList
(
dto
);
return
baseService
.
certificateList
(
dto
);
}
}
/**
/**
* 集团成员资质列表
* 集团成员资质列表
*/
*/
...
@@ -138,4 +148,28 @@ public class JskCombineInfoController extends BaseController {
...
@@ -138,4 +148,28 @@ public class JskCombineInfoController extends BaseController {
public
AjaxResult
centralEnterprseSocialPage
(
@RequestBody
JSONObject
object
)
{
public
AjaxResult
centralEnterprseSocialPage
(
@RequestBody
JSONObject
object
)
{
return
baseService
.
centralEnterprseSocialPage
(
object
);
return
baseService
.
centralEnterprseSocialPage
(
object
);
}
}
/**
* 导出中标业绩
*/
@PostMapping
(
"/export/win/bid"
)
@PreAuthorize
(
"@ss.hasPermi('combine:info:export:win:bid')"
)
public
void
exportWinBid
(
@RequestBody
JskCombineSearchDto
dto
,
HttpServletResponse
response
)
{
List
<
JskCombineWinBidProjectExportVo
>
list
=
baseService
.
exportWinBid
(
dto
);
ExcelUtil
<
JskCombineWinBidProjectExportVo
>
util
=
new
ExcelUtil
<>(
JskCombineWinBidProjectExportVo
.
class
);
util
.
exportExcel
(
response
,
list
,
"集团中标"
,
dto
.
getCombineName
().
concat
(
"中标业绩清单"
),
true
);
// String fileName = util.localInit(list, "集团中标", dto.getCombineName().concat("中标业绩清单"), true);
}
/**
* 导出招标业绩
*/
@PostMapping
(
"/export/bid"
)
@PreAuthorize
(
"@ss.hasPermi('combine:info:export:bid')"
)
public
void
exportBid
(
@RequestBody
JskCombineSearchDto
dto
,
HttpServletResponse
response
)
{
List
<
JskCombineBidProjectExportVo
>
list
=
baseService
.
exportBid
(
dto
);
ExcelUtil
<
JskCombineBidProjectExportVo
>
util
=
new
ExcelUtil
<>(
JskCombineBidProjectExportVo
.
class
);
util
.
exportExcel
(
response
,
list
,
"集团招标"
,
dto
.
getCombineName
().
concat
(
"招标公告清单"
),
true
);
}
}
}
dsk-common/src/main/java/com/dsk/common/utils/poi/ExcelUtil.java
View file @
1593724c
package
com
.
dsk
.
common
.
utils
.
poi
;
package
com
.
dsk
.
common
.
utils
.
poi
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.ParameterizedType
;
import
java.math.BigDecimal
;
import
java.text.DecimalFormat
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
javax.servlet.http.HttpServletResponse
;
import
com.dsk.common.annotation.Excel
;
import
com.dsk.common.annotation.Excel
;
import
com.dsk.common.annotation.Excels
;
import
com.dsk.common.annotation.Excels
;
import
com.dsk.common.config.ShuZhiHuaConfig
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.text.Convert
;
import
com.dsk.common.core.text.Convert
;
import
com.dsk.common.exception.UtilException
;
import
com.dsk.common.utils.DateUtils
;
import
com.dsk.common.utils.DateUtils
;
import
com.dsk.common.utils.DictUtils
;
import
com.dsk.common.utils.DictUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.file.FileTypeUtils
;
import
com.dsk.common.utils.file.FileUtils
;
import
com.dsk.common.utils.file.ImageUtils
;
import
com.dsk.common.utils.reflect.ReflectUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.RegExUtils
;
import
org.apache.commons.lang3.RegExUtils
;
import
org.apache.commons.lang3.reflect.FieldUtils
;
import
org.apache.commons.lang3.reflect.FieldUtils
;
import
org.apache.poi.hssf.usermodel.HSSFClientAnchor
;
import
org.apache.poi.hssf.usermodel.*
;
import
org.apache.poi.hssf.usermodel.HSSFPicture
;
import
org.apache.poi.hssf.usermodel.HSSFPictureData
;
import
org.apache.poi.hssf.usermodel.HSSFShape
;
import
org.apache.poi.hssf.usermodel.HSSFSheet
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.ooxml.POIXMLDocumentPart
;
import
org.apache.poi.ooxml.POIXMLDocumentPart
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.CellType
;
import
org.apache.poi.ss.usermodel.ClientAnchor
;
import
org.apache.poi.ss.usermodel.DataValidation
;
import
org.apache.poi.ss.usermodel.DataValidationConstraint
;
import
org.apache.poi.ss.usermodel.DataValidationHelper
;
import
org.apache.poi.ss.usermodel.DateUtil
;
import
org.apache.poi.ss.usermodel.Drawing
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.Name
;
import
org.apache.poi.ss.usermodel.PictureData
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.WorkbookFactory
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFClientAnchor
;
import
org.apache.poi.xssf.usermodel.*
;
import
org.apache.poi.xssf.usermodel.XSSFDataValidation
;
import
org.apache.poi.xssf.usermodel.XSSFDrawing
;
import
org.apache.poi.xssf.usermodel.XSSFPicture
;
import
org.apache.poi.xssf.usermodel.XSSFShape
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker
;
import
org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
com.dsk.common.config.ShuZhiHuaConfig
;
import
com.dsk.common.exception.UtilException
;
import
javax.servlet.http.HttpServletResponse
;
import
com.dsk.common.utils.StringUtils
;
import
java.io.*
;
import
com.dsk.common.utils.file.FileTypeUtils
;
import
java.lang.reflect.Field
;
import
com.dsk.common.utils.file.FileUtils
;
import
java.lang.reflect.Method
;
import
com.dsk.common.utils.file.ImageUtils
;
import
java.lang.reflect.ParameterizedType
;
import
com.dsk.common.utils.reflect.ReflectUtils
;
import
java.math.BigDecimal
;
import
java.text.DecimalFormat
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
/**
* Excel相关处理
* Excel相关处理
*
*
* @author dsk
* @author dsk
*/
*/
public
class
ExcelUtil
<
T
>
public
class
ExcelUtil
<
T
>
{
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ExcelUtil
.
class
);
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ExcelUtil
.
class
);
public
static
final
String
FORMULA_REGEX_STR
=
"=|-|\\+|@"
;
public
static
final
String
FORMULA_REGEX_STR
=
"=|-|\\+|@"
;
public
static
final
String
[]
FORMULA_STR
=
{
"="
,
"-"
,
"+"
,
"@"
};
public
static
final
String
[]
FORMULA_STR
=
{
"="
,
"-"
,
"+"
,
"@"
};
/**
/**
* 用于dictType属性数据存储,避免重复查缓存
* 用于dictType属性数据存储,避免重复查缓存
...
@@ -151,6 +106,10 @@ public class ExcelUtil<T>
...
@@ -151,6 +106,10 @@ public class ExcelUtil<T>
* 标题
* 标题
*/
*/
private
String
title
;
private
String
title
;
/**
* 导出时间 (是否添加导出时间)
*/
private
boolean
dateStatus
;
/**
/**
* 最大高度
* 最大高度
...
@@ -197,8 +156,7 @@ public class ExcelUtil<T>
...
@@ -197,8 +156,7 @@ public class ExcelUtil<T>
*/
*/
public
String
[]
excludeFields
;
public
String
[]
excludeFields
;
public
ExcelUtil
(
Class
<
T
>
clazz
)
public
ExcelUtil
(
Class
<
T
>
clazz
)
{
{
this
.
clazz
=
clazz
;
this
.
clazz
=
clazz
;
}
}
...
@@ -208,39 +166,35 @@ public class ExcelUtil<T>
...
@@ -208,39 +166,35 @@ public class ExcelUtil<T>
* @param fields 列属性名 示例[单个"name"/多个"id","name"]
* @param fields 列属性名 示例[单个"name"/多个"id","name"]
* @throws Exception
* @throws Exception
*/
*/
public
void
hideColumn
(
String
...
fields
)
public
void
hideColumn
(
String
...
fields
)
{
{
this
.
excludeFields
=
fields
;
this
.
excludeFields
=
fields
;
}
}
public
void
init
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
Excel
.
Type
type
)
public
void
init
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
Excel
.
Type
type
,
boolean
dateStatus
)
{
{
if
(
list
==
null
)
{
if
(
list
==
null
)
{
list
=
new
ArrayList
<
T
>();
list
=
new
ArrayList
<
T
>();
}
}
this
.
list
=
list
;
this
.
list
=
list
;
this
.
sheetName
=
sheetName
;
this
.
sheetName
=
sheetName
;
this
.
type
=
type
;
this
.
type
=
type
;
this
.
title
=
title
;
this
.
title
=
title
;
this
.
dateStatus
=
dateStatus
;
createExcelField
();
createExcelField
();
createWorkbook
();
createWorkbook
();
createTitle
();
createTitle
();
createExportDate
();
createSubHead
();
createSubHead
();
}
}
/**
/**
* 创建excel第一行标题
* 创建excel第一行标题
*/
*/
public
void
createTitle
()
public
void
createTitle
()
{
{
if
(
StringUtils
.
isNotEmpty
(
title
))
{
if
(
StringUtils
.
isNotEmpty
(
title
))
{
subMergedFirstRowNum
++;
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
subMergedLastRowNum
++;
int
titleLastCol
=
this
.
fields
.
size
()
-
1
;
int
titleLastCol
=
this
.
fields
.
size
()
-
1
;
if
(
isSubList
())
if
(
isSubList
())
{
{
titleLastCol
=
titleLastCol
+
subFields
.
size
()
-
1
;
titleLastCol
=
titleLastCol
+
subFields
.
size
()
-
1
;
}
}
Row
titleRow
=
sheet
.
createRow
(
rownum
==
0
?
rownum
++
:
0
);
Row
titleRow
=
sheet
.
createRow
(
rownum
==
0
?
rownum
++
:
0
);
...
@@ -252,19 +206,36 @@ public class ExcelUtil<T>
...
@@ -252,19 +206,36 @@ public class ExcelUtil<T>
}
}
}
}
public
void
createExportDate
()
{
if
(
dateStatus
)
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
int
dateLastCol
=
this
.
fields
.
size
()
-
1
;
if
(
isSubList
())
{
dateLastCol
=
dateLastCol
+
subFields
.
size
()
-
1
;
}
Row
dateRow
=
sheet
.
createRow
(
rownum
);
dateRow
.
setHeightInPoints
(
15
);
Cell
dateCell
=
dateRow
.
createCell
(
0
);
CellStyle
cellStyle
=
wb
.
createCellStyle
();
cellStyle
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
dateCell
.
setCellStyle
(
cellStyle
);
dateCell
.
setCellValue
(
"导出时间:"
.
concat
(
DateUtils
.
dateTimeNow
(
DateUtils
.
YYYY_MM_DD_HH_MM_SS
)));
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
dateRow
.
getRowNum
(),
dateRow
.
getRowNum
(),
0
,
dateLastCol
));
rownum
++;
}
}
/**
/**
* 创建对象的子列表名称
* 创建对象的子列表名称
*/
*/
public
void
createSubHead
()
public
void
createSubHead
()
{
{
if
(
isSubList
())
{
if
(
isSubList
())
{
subMergedFirstRowNum
++;
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
subMergedLastRowNum
++;
Row
subRow
=
sheet
.
createRow
(
rownum
);
Row
subRow
=
sheet
.
createRow
(
rownum
);
int
excelNum
=
0
;
int
excelNum
=
0
;
for
(
Object
[]
objects
:
fields
)
for
(
Object
[]
objects
:
fields
)
{
{
Excel
attr
=
(
Excel
)
objects
[
1
];
Excel
attr
=
(
Excel
)
objects
[
1
];
Cell
headCell1
=
subRow
.
createCell
(
excelNum
);
Cell
headCell1
=
subRow
.
createCell
(
excelNum
);
headCell1
.
setCellValue
(
attr
.
name
());
headCell1
.
setCellValue
(
attr
.
name
());
...
@@ -273,8 +244,7 @@ public class ExcelUtil<T>
...
@@ -273,8 +244,7 @@ public class ExcelUtil<T>
}
}
int
headFirstRow
=
excelNum
-
1
;
int
headFirstRow
=
excelNum
-
1
;
int
headLastRow
=
headFirstRow
+
subFields
.
size
()
-
1
;
int
headLastRow
=
headFirstRow
+
subFields
.
size
()
-
1
;
if
(
headLastRow
>
headFirstRow
)
if
(
headLastRow
>
headFirstRow
)
{
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
,
rownum
,
headFirstRow
,
headLastRow
));
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
,
rownum
,
headFirstRow
,
headLastRow
));
}
}
rownum
++;
rownum
++;
...
@@ -287,8 +257,7 @@ public class ExcelUtil<T>
...
@@ -287,8 +257,7 @@ public class ExcelUtil<T>
* @param is 输入流
* @param is 输入流
* @return 转换后集合
* @return 转换后集合
*/
*/
public
List
<
T
>
importExcel
(
InputStream
is
)
throws
Exception
public
List
<
T
>
importExcel
(
InputStream
is
)
throws
Exception
{
{
return
importExcel
(
is
,
0
);
return
importExcel
(
is
,
0
);
}
}
...
@@ -299,8 +268,7 @@ public class ExcelUtil<T>
...
@@ -299,8 +268,7 @@ public class ExcelUtil<T>
* @param titleNum 标题占用行数
* @param titleNum 标题占用行数
* @return 转换后集合
* @return 转换后集合
*/
*/
public
List
<
T
>
importExcel
(
InputStream
is
,
int
titleNum
)
throws
Exception
public
List
<
T
>
importExcel
(
InputStream
is
,
int
titleNum
)
throws
Exception
{
{
return
importExcel
(
StringUtils
.
EMPTY
,
is
,
titleNum
);
return
importExcel
(
StringUtils
.
EMPTY
,
is
,
titleNum
);
}
}
...
@@ -312,73 +280,58 @@ public class ExcelUtil<T>
...
@@ -312,73 +280,58 @@ public class ExcelUtil<T>
* @param is 输入流
* @param is 输入流
* @return 转换后集合
* @return 转换后集合
*/
*/
public
List
<
T
>
importExcel
(
String
sheetName
,
InputStream
is
,
int
titleNum
)
throws
Exception
public
List
<
T
>
importExcel
(
String
sheetName
,
InputStream
is
,
int
titleNum
)
throws
Exception
{
{
this
.
type
=
Excel
.
Type
.
IMPORT
;
this
.
type
=
Excel
.
Type
.
IMPORT
;
this
.
wb
=
WorkbookFactory
.
create
(
is
);
this
.
wb
=
WorkbookFactory
.
create
(
is
);
List
<
T
>
list
=
new
ArrayList
<
T
>();
List
<
T
>
list
=
new
ArrayList
<
T
>();
// 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet
// 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet
Sheet
sheet
=
StringUtils
.
isNotEmpty
(
sheetName
)
?
wb
.
getSheet
(
sheetName
)
:
wb
.
getSheetAt
(
0
);
Sheet
sheet
=
StringUtils
.
isNotEmpty
(
sheetName
)
?
wb
.
getSheet
(
sheetName
)
:
wb
.
getSheetAt
(
0
);
if
(
sheet
==
null
)
if
(
sheet
==
null
)
{
{
throw
new
IOException
(
"文件sheet不存在"
);
throw
new
IOException
(
"文件sheet不存在"
);
}
}
boolean
isXSSFWorkbook
=
!(
wb
instanceof
HSSFWorkbook
);
boolean
isXSSFWorkbook
=
!(
wb
instanceof
HSSFWorkbook
);
Map
<
String
,
PictureData
>
pictures
;
Map
<
String
,
PictureData
>
pictures
;
if
(
isXSSFWorkbook
)
if
(
isXSSFWorkbook
)
{
{
pictures
=
getSheetPictures07
((
XSSFSheet
)
sheet
,
(
XSSFWorkbook
)
wb
);
pictures
=
getSheetPictures07
((
XSSFSheet
)
sheet
,
(
XSSFWorkbook
)
wb
);
}
}
else
{
else
{
pictures
=
getSheetPictures03
((
HSSFSheet
)
sheet
,
(
HSSFWorkbook
)
wb
);
pictures
=
getSheetPictures03
((
HSSFSheet
)
sheet
,
(
HSSFWorkbook
)
wb
);
}
}
// 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
// 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
int
rows
=
sheet
.
getLastRowNum
();
int
rows
=
sheet
.
getLastRowNum
();
if
(
rows
>
0
)
if
(
rows
>
0
)
{
{
// 定义一个map用于存放excel列的序号和field.
// 定义一个map用于存放excel列的序号和field.
Map
<
String
,
Integer
>
cellMap
=
new
HashMap
<
String
,
Integer
>();
Map
<
String
,
Integer
>
cellMap
=
new
HashMap
<
String
,
Integer
>();
// 获取表头
// 获取表头
Row
heard
=
sheet
.
getRow
(
titleNum
);
Row
heard
=
sheet
.
getRow
(
titleNum
);
for
(
int
i
=
0
;
i
<
heard
.
getPhysicalNumberOfCells
();
i
++)
for
(
int
i
=
0
;
i
<
heard
.
getPhysicalNumberOfCells
();
i
++)
{
{
Cell
cell
=
heard
.
getCell
(
i
);
Cell
cell
=
heard
.
getCell
(
i
);
if
(
StringUtils
.
isNotNull
(
cell
))
if
(
StringUtils
.
isNotNull
(
cell
))
{
{
String
value
=
this
.
getCellValue
(
heard
,
i
).
toString
();
String
value
=
this
.
getCellValue
(
heard
,
i
).
toString
();
cellMap
.
put
(
value
,
i
);
cellMap
.
put
(
value
,
i
);
}
}
else
{
else
{
cellMap
.
put
(
null
,
i
);
cellMap
.
put
(
null
,
i
);
}
}
}
}
// 有数据时才处理 得到类的所有field.
// 有数据时才处理 得到类的所有field.
List
<
Object
[]>
fields
=
this
.
getFields
();
List
<
Object
[]>
fields
=
this
.
getFields
();
Map
<
Integer
,
Object
[]>
fieldsMap
=
new
HashMap
<
Integer
,
Object
[]>();
Map
<
Integer
,
Object
[]>
fieldsMap
=
new
HashMap
<
Integer
,
Object
[]>();
for
(
Object
[]
objects
:
fields
)
for
(
Object
[]
objects
:
fields
)
{
{
Excel
attr
=
(
Excel
)
objects
[
1
];
Excel
attr
=
(
Excel
)
objects
[
1
];
Integer
column
=
cellMap
.
get
(
attr
.
name
());
Integer
column
=
cellMap
.
get
(
attr
.
name
());
if
(
column
!=
null
)
if
(
column
!=
null
)
{
{
fieldsMap
.
put
(
column
,
objects
);
fieldsMap
.
put
(
column
,
objects
);
}
}
}
}
for
(
int
i
=
titleNum
+
1
;
i
<=
rows
;
i
++)
for
(
int
i
=
titleNum
+
1
;
i
<=
rows
;
i
++)
{
{
// 从第2行开始取数据,默认第一行是表头.
// 从第2行开始取数据,默认第一行是表头.
Row
row
=
sheet
.
getRow
(
i
);
Row
row
=
sheet
.
getRow
(
i
);
// 判断当前行是否是空行
// 判断当前行是否是空行
if
(
isRowEmpty
(
row
))
if
(
isRowEmpty
(
row
))
{
{
continue
;
continue
;
}
}
T
entity
=
null
;
T
entity
=
null
;
for
(
Map
.
Entry
<
Integer
,
Object
[]>
entry
:
fieldsMap
.
entrySet
())
for
(
Map
.
Entry
<
Integer
,
Object
[]>
entry
:
fieldsMap
.
entrySet
())
{
{
Object
val
=
this
.
getCellValue
(
row
,
entry
.
getKey
());
Object
val
=
this
.
getCellValue
(
row
,
entry
.
getKey
());
// 如果不存在实例则新建.
// 如果不存在实例则新建.
...
@@ -388,89 +341,52 @@ public class ExcelUtil<T>
...
@@ -388,89 +341,52 @@ public class ExcelUtil<T>
Excel
attr
=
(
Excel
)
entry
.
getValue
()[
1
];
Excel
attr
=
(
Excel
)
entry
.
getValue
()[
1
];
// 取得类型,并根据对象类型设置值.
// 取得类型,并根据对象类型设置值.
Class
<?>
fieldType
=
field
.
getType
();
Class
<?>
fieldType
=
field
.
getType
();
if
(
String
.
class
==
fieldType
)
if
(
String
.
class
==
fieldType
)
{
{
String
s
=
Convert
.
toStr
(
val
);
String
s
=
Convert
.
toStr
(
val
);
if
(
StringUtils
.
endsWith
(
s
,
".0"
))
if
(
StringUtils
.
endsWith
(
s
,
".0"
))
{
{
val
=
StringUtils
.
substringBefore
(
s
,
".0"
);
val
=
StringUtils
.
substringBefore
(
s
,
".0"
);
}
}
else
{
else
{
String
dateFormat
=
field
.
getAnnotation
(
Excel
.
class
).
dateFormat
();
String
dateFormat
=
field
.
getAnnotation
(
Excel
.
class
).
dateFormat
();
if
(
StringUtils
.
isNotEmpty
(
dateFormat
))
if
(
StringUtils
.
isNotEmpty
(
dateFormat
))
{
{
val
=
parseDateToStr
(
dateFormat
,
val
);
val
=
parseDateToStr
(
dateFormat
,
val
);
}
}
else
{
else
{
val
=
Convert
.
toStr
(
val
);
val
=
Convert
.
toStr
(
val
);
}
}
}
}
}
}
else
if
((
Integer
.
TYPE
==
fieldType
||
Integer
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
else
if
((
Integer
.
TYPE
==
fieldType
||
Integer
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
val
=
Convert
.
toInt
(
val
);
val
=
Convert
.
toInt
(
val
);
}
}
else
if
((
Long
.
TYPE
==
fieldType
||
Long
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
else
if
((
Long
.
TYPE
==
fieldType
||
Long
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
val
=
Convert
.
toLong
(
val
);
val
=
Convert
.
toLong
(
val
);
}
}
else
if
(
Double
.
TYPE
==
fieldType
||
Double
.
class
==
fieldType
)
{
else
if
(
Double
.
TYPE
==
fieldType
||
Double
.
class
==
fieldType
)
{
val
=
Convert
.
toDouble
(
val
);
val
=
Convert
.
toDouble
(
val
);
}
}
else
if
(
Float
.
TYPE
==
fieldType
||
Float
.
class
==
fieldType
)
{
else
if
(
Float
.
TYPE
==
fieldType
||
Float
.
class
==
fieldType
)
{
val
=
Convert
.
toFloat
(
val
);
val
=
Convert
.
toFloat
(
val
);
}
}
else
if
(
BigDecimal
.
class
==
fieldType
)
{
else
if
(
BigDecimal
.
class
==
fieldType
)
{
val
=
Convert
.
toBigDecimal
(
val
);
val
=
Convert
.
toBigDecimal
(
val
);
}
}
else
if
(
Date
.
class
==
fieldType
)
{
else
if
(
Date
.
class
==
fieldType
)
if
(
val
instanceof
String
)
{
{
if
(
val
instanceof
String
)
{
val
=
DateUtils
.
parseDate
(
val
);
val
=
DateUtils
.
parseDate
(
val
);
}
}
else
if
(
val
instanceof
Double
)
{
else
if
(
val
instanceof
Double
)
{
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
}
}
}
}
else
if
(
Boolean
.
TYPE
==
fieldType
||
Boolean
.
class
==
fieldType
)
{
else
if
(
Boolean
.
TYPE
==
fieldType
||
Boolean
.
class
==
fieldType
)
{
val
=
Convert
.
toBool
(
val
,
false
);
val
=
Convert
.
toBool
(
val
,
false
);
}
}
if
(
StringUtils
.
isNotNull
(
fieldType
))
if
(
StringUtils
.
isNotNull
(
fieldType
))
{
{
String
propertyName
=
field
.
getName
();
String
propertyName
=
field
.
getName
();
if
(
StringUtils
.
isNotEmpty
(
attr
.
targetAttr
()))
if
(
StringUtils
.
isNotEmpty
(
attr
.
targetAttr
()))
{
{
propertyName
=
field
.
getName
()
+
"."
+
attr
.
targetAttr
();
propertyName
=
field
.
getName
()
+
"."
+
attr
.
targetAttr
();
}
}
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
readConverterExp
()))
{
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
readConverterExp
()))
{
val
=
reverseByExp
(
Convert
.
toStr
(
val
),
attr
.
readConverterExp
(),
attr
.
separator
());
val
=
reverseByExp
(
Convert
.
toStr
(
val
),
attr
.
readConverterExp
(),
attr
.
separator
());
}
}
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
dictType
()))
{
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
dictType
()))
{
val
=
reverseDictByExp
(
Convert
.
toStr
(
val
),
attr
.
dictType
(),
attr
.
separator
());
val
=
reverseDictByExp
(
Convert
.
toStr
(
val
),
attr
.
dictType
(),
attr
.
separator
());
}
}
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
val
=
dataFormatHandlerAdapter
(
val
,
attr
);
val
=
dataFormatHandlerAdapter
(
val
,
attr
);
}
}
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
()
&&
StringUtils
.
isNotEmpty
(
pictures
))
{
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
()
&&
StringUtils
.
isNotEmpty
(
pictures
))
{
PictureData
image
=
pictures
.
get
(
row
.
getRowNum
()
+
"_"
+
entry
.
getKey
());
PictureData
image
=
pictures
.
get
(
row
.
getRowNum
()
+
"_"
+
entry
.
getKey
());
if
(
image
==
null
)
if
(
image
==
null
)
{
{
val
=
""
;
val
=
""
;
}
}
else
{
else
{
byte
[]
data
=
image
.
getData
();
byte
[]
data
=
image
.
getData
();
val
=
FileUtils
.
writeImportBytes
(
data
);
val
=
FileUtils
.
writeImportBytes
(
data
);
}
}
...
@@ -491,8 +407,7 @@ public class ExcelUtil<T>
...
@@ -491,8 +407,7 @@ public class ExcelUtil<T>
* @param sheetName 工作表的名称
* @param sheetName 工作表的名称
* @return 结果
* @return 结果
*/
*/
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
)
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
)
{
{
return
exportExcel
(
list
,
sheetName
,
StringUtils
.
EMPTY
);
return
exportExcel
(
list
,
sheetName
,
StringUtils
.
EMPTY
);
}
}
...
@@ -504,9 +419,8 @@ public class ExcelUtil<T>
...
@@ -504,9 +419,8 @@ public class ExcelUtil<T>
* @param title 标题
* @param title 标题
* @return 结果
* @return 结果
*/
*/
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
,
String
title
)
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
{
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
false
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
);
return
exportExcel
();
return
exportExcel
();
}
}
...
@@ -518,8 +432,7 @@ public class ExcelUtil<T>
...
@@ -518,8 +432,7 @@ public class ExcelUtil<T>
* @param sheetName 工作表的名称
* @param sheetName 工作表的名称
* @return 结果
* @return 结果
*/
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
{
{
exportExcel
(
response
,
list
,
sheetName
,
StringUtils
.
EMPTY
);
exportExcel
(
response
,
list
,
sheetName
,
StringUtils
.
EMPTY
);
}
}
...
@@ -532,22 +445,53 @@ public class ExcelUtil<T>
...
@@ -532,22 +445,53 @@ public class ExcelUtil<T>
* @param title 标题
* @param title 标题
* @return 结果
* @return 结果
*/
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
)
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
false
);
exportExcel
(
response
);
}
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
,
boolean
dateStatus
)
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
dateStatus
);
exportExcel
(
response
);
exportExcel
(
response
);
}
}
private
static
final
String
FILE_PATH
=
"D://"
;
/**
* 本地初始化
*
* @param list 数据列表
* @param sheetName sheet名称
* @param title 标题
* @param dateStatus 是否添加导出时间
* @return
*/
public
String
localInit
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
boolean
dateStatus
)
{
String
fileName
=
title
+
"-"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
dateStatus
);
writeSheet
();
try
(
FileOutputStream
fileOutputStream
=
new
FileOutputStream
(
FILE_PATH
.
concat
(
fileName
))){
wb
.
write
(
fileOutputStream
);
return
fileName
;
}
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
}
finally
{
IOUtils
.
closeQuietly
(
wb
);
}
return
null
;
}
/**
/**
* 对list数据源将其里面的数据导入到excel表单
* 对list数据源将其里面的数据导入到excel表单
*
*
* @param sheetName 工作表的名称
* @param sheetName 工作表的名称
* @return 结果
* @return 结果
*/
*/
public
AjaxResult
importTemplateExcel
(
String
sheetName
)
public
AjaxResult
importTemplateExcel
(
String
sheetName
)
{
{
return
importTemplateExcel
(
sheetName
,
StringUtils
.
EMPTY
);
return
importTemplateExcel
(
sheetName
,
StringUtils
.
EMPTY
);
}
}
...
@@ -558,9 +502,8 @@ public class ExcelUtil<T>
...
@@ -558,9 +502,8 @@ public class ExcelUtil<T>
* @param title 标题
* @param title 标题
* @return 结果
* @return 结果
*/
*/
public
AjaxResult
importTemplateExcel
(
String
sheetName
,
String
title
)
public
AjaxResult
importTemplateExcel
(
String
sheetName
,
String
title
)
{
{
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
,
false
);
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
);
return
exportExcel
();
return
exportExcel
();
}
}
...
@@ -570,8 +513,7 @@ public class ExcelUtil<T>
...
@@ -570,8 +513,7 @@ public class ExcelUtil<T>
* @param sheetName 工作表的名称
* @param sheetName 工作表的名称
* @return 结果
* @return 结果
*/
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
{
{
importTemplateExcel
(
response
,
sheetName
,
StringUtils
.
EMPTY
);
importTemplateExcel
(
response
,
sheetName
,
StringUtils
.
EMPTY
);
}
}
...
@@ -582,11 +524,10 @@ public class ExcelUtil<T>
...
@@ -582,11 +524,10 @@ public class ExcelUtil<T>
* @param title 标题
* @param title 标题
* @return 结果
* @return 结果
*/
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
,
String
title
)
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
,
String
title
)
{
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
);
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
,
false
);
exportExcel
(
response
);
exportExcel
(
response
);
}
}
...
@@ -595,19 +536,13 @@ public class ExcelUtil<T>
...
@@ -595,19 +536,13 @@ public class ExcelUtil<T>
*
*
* @return 结果
* @return 结果
*/
*/
public
void
exportExcel
(
HttpServletResponse
response
)
public
void
exportExcel
(
HttpServletResponse
response
)
{
{
try
{
try
{
writeSheet
();
writeSheet
();
wb
.
write
(
response
.
getOutputStream
());
wb
.
write
(
response
.
getOutputStream
());
}
}
catch
(
Exception
e
)
{
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
}
}
finally
{
finally
{
IOUtils
.
closeQuietly
(
wb
);
IOUtils
.
closeQuietly
(
wb
);
}
}
}
}
...
@@ -617,24 +552,18 @@ public class ExcelUtil<T>
...
@@ -617,24 +552,18 @@ public class ExcelUtil<T>
*
*
* @return 结果
* @return 结果
*/
*/
public
AjaxResult
exportExcel
()
public
AjaxResult
exportExcel
()
{
{
OutputStream
out
=
null
;
OutputStream
out
=
null
;
try
try
{
{
writeSheet
();
writeSheet
();
String
filename
=
encodingFilename
(
sheetName
);
String
filename
=
encodingFilename
(
sheetName
);
out
=
new
FileOutputStream
(
getAbsoluteFile
(
filename
));
out
=
new
FileOutputStream
(
getAbsoluteFile
(
filename
));
wb
.
write
(
out
);
wb
.
write
(
out
);
return
AjaxResult
.
success
(
filename
);
return
AjaxResult
.
success
(
filename
);
}
}
catch
(
Exception
e
)
{
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
throw
new
UtilException
(
"导出Excel失败,请联系网站管理员!"
);
throw
new
UtilException
(
"导出Excel失败,请联系网站管理员!"
);
}
}
finally
{
finally
{
IOUtils
.
closeQuietly
(
wb
);
IOUtils
.
closeQuietly
(
wb
);
IOUtils
.
closeQuietly
(
out
);
IOUtils
.
closeQuietly
(
out
);
}
}
...
@@ -643,37 +572,29 @@ public class ExcelUtil<T>
...
@@ -643,37 +572,29 @@ public class ExcelUtil<T>
/**
/**
* 创建写入数据到Sheet
* 创建写入数据到Sheet
*/
*/
public
void
writeSheet
()
public
void
writeSheet
()
{
{
// 取出一共有多少个sheet.
// 取出一共有多少个sheet.
int
sheetNo
=
Math
.
max
(
1
,
(
int
)
Math
.
ceil
(
list
.
size
()
*
1.0
/
sheetSize
));
int
sheetNo
=
Math
.
max
(
1
,
(
int
)
Math
.
ceil
(
list
.
size
()
*
1.0
/
sheetSize
));
for
(
int
index
=
0
;
index
<
sheetNo
;
index
++)
for
(
int
index
=
0
;
index
<
sheetNo
;
index
++)
{
{
createSheet
(
sheetNo
,
index
);
createSheet
(
sheetNo
,
index
);
// 产生一行
// 产生一行
Row
row
=
sheet
.
createRow
(
rownum
);
Row
row
=
sheet
.
createRow
(
rownum
);
int
column
=
0
;
int
column
=
0
;
// 写入各个字段的列头名称
// 写入各个字段的列头名称
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
{
{
Field
field
=
(
Field
)
os
[
0
];
Field
field
=
(
Field
)
os
[
0
];
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
{
for
(
Field
subField
:
subFields
)
{
for
(
Field
subField
:
subFields
)
{
Excel
subExcel
=
subField
.
getAnnotation
(
Excel
.
class
);
Excel
subExcel
=
subField
.
getAnnotation
(
Excel
.
class
);
this
.
createHeadCell
(
subExcel
,
row
,
column
++);
this
.
createHeadCell
(
subExcel
,
row
,
column
++);
}
}
}
}
else
{
else
{
this
.
createHeadCell
(
excel
,
row
,
column
++);
this
.
createHeadCell
(
excel
,
row
,
column
++);
}
}
}
}
if
(
Excel
.
Type
.
EXPORT
.
equals
(
type
))
if
(
Excel
.
Type
.
EXPORT
.
equals
(
type
))
{
{
fillExcelData
(
index
,
row
);
fillExcelData
(
index
,
row
);
addStatisticsRow
();
addStatisticsRow
();
}
}
...
@@ -687,52 +608,40 @@ public class ExcelUtil<T>
...
@@ -687,52 +608,40 @@ public class ExcelUtil<T>
* @param row 单元格行
* @param row 单元格行
*/
*/
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
"unchecked"
)
public
void
fillExcelData
(
int
index
,
Row
row
)
public
void
fillExcelData
(
int
index
,
Row
row
)
{
{
int
startNo
=
index
*
sheetSize
;
int
startNo
=
index
*
sheetSize
;
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
int
rowNo
=
(
1
+
rownum
)
-
startNo
;
int
rowNo
=
(
1
+
rownum
)
-
startNo
;
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
{
{
rowNo
=
isSubList
()
?
(
i
>
1
?
rowNo
+
1
:
rowNo
+
i
)
:
i
+
1
+
rownum
-
startNo
;
rowNo
=
isSubList
()
?
(
i
>
1
?
rowNo
+
1
:
rowNo
+
i
)
:
i
+
1
+
rownum
-
startNo
;
row
=
sheet
.
createRow
(
rowNo
);
row
=
sheet
.
createRow
(
rowNo
);
// 得到导出对象.
// 得到导出对象.
T
vo
=
(
T
)
list
.
get
(
i
);
T
vo
=
(
T
)
list
.
get
(
i
);
Collection
<?>
subList
=
null
;
Collection
<?>
subList
=
null
;
if
(
isSubList
())
if
(
isSubList
())
{
{
if
(
isSubListValue
(
vo
))
{
if
(
isSubListValue
(
vo
))
{
subList
=
getListCellValue
(
vo
);
subList
=
getListCellValue
(
vo
);
subMergedLastRowNum
=
subMergedLastRowNum
+
subList
.
size
();
subMergedLastRowNum
=
subMergedLastRowNum
+
subList
.
size
();
}
}
else
{
else
{
subMergedFirstRowNum
++;
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
subMergedLastRowNum
++;
}
}
}
}
int
column
=
0
;
int
column
=
0
;
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
{
{
Field
field
=
(
Field
)
os
[
0
];
Field
field
=
(
Field
)
os
[
0
];
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
())
&&
StringUtils
.
isNotNull
(
subList
))
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
())
&&
StringUtils
.
isNotNull
(
subList
))
{
{
boolean
subFirst
=
false
;
boolean
subFirst
=
false
;
for
(
Object
obj
:
subList
)
for
(
Object
obj
:
subList
)
{
{
if
(
subFirst
)
{
if
(
subFirst
)
{
rowNo
++;
rowNo
++;
row
=
sheet
.
createRow
(
rowNo
);
row
=
sheet
.
createRow
(
rowNo
);
}
}
List
<
Field
>
subFields
=
FieldUtils
.
getFieldsListWithAnnotation
(
obj
.
getClass
(),
Excel
.
class
);
List
<
Field
>
subFields
=
FieldUtils
.
getFieldsListWithAnnotation
(
obj
.
getClass
(),
Excel
.
class
);
int
subIndex
=
0
;
int
subIndex
=
0
;
for
(
Field
subField
:
subFields
)
for
(
Field
subField
:
subFields
)
{
{
if
(
subField
.
isAnnotationPresent
(
Excel
.
class
))
{
if
(
subField
.
isAnnotationPresent
(
Excel
.
class
))
{
subField
.
setAccessible
(
true
);
subField
.
setAccessible
(
true
);
Excel
attr
=
subField
.
getAnnotation
(
Excel
.
class
);
Excel
attr
=
subField
.
getAnnotation
(
Excel
.
class
);
this
.
addCell
(
attr
,
row
,
(
T
)
obj
,
subField
,
column
+
subIndex
);
this
.
addCell
(
attr
,
row
,
(
T
)
obj
,
subField
,
column
+
subIndex
);
...
@@ -742,9 +651,7 @@ public class ExcelUtil<T>
...
@@ -742,9 +651,7 @@ public class ExcelUtil<T>
subFirst
=
true
;
subFirst
=
true
;
}
}
this
.
subMergedFirstRowNum
=
this
.
subMergedFirstRowNum
+
subList
.
size
();
this
.
subMergedFirstRowNum
=
this
.
subMergedFirstRowNum
+
subList
.
size
();
}
}
else
{
else
{
this
.
addCell
(
excel
,
row
,
vo
,
field
,
column
++);
this
.
addCell
(
excel
,
row
,
vo
,
field
,
column
++);
}
}
}
}
...
@@ -757,8 +664,7 @@ public class ExcelUtil<T>
...
@@ -757,8 +664,7 @@ public class ExcelUtil<T>
* @param wb 工作薄对象
* @param wb 工作薄对象
* @return 样式列表
* @return 样式列表
*/
*/
private
Map
<
String
,
CellStyle
>
createStyles
(
Workbook
wb
)
private
Map
<
String
,
CellStyle
>
createStyles
(
Workbook
wb
)
{
{
// 写入各条记录,每条记录对应excel表中的一行
// 写入各条记录,每条记录对应excel表中的一行
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
CellStyle
style
=
wb
.
createCellStyle
();
CellStyle
style
=
wb
.
createCellStyle
();
...
@@ -810,15 +716,12 @@ public class ExcelUtil<T>
...
@@ -810,15 +716,12 @@ public class ExcelUtil<T>
* @param wb 工作薄对象
* @param wb 工作薄对象
* @return 自定义样式列表
* @return 自定义样式列表
*/
*/
private
Map
<
String
,
CellStyle
>
annotationHeaderStyles
(
Workbook
wb
,
Map
<
String
,
CellStyle
>
styles
)
private
Map
<
String
,
CellStyle
>
annotationHeaderStyles
(
Workbook
wb
,
Map
<
String
,
CellStyle
>
styles
)
{
{
Map
<
String
,
CellStyle
>
headerStyles
=
new
HashMap
<
String
,
CellStyle
>();
Map
<
String
,
CellStyle
>
headerStyles
=
new
HashMap
<
String
,
CellStyle
>();
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
{
{
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
String
key
=
StringUtils
.
format
(
"header_{}_{}"
,
excel
.
headerColor
(),
excel
.
headerBackgroundColor
());
String
key
=
StringUtils
.
format
(
"header_{}_{}"
,
excel
.
headerColor
(),
excel
.
headerBackgroundColor
());
if
(!
headerStyles
.
containsKey
(
key
))
if
(!
headerStyles
.
containsKey
(
key
))
{
{
CellStyle
style
=
wb
.
createCellStyle
();
CellStyle
style
=
wb
.
createCellStyle
();
style
.
cloneStyleFrom
(
styles
.
get
(
"data"
));
style
.
cloneStyleFrom
(
styles
.
get
(
"data"
));
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
...
@@ -843,15 +746,12 @@ public class ExcelUtil<T>
...
@@ -843,15 +746,12 @@ public class ExcelUtil<T>
* @param wb 工作薄对象
* @param wb 工作薄对象
* @return 自定义样式列表
* @return 自定义样式列表
*/
*/
private
Map
<
String
,
CellStyle
>
annotationDataStyles
(
Workbook
wb
)
private
Map
<
String
,
CellStyle
>
annotationDataStyles
(
Workbook
wb
)
{
{
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
{
{
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
String
key
=
StringUtils
.
format
(
"data_{}_{}_{}"
,
excel
.
align
(),
excel
.
color
(),
excel
.
backgroundColor
());
String
key
=
StringUtils
.
format
(
"data_{}_{}_{}"
,
excel
.
align
(),
excel
.
color
(),
excel
.
backgroundColor
());
if
(!
styles
.
containsKey
(
key
))
if
(!
styles
.
containsKey
(
key
))
{
{
CellStyle
style
=
wb
.
createCellStyle
();
CellStyle
style
=
wb
.
createCellStyle
();
style
.
setAlignment
(
excel
.
align
());
style
.
setAlignment
(
excel
.
align
());
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
...
@@ -879,20 +779,17 @@ public class ExcelUtil<T>
...
@@ -879,20 +779,17 @@ public class ExcelUtil<T>
/**
/**
* 创建单元格
* 创建单元格
*/
*/
public
Cell
createHeadCell
(
Excel
attr
,
Row
row
,
int
column
)
public
Cell
createHeadCell
(
Excel
attr
,
Row
row
,
int
column
)
{
{
// 创建列
// 创建列
Cell
cell
=
row
.
createCell
(
column
);
Cell
cell
=
row
.
createCell
(
column
);
// 写入列信息
// 写入列信息
cell
.
setCellValue
(
attr
.
name
());
cell
.
setCellValue
(
attr
.
name
());
setDataValidation
(
attr
,
row
,
column
);
setDataValidation
(
attr
,
row
,
column
);
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"header_{}_{}"
,
attr
.
headerColor
(),
attr
.
headerBackgroundColor
())));
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"header_{}_{}"
,
attr
.
headerColor
(),
attr
.
headerBackgroundColor
())));
if
(
isSubList
())
if
(
isSubList
())
{
{
// 填充默认样式,防止合并单元格样式失效
// 填充默认样式,防止合并单元格样式失效
sheet
.
setDefaultColumnStyle
(
column
,
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
())));
sheet
.
setDefaultColumnStyle
(
column
,
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
())));
if
(
attr
.
needMerge
())
if
(
attr
.
needMerge
())
{
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
-
1
,
rownum
,
column
,
column
));
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
-
1
,
rownum
,
column
,
column
));
}
}
}
}
...
@@ -906,35 +803,25 @@ public class ExcelUtil<T>
...
@@ -906,35 +803,25 @@ public class ExcelUtil<T>
* @param attr 注解相关
* @param attr 注解相关
* @param cell 单元格信息
* @param cell 单元格信息
*/
*/
public
void
setCellVo
(
Object
value
,
Excel
attr
,
Cell
cell
)
public
void
setCellVo
(
Object
value
,
Excel
attr
,
Cell
cell
)
{
{
if
(
Excel
.
ColumnType
.
STRING
==
attr
.
cellType
())
{
if
(
Excel
.
ColumnType
.
STRING
==
attr
.
cellType
())
{
String
cellValue
=
Convert
.
toStr
(
value
);
String
cellValue
=
Convert
.
toStr
(
value
);
// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
if
(
StringUtils
.
startsWithAny
(
cellValue
,
FORMULA_STR
))
if
(
StringUtils
.
startsWithAny
(
cellValue
,
FORMULA_STR
))
{
{
cellValue
=
RegExUtils
.
replaceFirst
(
cellValue
,
FORMULA_REGEX_STR
,
"\t$0"
);
cellValue
=
RegExUtils
.
replaceFirst
(
cellValue
,
FORMULA_REGEX_STR
,
"\t$0"
);
}
}
if
(
value
instanceof
Collection
&&
StringUtils
.
equals
(
"[]"
,
cellValue
))
if
(
value
instanceof
Collection
&&
StringUtils
.
equals
(
"[]"
,
cellValue
))
{
{
cellValue
=
StringUtils
.
EMPTY
;
cellValue
=
StringUtils
.
EMPTY
;
}
}
cell
.
setCellValue
(
StringUtils
.
isNull
(
cellValue
)
?
attr
.
defaultValue
()
:
cellValue
+
attr
.
suffix
());
cell
.
setCellValue
(
StringUtils
.
isNull
(
cellValue
)
?
attr
.
defaultValue
()
:
cellValue
+
attr
.
suffix
());
}
}
else
if
(
Excel
.
ColumnType
.
NUMERIC
==
attr
.
cellType
())
{
else
if
(
Excel
.
ColumnType
.
NUMERIC
==
attr
.
cellType
())
if
(
StringUtils
.
isNotNull
(
value
))
{
{
if
(
StringUtils
.
isNotNull
(
value
))
{
cell
.
setCellValue
(
StringUtils
.
contains
(
Convert
.
toStr
(
value
),
"."
)
?
Convert
.
toDouble
(
value
)
:
Convert
.
toInt
(
value
));
cell
.
setCellValue
(
StringUtils
.
contains
(
Convert
.
toStr
(
value
),
"."
)
?
Convert
.
toDouble
(
value
)
:
Convert
.
toInt
(
value
));
}
}
}
}
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
ClientAnchor
anchor
=
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
cell
.
getColumnIndex
(),
cell
.
getRow
().
getRowNum
(),
(
short
)
(
cell
.
getColumnIndex
()
+
1
),
cell
.
getRow
().
getRowNum
()
+
1
);
ClientAnchor
anchor
=
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
cell
.
getColumnIndex
(),
cell
.
getRow
().
getRowNum
(),
(
short
)
(
cell
.
getColumnIndex
()
+
1
),
cell
.
getRow
().
getRowNum
()
+
1
);
String
imagePath
=
Convert
.
toStr
(
value
);
String
imagePath
=
Convert
.
toStr
(
value
);
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
{
{
byte
[]
data
=
ImageUtils
.
getImage
(
imagePath
);
byte
[]
data
=
ImageUtils
.
getImage
(
imagePath
);
getDrawingPatriarch
(
cell
.
getSheet
()).
createPicture
(
anchor
,
getDrawingPatriarch
(
cell
.
getSheet
()).
createPicture
(
anchor
,
cell
.
getSheet
().
getWorkbook
().
addPicture
(
data
,
getImageType
(
data
)));
cell
.
getSheet
().
getWorkbook
().
addPicture
(
data
,
getImageType
(
data
)));
...
@@ -945,10 +832,8 @@ public class ExcelUtil<T>
...
@@ -945,10 +832,8 @@ public class ExcelUtil<T>
/**
/**
* 获取画布
* 获取画布
*/
*/
public
static
Drawing
<?>
getDrawingPatriarch
(
Sheet
sheet
)
public
static
Drawing
<?>
getDrawingPatriarch
(
Sheet
sheet
)
{
{
if
(
sheet
.
getDrawingPatriarch
()
==
null
)
{
if
(
sheet
.
getDrawingPatriarch
()
==
null
)
{
sheet
.
createDrawingPatriarch
();
sheet
.
createDrawingPatriarch
();
}
}
return
sheet
.
getDrawingPatriarch
();
return
sheet
.
getDrawingPatriarch
();
...
@@ -957,15 +842,11 @@ public class ExcelUtil<T>
...
@@ -957,15 +842,11 @@ public class ExcelUtil<T>
/**
/**
* 获取图片类型,设置图片插入类型
* 获取图片类型,设置图片插入类型
*/
*/
public
int
getImageType
(
byte
[]
value
)
public
int
getImageType
(
byte
[]
value
)
{
{
String
type
=
FileTypeUtils
.
getFileExtendName
(
value
);
String
type
=
FileTypeUtils
.
getFileExtendName
(
value
);
if
(
"JPG"
.
equalsIgnoreCase
(
type
))
if
(
"JPG"
.
equalsIgnoreCase
(
type
))
{
{
return
Workbook
.
PICTURE_TYPE_JPEG
;
return
Workbook
.
PICTURE_TYPE_JPEG
;
}
}
else
if
(
"PNG"
.
equalsIgnoreCase
(
type
))
{
else
if
(
"PNG"
.
equalsIgnoreCase
(
type
))
{
return
Workbook
.
PICTURE_TYPE_PNG
;
return
Workbook
.
PICTURE_TYPE_PNG
;
}
}
return
Workbook
.
PICTURE_TYPE_JPEG
;
return
Workbook
.
PICTURE_TYPE_JPEG
;
...
@@ -974,26 +855,18 @@ public class ExcelUtil<T>
...
@@ -974,26 +855,18 @@ public class ExcelUtil<T>
/**
/**
* 创建表格样式
* 创建表格样式
*/
*/
public
void
setDataValidation
(
Excel
attr
,
Row
row
,
int
column
)
public
void
setDataValidation
(
Excel
attr
,
Row
row
,
int
column
)
{
{
if
(
attr
.
name
().
indexOf
(
"注:"
)
>=
0
)
{
if
(
attr
.
name
().
indexOf
(
"注:"
)
>=
0
)
{
sheet
.
setColumnWidth
(
column
,
6000
);
sheet
.
setColumnWidth
(
column
,
6000
);
}
}
else
{
else
{
// 设置列宽
// 设置列宽
sheet
.
setColumnWidth
(
column
,
(
int
)
((
attr
.
width
()
+
0.72
)
*
256
));
sheet
.
setColumnWidth
(
column
,
(
int
)
((
attr
.
width
()
+
0.72
)
*
256
));
}
}
if
(
StringUtils
.
isNotEmpty
(
attr
.
prompt
())
||
attr
.
combo
().
length
>
0
)
if
(
StringUtils
.
isNotEmpty
(
attr
.
prompt
())
||
attr
.
combo
().
length
>
0
)
{
{
if
(
attr
.
combo
().
length
>
15
||
StringUtils
.
join
(
attr
.
combo
()).
length
()
>
255
)
{
if
(
attr
.
combo
().
length
>
15
||
StringUtils
.
join
(
attr
.
combo
()).
length
()
>
255
)
{
// 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到
// 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到
setXSSFValidationWithHidden
(
sheet
,
attr
.
combo
(),
attr
.
prompt
(),
1
,
100
,
column
,
column
);
setXSSFValidationWithHidden
(
sheet
,
attr
.
combo
(),
attr
.
prompt
(),
1
,
100
,
column
,
column
);
}
}
else
{
else
{
// 提示信息或只能选择不能输入的列内容.
// 提示信息或只能选择不能输入的列内容.
setPromptOrValidation
(
sheet
,
attr
.
combo
(),
attr
.
prompt
(),
1
,
100
,
column
,
column
);
setPromptOrValidation
(
sheet
,
attr
.
combo
(),
attr
.
prompt
(),
1
,
100
,
column
,
column
);
}
}
...
@@ -1003,20 +876,16 @@ public class ExcelUtil<T>
...
@@ -1003,20 +876,16 @@ public class ExcelUtil<T>
/**
/**
* 添加单元格
* 添加单元格
*/
*/
public
Cell
addCell
(
Excel
attr
,
Row
row
,
T
vo
,
Field
field
,
int
column
)
public
Cell
addCell
(
Excel
attr
,
Row
row
,
T
vo
,
Field
field
,
int
column
)
{
{
Cell
cell
=
null
;
Cell
cell
=
null
;
try
try
{
{
// 设置行高
// 设置行高
row
.
setHeight
(
maxHeight
);
row
.
setHeight
(
maxHeight
);
// 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
// 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
if
(
attr
.
isExport
())
if
(
attr
.
isExport
())
{
{
// 创建cell
// 创建cell
cell
=
row
.
createCell
(
column
);
cell
=
row
.
createCell
(
column
);
if
(
isSubListValue
(
vo
)
&&
getListCellValue
(
vo
).
size
()
>
1
&&
attr
.
needMerge
())
if
(
isSubListValue
(
vo
)
&&
getListCellValue
(
vo
).
size
()
>
1
&&
attr
.
needMerge
())
{
{
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
);
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
);
sheet
.
addMergedRegion
(
cellAddress
);
sheet
.
addMergedRegion
(
cellAddress
);
}
}
...
@@ -1028,41 +897,27 @@ public class ExcelUtil<T>
...
@@ -1028,41 +897,27 @@ public class ExcelUtil<T>
String
readConverterExp
=
attr
.
readConverterExp
();
String
readConverterExp
=
attr
.
readConverterExp
();
String
separator
=
attr
.
separator
();
String
separator
=
attr
.
separator
();
String
dictType
=
attr
.
dictType
();
String
dictType
=
attr
.
dictType
();
if
(
StringUtils
.
isNotEmpty
(
dateFormat
)
&&
StringUtils
.
isNotNull
(
value
))
if
(
StringUtils
.
isNotEmpty
(
dateFormat
)
&&
StringUtils
.
isNotNull
(
value
))
{
{
cell
.
setCellValue
(
parseDateToStr
(
dateFormat
,
value
));
cell
.
setCellValue
(
parseDateToStr
(
dateFormat
,
value
));
}
}
else
if
(
StringUtils
.
isNotEmpty
(
readConverterExp
)
&&
StringUtils
.
isNotNull
(
value
))
{
else
if
(
StringUtils
.
isNotEmpty
(
readConverterExp
)
&&
StringUtils
.
isNotNull
(
value
))
{
cell
.
setCellValue
(
convertByExp
(
Convert
.
toStr
(
value
),
readConverterExp
,
separator
));
cell
.
setCellValue
(
convertByExp
(
Convert
.
toStr
(
value
),
readConverterExp
,
separator
));
}
}
else
if
(
StringUtils
.
isNotEmpty
(
dictType
)
&&
StringUtils
.
isNotNull
(
value
))
{
else
if
(
StringUtils
.
isNotEmpty
(
dictType
)
&&
StringUtils
.
isNotNull
(
value
))
if
(!
sysDictMap
.
containsKey
(
dictType
+
value
))
{
{
if
(!
sysDictMap
.
containsKey
(
dictType
+
value
))
{
String
lable
=
convertDictByExp
(
Convert
.
toStr
(
value
),
dictType
,
separator
);
String
lable
=
convertDictByExp
(
Convert
.
toStr
(
value
),
dictType
,
separator
);
sysDictMap
.
put
(
dictType
+
value
,
lable
);
sysDictMap
.
put
(
dictType
+
value
,
lable
);
}
}
cell
.
setCellValue
(
sysDictMap
.
get
(
dictType
+
value
));
cell
.
setCellValue
(
sysDictMap
.
get
(
dictType
+
value
));
}
}
else
if
(
value
instanceof
BigDecimal
&&
-
1
!=
attr
.
scale
())
{
else
if
(
value
instanceof
BigDecimal
&&
-
1
!=
attr
.
scale
())
{
cell
.
setCellValue
((((
BigDecimal
)
value
).
setScale
(
attr
.
scale
(),
attr
.
roundingMode
())).
doubleValue
());
cell
.
setCellValue
((((
BigDecimal
)
value
).
setScale
(
attr
.
scale
(),
attr
.
roundingMode
())).
doubleValue
());
}
}
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
cell
.
setCellValue
(
dataFormatHandlerAdapter
(
value
,
attr
));
cell
.
setCellValue
(
dataFormatHandlerAdapter
(
value
,
attr
));
}
}
else
{
else
{
// 设置列类型
// 设置列类型
setCellVo
(
value
,
attr
,
cell
);
setCellVo
(
value
,
attr
,
cell
);
}
}
addStatisticsData
(
column
,
Convert
.
toStr
(
value
),
attr
);
addStatisticsData
(
column
,
Convert
.
toStr
(
value
),
attr
);
}
}
}
}
catch
(
Exception
e
)
{
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel失败{}"
,
e
);
log
.
error
(
"导出Excel失败{}"
,
e
);
}
}
return
cell
;
return
cell
;
...
@@ -1080,26 +935,21 @@ public class ExcelUtil<T>
...
@@ -1080,26 +935,21 @@ public class ExcelUtil<T>
* @param endCol 结束列
* @param endCol 结束列
*/
*/
public
void
setPromptOrValidation
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
public
void
setPromptOrValidation
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
int
firstCol
,
int
endCol
)
int
firstCol
,
int
endCol
)
{
{
DataValidationHelper
helper
=
sheet
.
getDataValidationHelper
();
DataValidationHelper
helper
=
sheet
.
getDataValidationHelper
();
DataValidationConstraint
constraint
=
textlist
.
length
>
0
?
helper
.
createExplicitListConstraint
(
textlist
)
:
helper
.
createCustomConstraint
(
"DD1"
);
DataValidationConstraint
constraint
=
textlist
.
length
>
0
?
helper
.
createExplicitListConstraint
(
textlist
)
:
helper
.
createCustomConstraint
(
"DD1"
);
CellRangeAddressList
regions
=
new
CellRangeAddressList
(
firstRow
,
endRow
,
firstCol
,
endCol
);
CellRangeAddressList
regions
=
new
CellRangeAddressList
(
firstRow
,
endRow
,
firstCol
,
endCol
);
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
regions
);
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
regions
);
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
{
{
// 如果设置了提示信息则鼠标放上去提示
// 如果设置了提示信息则鼠标放上去提示
dataValidation
.
createPromptBox
(
""
,
promptContent
);
dataValidation
.
createPromptBox
(
""
,
promptContent
);
dataValidation
.
setShowPromptBox
(
true
);
dataValidation
.
setShowPromptBox
(
true
);
}
}
// 处理Excel兼容性问题
// 处理Excel兼容性问题
if
(
dataValidation
instanceof
XSSFDataValidation
)
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
{
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
}
}
else
{
else
{
dataValidation
.
setSuppressDropDownArrow
(
false
);
dataValidation
.
setSuppressDropDownArrow
(
false
);
}
}
sheet
.
addValidationData
(
dataValidation
);
sheet
.
addValidationData
(
dataValidation
);
...
@@ -1116,12 +966,10 @@ public class ExcelUtil<T>
...
@@ -1116,12 +966,10 @@ public class ExcelUtil<T>
* @param firstCol 开始列
* @param firstCol 开始列
* @param endCol 结束列
* @param endCol 结束列
*/
*/
public
void
setXSSFValidationWithHidden
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
int
firstCol
,
int
endCol
)
public
void
setXSSFValidationWithHidden
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
int
firstCol
,
int
endCol
)
{
{
String
hideSheetName
=
"combo_"
+
firstCol
+
"_"
+
endCol
;
String
hideSheetName
=
"combo_"
+
firstCol
+
"_"
+
endCol
;
Sheet
hideSheet
=
wb
.
createSheet
(
hideSheetName
);
// 用于存储 下拉菜单数据
Sheet
hideSheet
=
wb
.
createSheet
(
hideSheetName
);
// 用于存储 下拉菜单数据
for
(
int
i
=
0
;
i
<
textlist
.
length
;
i
++)
for
(
int
i
=
0
;
i
<
textlist
.
length
;
i
++)
{
{
hideSheet
.
createRow
(
i
).
createCell
(
0
).
setCellValue
(
textlist
[
i
]);
hideSheet
.
createRow
(
i
).
createCell
(
0
).
setCellValue
(
textlist
[
i
]);
}
}
// 创建名称,可被其他单元格引用
// 创建名称,可被其他单元格引用
...
@@ -1135,20 +983,16 @@ public class ExcelUtil<T>
...
@@ -1135,20 +983,16 @@ public class ExcelUtil<T>
CellRangeAddressList
regions
=
new
CellRangeAddressList
(
firstRow
,
endRow
,
firstCol
,
endCol
);
CellRangeAddressList
regions
=
new
CellRangeAddressList
(
firstRow
,
endRow
,
firstCol
,
endCol
);
// 数据有效性对象
// 数据有效性对象
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
regions
);
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
regions
);
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
{
{
// 如果设置了提示信息则鼠标放上去提示
// 如果设置了提示信息则鼠标放上去提示
dataValidation
.
createPromptBox
(
""
,
promptContent
);
dataValidation
.
createPromptBox
(
""
,
promptContent
);
dataValidation
.
setShowPromptBox
(
true
);
dataValidation
.
setShowPromptBox
(
true
);
}
}
// 处理Excel兼容性问题
// 处理Excel兼容性问题
if
(
dataValidation
instanceof
XSSFDataValidation
)
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
{
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
}
}
else
{
else
{
dataValidation
.
setSuppressDropDownArrow
(
false
);
dataValidation
.
setSuppressDropDownArrow
(
false
);
}
}
...
@@ -1165,28 +1009,20 @@ public class ExcelUtil<T>
...
@@ -1165,28 +1009,20 @@ public class ExcelUtil<T>
* @param separator 分隔符
* @param separator 分隔符
* @return 解析后值
* @return 解析后值
*/
*/
public
static
String
convertByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
public
static
String
convertByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
{
StringBuilder
propertyString
=
new
StringBuilder
();
StringBuilder
propertyString
=
new
StringBuilder
();
String
[]
convertSource
=
converterExp
.
split
(
","
);
String
[]
convertSource
=
converterExp
.
split
(
","
);
for
(
String
item
:
convertSource
)
for
(
String
item
:
convertSource
)
{
{
String
[]
itemArray
=
item
.
split
(
"="
);
String
[]
itemArray
=
item
.
split
(
"="
);
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
{
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
if
(
itemArray
[
0
].
equals
(
value
))
{
{
if
(
itemArray
[
0
].
equals
(
value
))
{
propertyString
.
append
(
itemArray
[
1
]
+
separator
);
propertyString
.
append
(
itemArray
[
1
]
+
separator
);
break
;
break
;
}
}
}
}
}
}
else
{
else
if
(
itemArray
[
0
].
equals
(
propertyValue
))
{
{
if
(
itemArray
[
0
].
equals
(
propertyValue
))
{
return
itemArray
[
1
];
return
itemArray
[
1
];
}
}
}
}
...
@@ -1202,28 +1038,20 @@ public class ExcelUtil<T>
...
@@ -1202,28 +1038,20 @@ public class ExcelUtil<T>
* @param separator 分隔符
* @param separator 分隔符
* @return 解析后值
* @return 解析后值
*/
*/
public
static
String
reverseByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
public
static
String
reverseByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
{
StringBuilder
propertyString
=
new
StringBuilder
();
StringBuilder
propertyString
=
new
StringBuilder
();
String
[]
convertSource
=
converterExp
.
split
(
","
);
String
[]
convertSource
=
converterExp
.
split
(
","
);
for
(
String
item
:
convertSource
)
for
(
String
item
:
convertSource
)
{
{
String
[]
itemArray
=
item
.
split
(
"="
);
String
[]
itemArray
=
item
.
split
(
"="
);
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
{
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
if
(
itemArray
[
1
].
equals
(
value
))
{
{
if
(
itemArray
[
1
].
equals
(
value
))
{
propertyString
.
append
(
itemArray
[
0
]
+
separator
);
propertyString
.
append
(
itemArray
[
0
]
+
separator
);
break
;
break
;
}
}
}
}
}
}
else
{
else
if
(
itemArray
[
1
].
equals
(
propertyValue
))
{
{
if
(
itemArray
[
1
].
equals
(
propertyValue
))
{
return
itemArray
[
0
];
return
itemArray
[
0
];
}
}
}
}
...
@@ -1239,8 +1067,7 @@ public class ExcelUtil<T>
...
@@ -1239,8 +1067,7 @@ public class ExcelUtil<T>
* @param separator 分隔符
* @param separator 分隔符
* @return 字典标签
* @return 字典标签
*/
*/
public
static
String
convertDictByExp
(
String
dictValue
,
String
dictType
,
String
separator
)
public
static
String
convertDictByExp
(
String
dictValue
,
String
dictType
,
String
separator
)
{
{
return
DictUtils
.
getDictLabel
(
dictType
,
dictValue
,
separator
);
return
DictUtils
.
getDictLabel
(
dictType
,
dictValue
,
separator
);
}
}
...
@@ -1252,8 +1079,7 @@ public class ExcelUtil<T>
...
@@ -1252,8 +1079,7 @@ public class ExcelUtil<T>
* @param separator 分隔符
* @param separator 分隔符
* @return 字典值
* @return 字典值
*/
*/
public
static
String
reverseDictByExp
(
String
dictLabel
,
String
dictType
,
String
separator
)
public
static
String
reverseDictByExp
(
String
dictLabel
,
String
dictType
,
String
separator
)
{
{
return
DictUtils
.
getDictValue
(
dictType
,
dictLabel
,
separator
);
return
DictUtils
.
getDictValue
(
dictType
,
dictLabel
,
separator
);
}
}
...
@@ -1264,16 +1090,12 @@ public class ExcelUtil<T>
...
@@ -1264,16 +1090,12 @@ public class ExcelUtil<T>
* @param excel 数据注解
* @param excel 数据注解
* @return
* @return
*/
*/
public
String
dataFormatHandlerAdapter
(
Object
value
,
Excel
excel
)
public
String
dataFormatHandlerAdapter
(
Object
value
,
Excel
excel
)
{
{
try
{
try
{
Object
instance
=
excel
.
handler
().
newInstance
();
Object
instance
=
excel
.
handler
().
newInstance
();
Method
formatMethod
=
excel
.
handler
().
getMethod
(
"format"
,
new
Class
[]
{
Object
.
class
,
String
[].
class
});
Method
formatMethod
=
excel
.
handler
().
getMethod
(
"format"
,
new
Class
[]
{
Object
.
class
,
String
[].
class
});
value
=
formatMethod
.
invoke
(
instance
,
value
,
excel
.
args
());
value
=
formatMethod
.
invoke
(
instance
,
value
,
excel
.
args
());
}
}
catch
(
Exception
e
)
{
catch
(
Exception
e
)
{
log
.
error
(
"不能格式化数据 "
+
excel
.
handler
(),
e
.
getMessage
());
log
.
error
(
"不能格式化数据 "
+
excel
.
handler
(),
e
.
getMessage
());
}
}
return
Convert
.
toStr
(
value
);
return
Convert
.
toStr
(
value
);
...
@@ -1282,21 +1104,15 @@ public class ExcelUtil<T>
...
@@ -1282,21 +1104,15 @@ public class ExcelUtil<T>
/**
/**
* 合计统计信息
* 合计统计信息
*/
*/
private
void
addStatisticsData
(
Integer
index
,
String
text
,
Excel
entity
)
private
void
addStatisticsData
(
Integer
index
,
String
text
,
Excel
entity
)
{
{
if
(
entity
!=
null
&&
entity
.
isStatistics
())
{
if
(
entity
!=
null
&&
entity
.
isStatistics
())
{
Double
temp
=
0
D
;
Double
temp
=
0
D
;
if
(!
statistics
.
containsKey
(
index
))
if
(!
statistics
.
containsKey
(
index
))
{
{
statistics
.
put
(
index
,
temp
);
statistics
.
put
(
index
,
temp
);
}
}
try
try
{
{
temp
=
Double
.
valueOf
(
text
);
temp
=
Double
.
valueOf
(
text
);
}
}
catch
(
NumberFormatException
e
)
{
catch
(
NumberFormatException
e
)
{
}
}
statistics
.
put
(
index
,
statistics
.
get
(
index
)
+
temp
);
statistics
.
put
(
index
,
statistics
.
get
(
index
)
+
temp
);
}
}
...
@@ -1305,18 +1121,15 @@ public class ExcelUtil<T>
...
@@ -1305,18 +1121,15 @@ public class ExcelUtil<T>
/**
/**
* 创建统计行
* 创建统计行
*/
*/
public
void
addStatisticsRow
()
public
void
addStatisticsRow
()
{
{
if
(
statistics
.
size
()
>
0
)
{
if
(
statistics
.
size
()
>
0
)
{
Row
row
=
sheet
.
createRow
(
sheet
.
getLastRowNum
()
+
1
);
Row
row
=
sheet
.
createRow
(
sheet
.
getLastRowNum
()
+
1
);
Set
<
Integer
>
keys
=
statistics
.
keySet
();
Set
<
Integer
>
keys
=
statistics
.
keySet
();
Cell
cell
=
row
.
createCell
(
0
);
Cell
cell
=
row
.
createCell
(
0
);
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellValue
(
"合计"
);
cell
.
setCellValue
(
"合计"
);
for
(
Integer
key
:
keys
)
for
(
Integer
key
:
keys
)
{
{
cell
=
row
.
createCell
(
key
);
cell
=
row
.
createCell
(
key
);
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellValue
(
DOUBLE_FORMAT
.
format
(
statistics
.
get
(
key
)));
cell
.
setCellValue
(
DOUBLE_FORMAT
.
format
(
statistics
.
get
(
key
)));
...
@@ -1328,8 +1141,7 @@ public class ExcelUtil<T>
...
@@ -1328,8 +1141,7 @@ public class ExcelUtil<T>
/**
/**
* 编码文件名
* 编码文件名
*/
*/
public
String
encodingFilename
(
String
filename
)
public
String
encodingFilename
(
String
filename
)
{
{
filename
=
UUID
.
randomUUID
()
+
"_"
+
filename
+
".xlsx"
;
filename
=
UUID
.
randomUUID
()
+
"_"
+
filename
+
".xlsx"
;
return
filename
;
return
filename
;
}
}
...
@@ -1339,12 +1151,10 @@ public class ExcelUtil<T>
...
@@ -1339,12 +1151,10 @@ public class ExcelUtil<T>
*
*
* @param filename 文件名称
* @param filename 文件名称
*/
*/
public
String
getAbsoluteFile
(
String
filename
)
public
String
getAbsoluteFile
(
String
filename
)
{
{
String
downloadPath
=
ShuZhiHuaConfig
.
getDownloadPath
()
+
filename
;
String
downloadPath
=
ShuZhiHuaConfig
.
getDownloadPath
()
+
filename
;
File
desc
=
new
File
(
downloadPath
);
File
desc
=
new
File
(
downloadPath
);
if
(!
desc
.
getParentFile
().
exists
())
if
(!
desc
.
getParentFile
().
exists
())
{
{
desc
.
getParentFile
().
mkdirs
();
desc
.
getParentFile
().
mkdirs
();
}
}
return
downloadPath
;
return
downloadPath
;
...
@@ -1359,22 +1169,16 @@ public class ExcelUtil<T>
...
@@ -1359,22 +1169,16 @@ public class ExcelUtil<T>
* @return 最终的属性值
* @return 最终的属性值
* @throws Exception
* @throws Exception
*/
*/
private
Object
getTargetValue
(
T
vo
,
Field
field
,
Excel
excel
)
throws
Exception
private
Object
getTargetValue
(
T
vo
,
Field
field
,
Excel
excel
)
throws
Exception
{
{
Object
o
=
field
.
get
(
vo
);
Object
o
=
field
.
get
(
vo
);
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
{
{
String
target
=
excel
.
targetAttr
();
String
target
=
excel
.
targetAttr
();
if
(
target
.
contains
(
"."
))
if
(
target
.
contains
(
"."
))
{
{
String
[]
targets
=
target
.
split
(
"[.]"
);
String
[]
targets
=
target
.
split
(
"[.]"
);
for
(
String
name
:
targets
)
for
(
String
name
:
targets
)
{
{
o
=
getValue
(
o
,
name
);
o
=
getValue
(
o
,
name
);
}
}
}
}
else
{
else
{
o
=
getValue
(
o
,
target
);
o
=
getValue
(
o
,
target
);
}
}
}
}
...
@@ -1389,10 +1193,8 @@ public class ExcelUtil<T>
...
@@ -1389,10 +1193,8 @@ public class ExcelUtil<T>
* @return value
* @return value
* @throws Exception
* @throws Exception
*/
*/
private
Object
getValue
(
Object
o
,
String
name
)
throws
Exception
private
Object
getValue
(
Object
o
,
String
name
)
throws
Exception
{
{
if
(
StringUtils
.
isNotNull
(
o
)
&&
StringUtils
.
isNotEmpty
(
name
))
{
if
(
StringUtils
.
isNotNull
(
o
)
&&
StringUtils
.
isNotEmpty
(
name
))
{
Class
<?>
clazz
=
o
.
getClass
();
Class
<?>
clazz
=
o
.
getClass
();
Field
field
=
clazz
.
getDeclaredField
(
name
);
Field
field
=
clazz
.
getDeclaredField
(
name
);
field
.
setAccessible
(
true
);
field
.
setAccessible
(
true
);
...
@@ -1404,8 +1206,7 @@ public class ExcelUtil<T>
...
@@ -1404,8 +1206,7 @@ public class ExcelUtil<T>
/**
/**
* 得到所有定义字段
* 得到所有定义字段
*/
*/
private
void
createExcelField
()
private
void
createExcelField
()
{
{
this
.
fields
=
getFields
();
this
.
fields
=
getFields
();
this
.
fields
=
this
.
fields
.
stream
().
sorted
(
Comparator
.
comparing
(
objects
->
((
Excel
)
objects
[
1
]).
sort
())).
collect
(
Collectors
.
toList
());
this
.
fields
=
this
.
fields
.
stream
().
sorted
(
Comparator
.
comparing
(
objects
->
((
Excel
)
objects
[
1
]).
sort
())).
collect
(
Collectors
.
toList
());
this
.
maxHeight
=
getRowHeight
();
this
.
maxHeight
=
getRowHeight
();
...
@@ -1414,27 +1215,21 @@ public class ExcelUtil<T>
...
@@ -1414,27 +1215,21 @@ public class ExcelUtil<T>
/**
/**
* 获取字段注解信息
* 获取字段注解信息
*/
*/
public
List
<
Object
[]>
getFields
()
public
List
<
Object
[]>
getFields
()
{
{
List
<
Object
[]>
fields
=
new
ArrayList
<
Object
[]>();
List
<
Object
[]>
fields
=
new
ArrayList
<
Object
[]>();
List
<
Field
>
tempFields
=
new
ArrayList
<>();
List
<
Field
>
tempFields
=
new
ArrayList
<>();
tempFields
.
addAll
(
Arrays
.
asList
(
clazz
.
getSuperclass
().
getDeclaredFields
()));
tempFields
.
addAll
(
Arrays
.
asList
(
clazz
.
getSuperclass
().
getDeclaredFields
()));
tempFields
.
addAll
(
Arrays
.
asList
(
clazz
.
getDeclaredFields
()));
tempFields
.
addAll
(
Arrays
.
asList
(
clazz
.
getDeclaredFields
()));
for
(
Field
field
:
tempFields
)
for
(
Field
field
:
tempFields
)
{
{
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()))
{
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()))
{
// 单注解
// 单注解
if
(
field
.
isAnnotationPresent
(
Excel
.
class
))
if
(
field
.
isAnnotationPresent
(
Excel
.
class
))
{
{
Excel
attr
=
field
.
getAnnotation
(
Excel
.
class
);
Excel
attr
=
field
.
getAnnotation
(
Excel
.
class
);
if
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
))
if
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
))
{
{
field
.
setAccessible
(
true
);
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
field
,
attr
});
}
}
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
{
subMethod
=
getSubMethod
(
field
.
getName
(),
clazz
);
subMethod
=
getSubMethod
(
field
.
getName
(),
clazz
);
ParameterizedType
pt
=
(
ParameterizedType
)
field
.
getGenericType
();
ParameterizedType
pt
=
(
ParameterizedType
)
field
.
getGenericType
();
Class
<?>
subClass
=
(
Class
<?>)
pt
.
getActualTypeArguments
()[
0
];
Class
<?>
subClass
=
(
Class
<?>)
pt
.
getActualTypeArguments
()[
0
];
...
@@ -1443,17 +1238,14 @@ public class ExcelUtil<T>
...
@@ -1443,17 +1238,14 @@ public class ExcelUtil<T>
}
}
// 多注解
// 多注解
if
(
field
.
isAnnotationPresent
(
Excels
.
class
))
if
(
field
.
isAnnotationPresent
(
Excels
.
class
))
{
{
Excels
attrs
=
field
.
getAnnotation
(
Excels
.
class
);
Excels
attrs
=
field
.
getAnnotation
(
Excels
.
class
);
Excel
[]
excels
=
attrs
.
value
();
Excel
[]
excels
=
attrs
.
value
();
for
(
Excel
attr
:
excels
)
for
(
Excel
attr
:
excels
)
{
{
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
)))
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
)))
{
{
field
.
setAccessible
(
true
);
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
field
,
attr
});
}
}
}
}
}
}
...
@@ -1465,11 +1257,9 @@ public class ExcelUtil<T>
...
@@ -1465,11 +1257,9 @@ public class ExcelUtil<T>
/**
/**
* 根据注解获取最大行高
* 根据注解获取最大行高
*/
*/
public
short
getRowHeight
()
public
short
getRowHeight
()
{
{
double
maxHeight
=
0
;
double
maxHeight
=
0
;
for
(
Object
[]
os
:
this
.
fields
)
for
(
Object
[]
os
:
this
.
fields
)
{
{
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
maxHeight
=
Math
.
max
(
maxHeight
,
excel
.
height
());
maxHeight
=
Math
.
max
(
maxHeight
,
excel
.
height
());
}
}
...
@@ -1479,8 +1269,7 @@ public class ExcelUtil<T>
...
@@ -1479,8 +1269,7 @@ public class ExcelUtil<T>
/**
/**
* 创建一个工作簿
* 创建一个工作簿
*/
*/
public
void
createWorkbook
()
public
void
createWorkbook
()
{
{
this
.
wb
=
new
SXSSFWorkbook
(
500
);
this
.
wb
=
new
SXSSFWorkbook
(
500
);
this
.
sheet
=
wb
.
createSheet
();
this
.
sheet
=
wb
.
createSheet
();
wb
.
setSheetName
(
0
,
sheetName
);
wb
.
setSheetName
(
0
,
sheetName
);
...
@@ -1493,11 +1282,9 @@ public class ExcelUtil<T>
...
@@ -1493,11 +1282,9 @@ public class ExcelUtil<T>
* @param sheetNo sheet数量
* @param sheetNo sheet数量
* @param index 序号
* @param index 序号
*/
*/
public
void
createSheet
(
int
sheetNo
,
int
index
)
public
void
createSheet
(
int
sheetNo
,
int
index
)
{
{
// 设置工作表的名称.
// 设置工作表的名称.
if
(
sheetNo
>
1
&&
index
>
0
)
if
(
sheetNo
>
1
&&
index
>
0
)
{
{
this
.
sheet
=
wb
.
createSheet
();
this
.
sheet
=
wb
.
createSheet
();
this
.
createTitle
();
this
.
createTitle
();
wb
.
setSheetName
(
index
,
sheetName
+
index
);
wb
.
setSheetName
(
index
,
sheetName
+
index
);
...
@@ -1511,54 +1298,35 @@ public class ExcelUtil<T>
...
@@ -1511,54 +1298,35 @@ public class ExcelUtil<T>
* @param column 获取单元格列号
* @param column 获取单元格列号
* @return 单元格值
* @return 单元格值
*/
*/
public
Object
getCellValue
(
Row
row
,
int
column
)
public
Object
getCellValue
(
Row
row
,
int
column
)
{
{
if
(
row
==
null
)
{
if
(
row
==
null
)
{
return
row
;
return
row
;
}
}
Object
val
=
""
;
Object
val
=
""
;
try
try
{
{
Cell
cell
=
row
.
getCell
(
column
);
Cell
cell
=
row
.
getCell
(
column
);
if
(
StringUtils
.
isNotNull
(
cell
))
if
(
StringUtils
.
isNotNull
(
cell
))
{
{
if
(
cell
.
getCellType
()
==
CellType
.
NUMERIC
||
cell
.
getCellType
()
==
CellType
.
FORMULA
)
{
if
(
cell
.
getCellType
()
==
CellType
.
NUMERIC
||
cell
.
getCellType
()
==
CellType
.
FORMULA
)
{
val
=
cell
.
getNumericCellValue
();
val
=
cell
.
getNumericCellValue
();
if
(
DateUtil
.
isCellDateFormatted
(
cell
))
if
(
DateUtil
.
isCellDateFormatted
(
cell
))
{
{
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
// POI Excel 日期格式转换
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
// POI Excel 日期格式转换
}
}
else
{
else
if
((
Double
)
val
%
1
!=
0
)
{
{
if
((
Double
)
val
%
1
!=
0
)
{
val
=
new
BigDecimal
(
val
.
toString
());
val
=
new
BigDecimal
(
val
.
toString
());
}
}
else
{
else
{
val
=
new
DecimalFormat
(
"0"
).
format
(
val
);
val
=
new
DecimalFormat
(
"0"
).
format
(
val
);
}
}
}
}
}
}
else
if
(
cell
.
getCellType
()
==
CellType
.
STRING
)
{
else
if
(
cell
.
getCellType
()
==
CellType
.
STRING
)
{
val
=
cell
.
getStringCellValue
();
val
=
cell
.
getStringCellValue
();
}
}
else
if
(
cell
.
getCellType
()
==
CellType
.
BOOLEAN
)
{
else
if
(
cell
.
getCellType
()
==
CellType
.
BOOLEAN
)
{
val
=
cell
.
getBooleanCellValue
();
val
=
cell
.
getBooleanCellValue
();
}
}
else
if
(
cell
.
getCellType
()
==
CellType
.
ERROR
)
{
else
if
(
cell
.
getCellType
()
==
CellType
.
ERROR
)
{
val
=
cell
.
getErrorCellValue
();
val
=
cell
.
getErrorCellValue
();
}
}
}
}
}
}
catch
(
Exception
e
)
{
catch
(
Exception
e
)
{
return
val
;
return
val
;
}
}
return
val
;
return
val
;
...
@@ -1570,17 +1338,13 @@ public class ExcelUtil<T>
...
@@ -1570,17 +1338,13 @@ public class ExcelUtil<T>
* @param row 判断的行
* @param row 判断的行
* @return
* @return
*/
*/
private
boolean
isRowEmpty
(
Row
row
)
private
boolean
isRowEmpty
(
Row
row
)
{
{
if
(
row
==
null
)
{
if
(
row
==
null
)
{
return
true
;
return
true
;
}
}
for
(
int
i
=
row
.
getFirstCellNum
();
i
<
row
.
getLastCellNum
();
i
++)
for
(
int
i
=
row
.
getFirstCellNum
();
i
<
row
.
getLastCellNum
();
i
++)
{
{
Cell
cell
=
row
.
getCell
(
i
);
Cell
cell
=
row
.
getCell
(
i
);
if
(
cell
!=
null
&&
cell
.
getCellType
()
!=
CellType
.
BLANK
)
if
(
cell
!=
null
&&
cell
.
getCellType
()
!=
CellType
.
BLANK
)
{
{
return
false
;
return
false
;
}
}
}
}
...
@@ -1594,17 +1358,13 @@ public class ExcelUtil<T>
...
@@ -1594,17 +1358,13 @@ public class ExcelUtil<T>
* @param workbook 工作簿对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictures03
(
HSSFSheet
sheet
,
HSSFWorkbook
workbook
)
public
static
Map
<
String
,
PictureData
>
getSheetPictures03
(
HSSFSheet
sheet
,
HSSFWorkbook
workbook
)
{
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
List
<
HSSFPictureData
>
pictures
=
workbook
.
getAllPictures
();
List
<
HSSFPictureData
>
pictures
=
workbook
.
getAllPictures
();
if
(!
pictures
.
isEmpty
())
if
(!
pictures
.
isEmpty
())
{
{
for
(
HSSFShape
shape
:
sheet
.
getDrawingPatriarch
().
getChildren
())
{
for
(
HSSFShape
shape
:
sheet
.
getDrawingPatriarch
().
getChildren
())
{
HSSFClientAnchor
anchor
=
(
HSSFClientAnchor
)
shape
.
getAnchor
();
HSSFClientAnchor
anchor
=
(
HSSFClientAnchor
)
shape
.
getAnchor
();
if
(
shape
instanceof
HSSFPicture
)
if
(
shape
instanceof
HSSFPicture
)
{
{
HSSFPicture
pic
=
(
HSSFPicture
)
shape
;
HSSFPicture
pic
=
(
HSSFPicture
)
shape
;
int
pictureIndex
=
pic
.
getPictureIndex
()
-
1
;
int
pictureIndex
=
pic
.
getPictureIndex
()
-
1
;
HSSFPictureData
picData
=
pictures
.
get
(
pictureIndex
);
HSSFPictureData
picData
=
pictures
.
get
(
pictureIndex
);
...
@@ -1613,9 +1373,7 @@ public class ExcelUtil<T>
...
@@ -1613,9 +1373,7 @@ public class ExcelUtil<T>
}
}
}
}
return
sheetIndexPicMap
;
return
sheetIndexPicMap
;
}
}
else
{
else
{
return
sheetIndexPicMap
;
return
sheetIndexPicMap
;
}
}
}
}
...
@@ -1627,19 +1385,14 @@ public class ExcelUtil<T>
...
@@ -1627,19 +1385,14 @@ public class ExcelUtil<T>
* @param workbook 工作簿对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictures07
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
public
static
Map
<
String
,
PictureData
>
getSheetPictures07
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
{
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
for
(
POIXMLDocumentPart
dr
:
sheet
.
getRelations
())
for
(
POIXMLDocumentPart
dr
:
sheet
.
getRelations
())
{
{
if
(
dr
instanceof
XSSFDrawing
)
{
if
(
dr
instanceof
XSSFDrawing
)
{
XSSFDrawing
drawing
=
(
XSSFDrawing
)
dr
;
XSSFDrawing
drawing
=
(
XSSFDrawing
)
dr
;
List
<
XSSFShape
>
shapes
=
drawing
.
getShapes
();
List
<
XSSFShape
>
shapes
=
drawing
.
getShapes
();
for
(
XSSFShape
shape
:
shapes
)
for
(
XSSFShape
shape
:
shapes
)
{
{
if
(
shape
instanceof
XSSFPicture
)
{
if
(
shape
instanceof
XSSFPicture
)
{
XSSFPicture
pic
=
(
XSSFPicture
)
shape
;
XSSFPicture
pic
=
(
XSSFPicture
)
shape
;
XSSFClientAnchor
anchor
=
pic
.
getPreferredSize
();
XSSFClientAnchor
anchor
=
pic
.
getPreferredSize
();
CTMarker
ctMarker
=
anchor
.
getFrom
();
CTMarker
ctMarker
=
anchor
.
getFrom
();
...
@@ -1659,27 +1412,18 @@ public class ExcelUtil<T>
...
@@ -1659,27 +1412,18 @@ public class ExcelUtil<T>
* @param val 被格式化的日期对象
* @param val 被格式化的日期对象
* @return 格式化后的日期字符
* @return 格式化后的日期字符
*/
*/
public
String
parseDateToStr
(
String
dateFormat
,
Object
val
)
public
String
parseDateToStr
(
String
dateFormat
,
Object
val
)
{
{
if
(
val
==
null
)
{
if
(
val
==
null
)
{
return
""
;
return
""
;
}
}
String
str
;
String
str
;
if
(
val
instanceof
Date
)
if
(
val
instanceof
Date
)
{
{
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
(
Date
)
val
);
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
(
Date
)
val
);
}
}
else
if
(
val
instanceof
LocalDateTime
)
{
else
if
(
val
instanceof
LocalDateTime
)
{
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
DateUtils
.
toDate
((
LocalDateTime
)
val
));
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
DateUtils
.
toDate
((
LocalDateTime
)
val
));
}
}
else
if
(
val
instanceof
LocalDate
)
{
else
if
(
val
instanceof
LocalDate
)
{
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
DateUtils
.
toDate
((
LocalDate
)
val
));
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
DateUtils
.
toDate
((
LocalDate
)
val
));
}
}
else
{
else
{
str
=
val
.
toString
();
str
=
val
.
toString
();
}
}
return
str
;
return
str
;
...
@@ -1688,31 +1432,25 @@ public class ExcelUtil<T>
...
@@ -1688,31 +1432,25 @@ public class ExcelUtil<T>
/**
/**
* 是否有对象的子列表
* 是否有对象的子列表
*/
*/
public
boolean
isSubList
()
public
boolean
isSubList
()
{
{
return
StringUtils
.
isNotNull
(
subFields
)
&&
subFields
.
size
()
>
0
;
return
StringUtils
.
isNotNull
(
subFields
)
&&
subFields
.
size
()
>
0
;
}
}
/**
/**
* 是否有对象的子列表,集合不为空
* 是否有对象的子列表,集合不为空
*/
*/
public
boolean
isSubListValue
(
T
vo
)
public
boolean
isSubListValue
(
T
vo
)
{
{
return
StringUtils
.
isNotNull
(
subFields
)
&&
subFields
.
size
()
>
0
&&
StringUtils
.
isNotNull
(
getListCellValue
(
vo
))
&&
getListCellValue
(
vo
).
size
()
>
0
;
return
StringUtils
.
isNotNull
(
subFields
)
&&
subFields
.
size
()
>
0
&&
StringUtils
.
isNotNull
(
getListCellValue
(
vo
))
&&
getListCellValue
(
vo
).
size
()
>
0
;
}
}
/**
/**
* 获取集合的值
* 获取集合的值
*/
*/
public
Collection
<?>
getListCellValue
(
Object
obj
)
public
Collection
<?>
getListCellValue
(
Object
obj
)
{
{
Object
value
;
Object
value
;
try
try
{
{
value
=
subMethod
.
invoke
(
obj
,
new
Object
[]{});
value
=
subMethod
.
invoke
(
obj
,
new
Object
[]
{});
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
new
ArrayList
<
Object
>();
return
new
ArrayList
<
Object
>();
}
}
return
(
Collection
<?>)
value
;
return
(
Collection
<?>)
value
;
...
@@ -1725,18 +1463,14 @@ public class ExcelUtil<T>
...
@@ -1725,18 +1463,14 @@ public class ExcelUtil<T>
* @param pojoClass 类对象
* @param pojoClass 类对象
* @return 子列表方法
* @return 子列表方法
*/
*/
public
Method
getSubMethod
(
String
name
,
Class
<?>
pojoClass
)
public
Method
getSubMethod
(
String
name
,
Class
<?>
pojoClass
)
{
{
StringBuffer
getMethodName
=
new
StringBuffer
(
"get"
);
StringBuffer
getMethodName
=
new
StringBuffer
(
"get"
);
getMethodName
.
append
(
name
.
substring
(
0
,
1
).
toUpperCase
());
getMethodName
.
append
(
name
.
substring
(
0
,
1
).
toUpperCase
());
getMethodName
.
append
(
name
.
substring
(
1
));
getMethodName
.
append
(
name
.
substring
(
1
));
Method
method
=
null
;
Method
method
=
null
;
try
try
{
{
method
=
pojoClass
.
getMethod
(
getMethodName
.
toString
(),
new
Class
[]{});
method
=
pojoClass
.
getMethod
(
getMethodName
.
toString
(),
new
Class
[]
{});
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"获取对象异常{}"
,
e
.
getMessage
());
log
.
error
(
"获取对象异常{}"
,
e
.
getMessage
());
}
}
return
method
;
return
method
;
...
...
dsk-operate-ui/src/views/custom/overview/index.vue
View file @
1593724c
...
@@ -207,11 +207,7 @@
...
@@ -207,11 +207,7 @@
hzqkList
:[],
hzqkList
:[],
creditLevel
:[],
creditLevel
:[],
chartDom
:
''
,
chartDom
:
''
,
myChart
:
''
,
option
:
''
,
chartDom1
:
''
,
chartDom1
:
''
,
myChart1
:
''
,
option1
:
''
,
pageNum
:
1
,
pageNum
:
1
,
pageSize
:
10
,
pageSize
:
10
,
recordlist
:[],
recordlist
:[],
...
@@ -234,19 +230,7 @@
...
@@ -234,19 +230,7 @@
this
.
getFollowList
()
this
.
getFollowList
()
},
},
mounted
(){
mounted
(){
this
.
$nextTick
(()
=>
{
this
.
chartDom
=
document
.
getElementById
(
"hzqk-echarts"
)
this
.
myChart
=
echarts
.
init
(
this
.
chartDom
)
this
.
chartDom1
=
document
.
getElementById
(
"zxpj-echarts"
)
this
.
myChart1
=
echarts
.
init
(
this
.
chartDom1
)
})
window
.
addEventListener
(
"resize"
,
this
.
resizeEcharts
);
},
beforeDestroy
(){
window
.
removeEventListener
(
"resize"
,
this
.
resizeEcharts
);
},
activated
()
{
this
.
resizeEcharts
()
},
},
methods
:
{
methods
:
{
getData
(){
getData
(){
...
@@ -285,7 +269,6 @@
...
@@ -285,7 +269,6 @@
pageNum
:
this
.
pageNum
,
//页码
pageNum
:
this
.
pageNum
,
//页码
pageSize
:
this
.
pageSize
,
pageSize
:
this
.
pageSize
,
}
}
console
.
log
(
this
.
params
)
if
(
this
.
params
.
startTime
){
if
(
this
.
params
.
startTime
){
param
.
startTime
=
this
.
params
.
startTime
param
.
startTime
=
this
.
params
.
startTime
}
}
...
@@ -302,13 +285,6 @@
...
@@ -302,13 +285,6 @@
})
})
})
})
},
},
resizeEcharts
(){
const
self
=
this
setTimeout
(
function
(){
//图表跟随页面大小变化宽度
self
.
myChart
.
resize
()
self
.
myChart1
.
resize
()
},
10
)
},
initChart
(
list
){
initChart
(
list
){
let
data
=
[]
let
data
=
[]
if
(
list
.
length
>
10
){
if
(
list
.
length
>
10
){
...
@@ -318,8 +294,10 @@
...
@@ -318,8 +294,10 @@
}
else
{
}
else
{
data
=
list
data
=
list
}
}
this
.
$nextTick
(()
=>
{
let
myChart
=
echarts
.
init
(
document
.
getElementById
(
"hzqk-echarts"
))
//业主单位合作情况
//业主单位合作情况
this
.
option
=
{
let
option
=
{
tooltip
:
{
tooltip
:
{
trigger
:
'axis'
,
trigger
:
'axis'
,
axisPointer
:
{
axisPointer
:
{
...
@@ -424,11 +402,17 @@
...
@@ -424,11 +402,17 @@
}
}
]
]
}
}
this
.
option
&&
this
.
myChart
.
setOption
(
this
.
option
)
myChart
.
setOption
(
option
);
window
.
addEventListener
(
"resize"
,
function
()
{
myChart
.
resize
();
//图表跟随页面大小变化宽度
});
})
},
},
initChart1
(
data
){
initChart1
(
data
){
this
.
$nextTick
(()
=>
{
let
myChart
=
echarts
.
init
(
document
.
getElementById
(
"zxpj-echarts"
))
//客户资信评级
//客户资信评级
this
.
option1
=
{
let
option
=
{
tooltip
:
{
tooltip
:
{
trigger
:
'axis'
,
trigger
:
'axis'
,
axisPointer
:
{
axisPointer
:
{
...
@@ -473,12 +457,18 @@
...
@@ -473,12 +457,18 @@
return
'客户数量 '
+
value
return
'客户数量 '
+
value
}
}
},
},
itemStyle
:{
itemStyle
:
{
normal
:
{
normal
:{
barBorderRadius
:
[
9
,
9
,
0
,
0
],
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
color
:
'#165DFF'
offset
:
0
,
}
color
:
'#56A5FF'
},
{
offset
:
1
,
color
:
'#1B8EFF'
}]),
barBorderRadius
:[
20
,
20
,
0
,
0
]
}
}
},
}
}
],
],
...
@@ -489,7 +479,11 @@
...
@@ -489,7 +479,11 @@
},
},
}
}
}
}
this
.
option1
&&
this
.
myChart1
.
setOption
(
this
.
option1
)
myChart
.
setOption
(
option
);
window
.
addEventListener
(
"resize"
,
function
()
{
myChart
.
resize
();
//图表跟随页面大小变化宽度
});
})
},
},
handleCurrentChange
(
val
)
{
handleCurrentChange
(
val
)
{
this
.
pageNum
=
1
;
this
.
pageNum
=
1
;
...
...
dsk-system/src/main/java/com/dsk/system/domain/dsk/dto/JskCombineSearchDto.java
View file @
1593724c
...
@@ -20,6 +20,10 @@ public class JskCombineSearchDto implements Serializable {
...
@@ -20,6 +20,10 @@ public class JskCombineSearchDto implements Serializable {
*/
*/
@NotNull
(
message
=
"集团id不能为空!"
)
@NotNull
(
message
=
"集团id不能为空!"
)
private
String
combineId
;
private
String
combineId
;
/**
* 集团名称
*/
private
String
combineName
;
/**
/**
* 筛选参数
* 筛选参数
*/
*/
...
...
dsk-system/src/main/java/com/dsk/system/domain/dsk/vo/JskCombineBidProjectExportVo.java
0 → 100644
View file @
1593724c
package
com
.
dsk
.
system
.
domain
.
dsk
.
vo
;
import
com.dsk.common.annotation.Excel
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* 集团中标业绩
* @author lcl
* @create 2023/8/28
*/
@Data
public
class
JskCombineBidProjectExportVo
implements
Serializable
{
@Excel
(
name
=
"序号"
,
width
=
6
)
private
Integer
id
;
@Excel
(
name
=
"招标发布时间"
,
width
=
15
,
dateFormat
=
"yyyy/MM/dd"
)
private
Date
bidTime
;
@Excel
(
name
=
"招标成员"
,
width
=
30
)
private
String
companyName
;
@Excel
(
name
=
"持股比例"
,
suffix
=
"%"
,
width
=
15
)
private
Double
stockPercent
;
@Excel
(
name
=
"成员等级"
,
width
=
15
)
private
String
memberLevel
;
@Excel
(
name
=
"项目名称"
,
width
=
50
)
private
String
projectName
;
@Excel
(
name
=
"预算金额"
,
suffix
=
"万元"
)
private
Double
bidAmount
;
@Excel
(
name
=
"项目地区"
,
width
=
20
)
private
String
address
;
@Excel
(
name
=
"招标采购分类"
,
width
=
15
)
private
String
bidType
;
@Excel
(
name
=
"项目类型"
,
width
=
15
)
private
String
projectType
;
@Excel
(
name
=
"代理单位"
,
width
=
30
)
private
String
projectUnit
;
}
dsk-system/src/main/java/com/dsk/system/domain/dsk/vo/JskCombineWinBidProjectExportVo.java
0 → 100644
View file @
1593724c
package
com
.
dsk
.
system
.
domain
.
dsk
.
vo
;
import
com.dsk.common.annotation.Excel
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* 集团中标业绩
* @author lcl
* @create 2023/8/28
*/
@Data
public
class
JskCombineWinBidProjectExportVo
implements
Serializable
{
@Excel
(
name
=
"序号"
,
width
=
6
)
private
Integer
id
;
@Excel
(
name
=
"中标时间"
,
width
=
15
,
dateFormat
=
"yyyy/MM/dd"
)
private
Date
bidTime
;
@Excel
(
name
=
"成员名称"
,
width
=
30
)
private
String
companyName
;
@Excel
(
name
=
"持股比例"
,
suffix
=
"%"
,
width
=
15
)
private
Double
stockPercent
;
@Excel
(
name
=
"成员等级"
,
width
=
15
)
private
String
memberLevel
;
@Excel
(
name
=
"项目名称"
,
width
=
50
)
private
String
projectName
;
@Excel
(
name
=
"中标金额"
,
suffix
=
"万元"
)
private
Double
bidAmount
;
@Excel
(
name
=
"中标地区"
,
width
=
20
)
private
String
address
;
@Excel
(
name
=
"业绩类型"
,
width
=
15
)
private
String
boundType
;
@Excel
(
name
=
"项目类型"
,
width
=
15
)
private
String
projectType
;
@Excel
(
name
=
"业主单位"
,
width
=
30
)
private
String
projectUnit
;
}
dsk-system/src/main/java/com/dsk/system/dskService/EnterpriseBussinessService.java
View file @
1593724c
...
@@ -57,8 +57,41 @@ public class EnterpriseBussinessService {
...
@@ -57,8 +57,41 @@ public class EnterpriseBussinessService {
}
}
public
TableDataInfo
clientPage
(
EnterpriseBussinessClientPageBody
body
)
throws
Exception
{
public
TableDataInfo
clientPage
(
EnterpriseBussinessClientPageBody
body
)
throws
Exception
{
if
(
body
.
isVaildCid
())
return
new
TableDataInfo
(
new
ArrayList
<>(),
0
);
if
(
body
.
isVaildCid
())
{
return
new
TableDataInfo
(
new
ArrayList
<>(),
0
);
}
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterpriseBussiness/clientPage2"
,
BeanUtil
.
beanToMap
(
body
,
false
,
false
));
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterpriseBussiness/clientPage2"
,
BeanUtil
.
beanToMap
(
body
,
false
,
false
));
Map
data
=
MapUtils
.
getMap
(
map
,
"data"
,
null
);
List
<
Object
>
list
=
CommonUtils
.
assertAsArray
(
MapUtils
.
getObject
(
data
,
"list"
,
""
));
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
new
TableDataInfo
(
list
,
0
);
}
ArrayList
<
Long
>
cIds
=
new
ArrayList
<>();
for
(
Object
dataMap
:
list
)
{
cIds
.
add
(
MapUtils
.
getLong
(
CommonUtils
.
assertAsMap
(
dataMap
),
"companyId"
));
}
HashMap
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"ids"
,
cIds
);
Map
<
String
,
Object
>
uipIdMap
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterprise/getUipIdByCid"
,
paramMap
);
Object
uipIdData
=
uipIdMap
.
get
(
"data"
);
List
<
Map
<
String
,
Object
>>
mapList
=
new
ArrayList
<>();
if
(
ObjectUtil
.
isNotEmpty
(
uipIdData
))
{
mapList
=
(
List
<
Map
<
String
,
Object
>>)
uipIdData
;
}
for
(
Object
dataMap
:
list
)
{
Map
<
String
,
Object
>
companyMap
=
CommonUtils
.
assertAsMap
(
dataMap
);
Long
cusCompanyId
=
MapUtils
.
getLong
(
companyMap
,
"companyId"
,
0L
);
companyMap
.
put
(
"uipId"
,
null
);
for
(
Map
<
String
,
Object
>
m
:
mapList
)
{
String
uipId
=
MapUtils
.
getString
(
m
,
"uipId"
,
null
);
Long
companyId
=
MapUtils
.
getLong
(
m
,
"companyId"
,
0L
);
if
(
cusCompanyId
.
equals
(
companyId
))
{
companyMap
.
put
(
"uipId"
,
uipId
);
}
}
}
return
dskOpenApiUtil
.
responsePage
(
map
);
return
dskOpenApiUtil
.
responsePage
(
map
);
}
}
...
...
dsk-system/src/main/java/com/dsk/system/dskService/JskCombineInfoService.java
View file @
1593724c
package
com
.
dsk
.
system
.
dskService
;
package
com
.
dsk
.
system
.
dskService
;
import
cn.hutool.core.bean.BeanException
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.
util.Object
Util
;
import
cn.hutool.core.
map.Map
Util
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.utils.DskOpenApiUtil
;
import
com.dsk.common.utils.DskOpenApiUtil
;
import
com.dsk.system.domain.dsk.dto.JskCombineCertificateDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineCertificateDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineSearchDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineSearchDto
;
import
com.dsk.system.domain.dsk.vo.JskCombineBidProjectExportVo
;
import
com.dsk.system.domain.dsk.vo.JskCombineWinBidProjectExportVo
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.ibatis.util.MapUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.ObjectUtils
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -81,7 +81,7 @@ public class JskCombineInfoService {
...
@@ -81,7 +81,7 @@ public class JskCombineInfoService {
return
dskOpenApiUtil
.
responsePage
(
map
);
return
dskOpenApiUtil
.
responsePage
(
map
);
}
}
public
TableDataInfo
menberCertificateList
(
JskCombineCertificateDto
dto
)
throws
Exception
{
public
TableDataInfo
menberCertificateList
(
JskCombineCertificateDto
dto
)
throws
Exception
{
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/member/certificateList"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/member/certificateList"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
// if (!ObjectUtils.isEmpty(map.get("data"))) {
// if (!ObjectUtils.isEmpty(map.get("data"))) {
// Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
// Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
...
@@ -141,4 +141,65 @@ public class JskCombineInfoService {
...
@@ -141,4 +141,65 @@ public class JskCombineInfoService {
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/nationzj/enterprice/centralEnterprse/social/page"
,
object
);
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/nationzj/enterprice/centralEnterprse/social/page"
,
object
);
return
BeanUtil
.
toBean
(
map
,
AjaxResult
.
class
);
return
BeanUtil
.
toBean
(
map
,
AjaxResult
.
class
);
}
}
public
List
<
JskCombineWinBidProjectExportVo
>
exportWinBid
(
JskCombineSearchDto
dto
)
{
if
(
ObjectUtils
.
isEmpty
(
dto
.
getPageSize
()))
throw
new
ServiceException
(
"导出条数不能为空!"
);
if
(
dto
.
getPageSize
()
>
2000
)
dto
.
setPageSize
(
2000
);
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/businessList"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
if
(
ObjectUtils
.
isEmpty
(
map
.
get
(
"data"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
Map
<
String
,
Object
>
data
=
BeanUtil
.
beanToMap
(
map
.
get
(
"data"
));
if
(
ObjectUtils
.
isEmpty
(
data
.
get
(
"list"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
List
<
Map
<
String
,
Object
>>
list
=
(
List
<
Map
<
String
,
Object
>>)
data
.
get
(
"list"
);
if
(
ObjectUtils
.
isEmpty
(
list
))
throw
new
ServiceException
(
"导出失败,无数据导出!"
);
List
<
JskCombineWinBidProjectExportVo
>
result
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
JskCombineWinBidProjectExportVo
vo
=
new
JskCombineWinBidProjectExportVo
();
vo
.
setId
(
i
+
1
);
vo
.
setBidTime
(
MapUtil
.
getDate
(
list
.
get
(
i
),
"bidTime"
));
vo
.
setCompanyName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"companyName"
));
vo
.
setStockPercent
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"stockPercent"
));
vo
.
setMemberLevel
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"memberLevel"
));
vo
.
setProjectName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectName"
));
vo
.
setBidAmount
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"bidAmount"
));
vo
.
setAddress
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"address"
));
vo
.
setBoundType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"boundType"
));
vo
.
setProjectType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectType"
));
vo
.
setProjectUnit
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectUnit"
));
result
.
add
(
vo
);
}
return
result
;
}
public
List
<
JskCombineBidProjectExportVo
>
exportBid
(
JskCombineSearchDto
dto
)
{
if
(
ObjectUtils
.
isEmpty
(
dto
.
getPageSize
()))
throw
new
ServiceException
(
"导出条数不能为空!"
);
if
(
dto
.
getPageSize
()
>
2000
)
dto
.
setPageSize
(
2000
);
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/businessList"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
if
(
ObjectUtils
.
isEmpty
(
map
.
get
(
"data"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
Map
<
String
,
Object
>
data
=
BeanUtil
.
beanToMap
(
map
.
get
(
"data"
));
if
(
ObjectUtils
.
isEmpty
(
data
.
get
(
"list"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
List
<
Map
<
String
,
Object
>>
list
=
(
List
<
Map
<
String
,
Object
>>)
data
.
get
(
"list"
);
if
(
ObjectUtils
.
isEmpty
(
list
))
throw
new
ServiceException
(
"导出失败,无数据导出!"
);
List
<
JskCombineBidProjectExportVo
>
result
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
JskCombineBidProjectExportVo
vo
=
new
JskCombineBidProjectExportVo
();
vo
.
setId
(
i
+
1
);
vo
.
setBidTime
(
MapUtil
.
getDate
(
list
.
get
(
i
),
"bidTime"
));
vo
.
setCompanyName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"companyName"
));
vo
.
setStockPercent
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"stockPercent"
));
vo
.
setMemberLevel
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"memberLevel"
));
vo
.
setProjectName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectName"
));
vo
.
setBidAmount
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"bidAmount"
));
vo
.
setAddress
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"address"
));
vo
.
setBidType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"boundType"
));
vo
.
setProjectType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectType"
));
vo
.
setProjectUnit
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectUnit"
));
result
.
add
(
vo
);
}
return
result
;
}
}
}
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