Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
leader-base
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
张京坤
leader-base
Commits
f56fb9ae
提交
f56fb9ae
authored
1月 16, 2025
作者:
贺晋豫
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
人物数据 导入接口修改、新增导出接口
上级
4439987b
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
390 行增加
和
162 行删除
+390
-162
CharacterBasicInfoController.java
...n/leaderbase/controller/CharacterBasicInfoController.java
+135
-162
CharacterBasicInfoService.java
...om/zzsn/leaderbase/service/CharacterBasicInfoService.java
+8
-0
CharacterBasicInfoServiceImpl.java
...eaderbase/service/impl/CharacterBasicInfoServiceImpl.java
+247
-0
没有找到文件。
src/main/java/com/zzsn/leaderbase/controller/CharacterBasicInfoController.java
浏览文件 @
f56fb9ae
package
com
.
zzsn
.
leaderbase
.
controller
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.copier.CopyOptions
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.zzsn.leaderbase.entity.CharacterBasicInfo
;
import
com.zzsn.leaderbase.service.CharacterBasicInfoService
;
import
com.zzsn.leaderbase.service.IGeneratorIdService
;
import
com.zzsn.leaderbase.util.ExcelUtil
;
import
com.zzsn.leaderbase.util.SortUtil
;
import
com.zzsn.leaderbase.vo.BasicInfoListVo
;
import
com.zzsn.leaderbase.vo.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.nio.file.Files
;
import
java.nio.file.Paths
;
import
java.util.*
;
import
java.nio.file.StandardCopyOption
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@RestController
...
...
@@ -37,8 +32,11 @@ public class CharacterBasicInfoController {
CharacterBasicInfoService
characterBasicInfoService
;
@Autowired
IGeneratorIdService
generatorIdService
;
//category 分类类型(1-领导人、2-专家、3-企业高管) 末尾数字对应导入导出数据集类别 例:importFieldMap2代表专家导入导出的字段map集合
private
static
Map
<
String
,
String
>
importFieldMap1
;
private
static
Map
<
String
,
String
>
importFieldMap2
;
private
static
Map
<
String
,
String
>
importFieldMap3
;
private
static
Map
<
String
,
String
>
importFieldMap
;
/**
* 资讯抽取人物信息分页查询
* 人物审核列表
...
...
@@ -174,7 +172,7 @@ public class CharacterBasicInfoController {
//类别过滤为专家
basicInfoListVo
.
setCategory
(
"2"
);
basicInfoListVo
.
setColumn
(
SortUtil
.
humpToLine
(
basicInfoListVo
.
getColumn
()));
List
<
CharacterBasicInfo
>
list
=
characterBasicInfoService
.
getAllList
(
basicInfoListVo
);
List
<
CharacterBasicInfo
>
list
=
characterBasicInfoService
.
getAllList
(
basicInfoListVo
);
return
Result
.
OK
(
list
);
}
...
...
@@ -194,168 +192,143 @@ public class CharacterBasicInfoController {
IPage
page
=
characterBasicInfoService
.
getList
(
basicInfoListVo
);
return
Result
.
OK
(
page
);
}
@GetMapping
(
"/importExcel"
)
public
void
importExcel
(
String
[]
args
)
{
//本地文件路径
String
filePath
=
"E:\\数能软件\\克虏宝\\人物服务\\专家导入数据20250115.xlsx"
;
addSummaryLocalExcel
(
filePath
,
"2"
);
}
public
void
addSummaryLocalExcel
(
String
filePath
,
String
category
)
{
List
<
String
>
sheetNameList
=
new
ArrayList
<>();
Workbook
workbook
=
null
;
InputStream
in
=
null
;
try
{
// 获取输入流
in
=
Files
.
newInputStream
(
Paths
.
get
(
filePath
));
// 判断excel版本
if
(
ExcelUtil
.
judegExcelEdition
(
filePath
))
{
workbook
=
new
XSSFWorkbook
(
in
);
}
else
{
workbook
=
new
HSSFWorkbook
(
in
);
}
Iterator
<
Sheet
>
it
=
workbook
.
sheetIterator
();
while
(
it
.
hasNext
())
{
Sheet
sheetTmp
=
it
.
next
();
String
sheetName
=
sheetTmp
.
getSheetName
();
sheetNameList
.
add
(
sheetName
);
@PostMapping
(
"/importExcel"
)
public
Result
<?>
importExcel
(
@RequestParam
(
value
=
"file"
,
required
=
false
)
MultipartFile
file
,
@RequestParam
String
category
)
{
if
(
file
.
isEmpty
())
{
return
Result
.
error
(
"文件为空"
);
}
File
tempFile
=
null
;
// 获取文件的二进制数据
try
(
InputStream
inputStream
=
file
.
getInputStream
())
{
tempFile
=
new
File
(
file
.
getOriginalFilename
());
Files
.
copy
(
inputStream
,
Paths
.
get
(
tempFile
.
getAbsolutePath
()),
StandardCopyOption
.
REPLACE_EXISTING
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
for
(
String
sheetName
:
sheetNameList
)
{
Sheet
sheet
=
workbook
.
getSheet
(
sheetName
);
//获取标题行
Row
titleRow
=
sheet
.
getRow
(
0
);
List
<
CharacterBasicInfo
>
list
=
new
ArrayList
<>();
for
(
int
i
=
1
;
i
<
sheet
.
getPhysicalNumberOfRows
();
i
++)
{
// 循环获取工作表的每一行
Row
sheetRow
=
sheet
.
getRow
(
i
);
if
(
sheetRow
==
null
)
{
continue
;
//category 分类类型(1-领导人、2-专家、3-企业高管)
// 根据 category 选择对应的 importFieldMap
Map
<
String
,
String
>
importFieldMap
=
getImportFieldMap
(
category
);
String
result
=
characterBasicInfoService
.
importExcel
(
tempFile
.
getAbsolutePath
(),
category
,
importFieldMap
);
return
Result
.
OK
(
result
);
}
Map
<
String
,
Object
>
beanMap
=
new
HashMap
<>();
for
(
Cell
cell
:
titleRow
)
{
String
titleName
=
cell
.
getStringCellValue
();
if
(
importFieldMap
.
containsKey
(
titleName
)){
@PostMapping
(
"/exportExcel"
)
public
ResponseEntity
<
byte
[]>
exportExcel
(
@RequestBody
BasicInfoListVo
basicInfoListVo
,
@RequestParam
String
category
)
{
basicInfoListVo
.
setCategory
(
category
);
basicInfoListVo
.
setColumn
(
SortUtil
.
humpToLine
(
basicInfoListVo
.
getColumn
()));
List
<
CharacterBasicInfo
>
list
=
characterBasicInfoService
.
getAllList
(
basicInfoListVo
);
Map
<
String
,
String
>
importFieldMap
=
getImportFieldMap
(
category
);
ResponseEntity
<
byte
[]>
responseEntity
;
try
{
String
stringCellValue
=
sheetRow
.
getCell
(
cell
.
getColumnIndex
()).
getStringCellValue
();
if
(
StringUtils
.
isNotEmpty
(
stringCellValue
)){
beanMap
.
put
(
importFieldMap
.
get
(
titleName
),
stringCellValue
);
}
}
catch
(
Exception
e
){
log
.
debug
(
"数据导入excel解析{}行{}字段为空"
,
cell
.
getColumnIndex
(),
titleName
);
}
}
}
System
.
out
.
println
(
beanMap
);
list
.
add
(
BeanUtil
.
mapToBean
(
beanMap
,
CharacterBasicInfo
.
class
,
true
,
CopyOptions
.
create
().
setIgnoreError
(
true
)));
}
//需要新增的数据列表
List
<
CharacterBasicInfo
>
saveList
=
new
ArrayList
<>();
//需要更新的数据列表
List
<
CharacterBasicInfo
>
updateList
=
new
ArrayList
<>();
for
(
CharacterBasicInfo
basicInfo
:
list
)
{
if
(
basicInfo
==
null
||
StringUtils
.
isEmpty
(
basicInfo
.
getName
())
||
StringUtils
.
isEmpty
(
basicInfo
.
getDepartment
())
||
StringUtils
.
isEmpty
(
basicInfo
.
getTypeId
())){
log
.
info
(
"数据为空,跳过"
);
continue
;
}
basicInfo
.
setCategory
(
category
);
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getBirthday
())){
basicInfo
.
setBirthday
(
basicInfo
.
getBirthday
().
replaceAll
(
"[./]"
,
"-"
));
}
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getTechnicalDate
())){
basicInfo
.
setTechnicalDate
(
basicInfo
.
getTechnicalDate
().
replaceAll
(
"[./]"
,
"-"
));
}
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getWorkDate
())){
basicInfo
.
setWorkDate
(
basicInfo
.
getWorkDate
().
replaceAll
(
"[./]"
,
"-"
));
}
//检查是否已有数据
CharacterBasicInfo
oldBasicInfo
=
null
;
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getUid
())){
oldBasicInfo
=
characterBasicInfoService
.
getBasicInfoByUid
(
basicInfo
.
getUid
());
}
else
{
oldBasicInfo
=
characterBasicInfoService
.
getByNameAndByDepartment
(
category
,
basicInfo
.
getTagId
(),
basicInfo
.
getName
(),
basicInfo
.
getDepartment
());
}
if
(
oldBasicInfo
!=
null
){
//合并两个对象
oldBasicInfo
.
setSex
(
basicInfo
.
getSex
());
oldBasicInfo
.
setBirthday
(
basicInfo
.
getBirthday
());
oldBasicInfo
.
setNativePlace
(
basicInfo
.
getNativePlace
());
oldBasicInfo
.
setSchool
(
basicInfo
.
getSchool
());
oldBasicInfo
.
setSchoolSpeciality
(
basicInfo
.
getSchoolSpeciality
());
oldBasicInfo
.
setEducation
(
basicInfo
.
getEducation
());
oldBasicInfo
.
setDepart
(
basicInfo
.
getDepart
());
oldBasicInfo
.
setDuty
(
basicInfo
.
getDuty
());
oldBasicInfo
.
setTakeOfficeTime
(
basicInfo
.
getTakeOfficeTime
());
oldBasicInfo
.
setTakeOfficeTimeEnd
(
basicInfo
.
getTakeOfficeTimeEnd
());
oldBasicInfo
.
setExpertType
(
basicInfo
.
getExpertType
());
oldBasicInfo
.
setResearchField
(
basicInfo
.
getResearchField
());
oldBasicInfo
.
setSpeciality
(
basicInfo
.
getSpeciality
());
oldBasicInfo
.
setTalentPlanning
(
basicInfo
.
getTalentPlanning
());
oldBasicInfo
.
setTechnicalTitles
(
basicInfo
.
getTechnicalTitles
());
oldBasicInfo
.
setTechnicalDate
(
basicInfo
.
getTechnicalDate
());
oldBasicInfo
.
setWorkDate
(
basicInfo
.
getWorkDate
());
oldBasicInfo
.
setUpdateTime
(
new
Date
());
updateList
.
add
(
oldBasicInfo
);
}
else
{
String
id
=
Long
.
toString
(
generatorIdService
.
getOrderId
());
basicInfo
.
setId
(
id
);
basicInfo
.
setCreateTime
(
new
Date
());
String
uid
=
generatorIdService
.
getIdNo
();
basicInfo
.
setUid
(
uid
);
basicInfo
.
setMainEntry
(
1
);
saveList
.
add
(
basicInfo
);
}
}
if
(!
saveList
.
isEmpty
()){
characterBasicInfoService
.
saveBatch
(
saveList
);
log
.
info
(
"新增{}条数据"
,
saveList
.
size
());
}
if
(!
updateList
.
isEmpty
()){
characterBasicInfoService
.
updateBatchById
(
updateList
);
log
.
info
(
"更新{}条数据"
,
updateList
.
size
());
responseEntity
=
characterBasicInfoService
.
exportExcel
(
list
,
importFieldMap
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
return
responseEntity
;
}
}
catch
(
Exception
e
)
{
log
.
info
(
"导入专家信息异常:{}"
,
e
.
getMessage
(),
e
);
}
finally
{
@GetMapping
(
"/exportExcelByIds"
)
public
ResponseEntity
<
byte
[]>
exportExcelByIds
(
@RequestParam
String
ids
,
@RequestParam
String
category
)
{
Map
<
String
,
String
>
importFieldMap
=
getImportFieldMap
(
category
);
ResponseEntity
<
byte
[]>
responseEntity
;
try
{
if
(
in
!=
null
)
{
in
.
close
();
}
responseEntity
=
characterBasicInfoService
.
exportExcelByIds
(
ids
,
importFieldMap
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
(
);
throw
new
RuntimeException
(
e
);
}
try
{
if
(
workbook
!=
null
)
{
workbook
.
close
();
return
responseEntity
;
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
private
Map
<
String
,
String
>
getImportFieldMap
(
String
category
)
{
Map
<
String
,
String
>
importFieldMap
;
switch
(
category
)
{
case
"1"
:
importFieldMap
=
importFieldMap1
;
break
;
case
"2"
:
importFieldMap
=
importFieldMap2
;
break
;
case
"3"
:
importFieldMap
=
importFieldMap3
;
break
;
default
:
throw
new
IllegalArgumentException
(
"无效的 category 值: "
+
category
);
}
return
importFieldMap
;
}
static
{
importFieldMap1
=
new
LinkedHashMap
<>();
importFieldMap1
.
put
(
"人物id"
,
"uid"
);
importFieldMap1
.
put
(
"姓名"
,
"name"
);
importFieldMap1
.
put
(
"性别"
,
"sex"
);
importFieldMap1
.
put
(
"出生年月"
,
"birthday"
);
importFieldMap1
.
put
(
"籍贯"
,
"nativePlace"
);
importFieldMap1
.
put
(
"毕业院校"
,
"school"
);
importFieldMap1
.
put
(
"毕业专业"
,
"schoolSpeciality"
);
importFieldMap1
.
put
(
"学历"
,
"education"
);
importFieldMap1
.
put
(
"单位名称"
,
"department"
);
importFieldMap1
.
put
(
"所在部门"
,
"depart"
);
importFieldMap1
.
put
(
"职务"
,
"duty"
);
importFieldMap1
.
put
(
"任职开始时间"
,
"takeOfficeTime"
);
importFieldMap1
.
put
(
"任职结束时间"
,
"takeOfficeTimeEnd"
);
importFieldMap1
.
put
(
"顶尖专家/领军专家"
,
"expertType"
);
importFieldMap1
.
put
(
"研究领域"
,
"researchField"
);
importFieldMap1
.
put
(
"专业方向"
,
"speciality"
);
importFieldMap1
.
put
(
"已入选的人才计划"
,
"talentPlanning"
);
importFieldMap1
.
put
(
"专业技术职称"
,
"technicalTitles"
);
importFieldMap1
.
put
(
"专业技术职称取得时间"
,
"technicalDate"
);
importFieldMap1
.
put
(
"参加工作时间"
,
"workDate"
);
importFieldMap1
.
put
(
"分类"
,
"typeId"
);
}
static
{
importFieldMap2
=
new
LinkedHashMap
<>();
importFieldMap2
.
put
(
"人物id"
,
"uid"
);
importFieldMap2
.
put
(
"姓名"
,
"name"
);
importFieldMap2
.
put
(
"性别"
,
"sex"
);
importFieldMap2
.
put
(
"出生年月"
,
"birthday"
);
importFieldMap2
.
put
(
"籍贯"
,
"nativePlace"
);
importFieldMap2
.
put
(
"毕业院校"
,
"school"
);
importFieldMap2
.
put
(
"毕业专业"
,
"schoolSpeciality"
);
importFieldMap2
.
put
(
"学历"
,
"education"
);
importFieldMap2
.
put
(
"单位名称"
,
"department"
);
importFieldMap2
.
put
(
"所在部门"
,
"depart"
);
importFieldMap2
.
put
(
"职务"
,
"duty"
);
importFieldMap2
.
put
(
"任职开始时间"
,
"takeOfficeTime"
);
importFieldMap2
.
put
(
"任职结束时间"
,
"takeOfficeTimeEnd"
);
importFieldMap2
.
put
(
"顶尖专家/领军专家"
,
"expertType"
);
importFieldMap2
.
put
(
"研究领域"
,
"researchField"
);
importFieldMap2
.
put
(
"专业方向"
,
"speciality"
);
importFieldMap2
.
put
(
"已入选的人才计划"
,
"talentPlanning"
);
importFieldMap2
.
put
(
"专业技术职称"
,
"technicalTitles"
);
importFieldMap2
.
put
(
"专业技术职称取得时间"
,
"technicalDate"
);
importFieldMap2
.
put
(
"参加工作时间"
,
"workDate"
);
importFieldMap2
.
put
(
"分类"
,
"typeId"
);
}
static
{
importFieldMap
=
new
HashMap
<>();
importFieldMap
.
put
(
"人物id"
,
"uid"
);
importFieldMap
.
put
(
"姓名"
,
"name"
);
importFieldMap
.
put
(
"性别"
,
"sex"
);
importFieldMap
.
put
(
"出生年月"
,
"birthday"
);
importFieldMap
.
put
(
"籍贯"
,
"nativePlace"
);
importFieldMap
.
put
(
"毕业院校"
,
"school"
);
importFieldMap
.
put
(
"毕业专业"
,
"schoolSpeciality"
);
importFieldMap
.
put
(
"学历"
,
"education"
);
importFieldMap
.
put
(
"单位名称"
,
"department"
);
importFieldMap
.
put
(
"所在部门"
,
"depart"
);
importFieldMap
.
put
(
"职务"
,
"duty"
);
importFieldMap
.
put
(
"任职开始时间"
,
"takeOfficeTime"
);
importFieldMap
.
put
(
"任职结束时间"
,
"takeOfficeTimeEnd"
);
importFieldMap
.
put
(
"顶尖专家/领军专家"
,
"expertType"
);
importFieldMap
.
put
(
"研究领域"
,
"researchField"
);
importFieldMap
.
put
(
"专业方向"
,
"speciality"
);
importFieldMap
.
put
(
"已入选的人才计划"
,
"talentPlanning"
);
importFieldMap
.
put
(
"专业技术职称"
,
"technicalTitles"
);
importFieldMap
.
put
(
"专业技术职称取得时间"
,
"technicalDate"
);
importFieldMap
.
put
(
"参加工作时间"
,
"workDate"
);
importFieldMap
.
put
(
"分类"
,
"typeId"
);
importFieldMap3
=
new
LinkedHashMap
<>();
importFieldMap3
.
put
(
"人物id"
,
"uid"
);
importFieldMap3
.
put
(
"姓名"
,
"name"
);
importFieldMap3
.
put
(
"性别"
,
"sex"
);
importFieldMap3
.
put
(
"出生年月"
,
"birthday"
);
importFieldMap3
.
put
(
"籍贯"
,
"nativePlace"
);
importFieldMap3
.
put
(
"毕业专业"
,
"schoolSpeciality"
);
importFieldMap3
.
put
(
"学历"
,
"education"
);
importFieldMap3
.
put
(
"单位名称"
,
"department"
);
importFieldMap3
.
put
(
"所在部门"
,
"depart"
);
importFieldMap3
.
put
(
"职务"
,
"duty"
);
importFieldMap3
.
put
(
"任职开始时间"
,
"takeOfficeTime"
);
importFieldMap3
.
put
(
"任职结束时间"
,
"takeOfficeTimeEnd"
);
importFieldMap3
.
put
(
"顶尖专家/领军专家"
,
"expertType"
);
importFieldMap3
.
put
(
"研究领域"
,
"researchField"
);
importFieldMap3
.
put
(
"已入选的人才计划"
,
"talentPlanning"
);
importFieldMap3
.
put
(
"专业技术职称"
,
"technicalTitles"
);
importFieldMap3
.
put
(
"专业技术职称取得时间"
,
"technicalDate"
);
importFieldMap3
.
put
(
"参加工作时间"
,
"workDate"
);
importFieldMap3
.
put
(
"分类"
,
"typeId"
);
}
}
src/main/java/com/zzsn/leaderbase/service/CharacterBasicInfoService.java
浏览文件 @
f56fb9ae
...
...
@@ -6,7 +6,9 @@ import com.zzsn.leaderbase.entity.CharacterBasicInfo;
import
com.zzsn.leaderbase.vo.BasicInfoListVo
;
import
com.zzsn.leaderbase.vo.CharacterVo
;
import
com.zzsn.leaderbase.vo.Result
;
import
org.springframework.http.ResponseEntity
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -59,4 +61,10 @@ public interface CharacterBasicInfoService extends IService<CharacterBasicInfo>
CharacterBasicInfo
getBasicInfoByUid
(
String
uid
);
CharacterBasicInfo
getByNameAndByDepartment
(
String
category
,
String
typeId
,
String
name
,
String
department
);
String
importExcel
(
String
absolutePath
,
String
category
,
Map
<
String
,
String
>
importFieldMap
);
ResponseEntity
<
byte
[]>
exportExcel
(
List
<
CharacterBasicInfo
>
list
,
Map
<
String
,
String
>
importFieldMap
)
throws
IOException
;
ResponseEntity
<
byte
[]>
exportExcelByIds
(
String
ids
,
Map
<
String
,
String
>
importFieldMap
)
throws
IOException
;
}
src/main/java/com/zzsn/leaderbase/service/impl/CharacterBasicInfoServiceImpl.java
浏览文件 @
f56fb9ae
package
com
.
zzsn
.
leaderbase
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.copier.CopyOptions
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
...
...
@@ -11,13 +13,30 @@ import com.zzsn.leaderbase.mapper.CharacterBasicInfoMapper;
import
com.zzsn.leaderbase.service.CharacterBasicInfoService
;
import
com.zzsn.leaderbase.service.CharacterTagService
;
import
com.zzsn.leaderbase.service.IGeneratorIdService
;
import
com.zzsn.leaderbase.util.ExcelUtil
;
import
com.zzsn.leaderbase.vo.BasicInfoListVo
;
import
com.zzsn.leaderbase.vo.CharacterVo
;
import
com.zzsn.leaderbase.vo.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.stereotype.Service
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.URLEncoder
;
import
java.nio.file.Files
;
import
java.nio.file.Paths
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -26,6 +45,7 @@ import java.util.stream.Collectors;
* @Date: 2024/2/29 10:35
* @Content: 人物基本信息
*/
@Slf4j
@Service
public
class
CharacterBasicInfoServiceImpl
extends
ServiceImpl
<
CharacterBasicInfoMapper
,
CharacterBasicInfo
>
implements
CharacterBasicInfoService
{
...
...
@@ -270,4 +290,231 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
}
return
null
;
}
@Override
public
String
importExcel
(
String
filePath
,
String
category
,
Map
<
String
,
String
>
importFieldMap
)
{
List
<
String
>
sheetNameList
=
new
ArrayList
<>();
Workbook
workbook
=
null
;
InputStream
in
=
null
;
String
result
=
""
;
try
{
// 获取输入流
in
=
Files
.
newInputStream
(
Paths
.
get
(
filePath
));
// 判断excel版本
if
(
ExcelUtil
.
judegExcelEdition
(
filePath
))
{
workbook
=
new
XSSFWorkbook
(
in
);
}
else
{
workbook
=
new
HSSFWorkbook
(
in
);
}
Iterator
<
Sheet
>
it
=
workbook
.
sheetIterator
();
while
(
it
.
hasNext
())
{
Sheet
sheetTmp
=
it
.
next
();
String
sheetName
=
sheetTmp
.
getSheetName
();
sheetNameList
.
add
(
sheetName
);
}
for
(
String
sheetName
:
sheetNameList
)
{
Sheet
sheet
=
workbook
.
getSheet
(
sheetName
);
//获取标题行
Row
titleRow
=
sheet
.
getRow
(
0
);
List
<
CharacterBasicInfo
>
list
=
new
ArrayList
<>();
for
(
int
i
=
1
;
i
<
sheet
.
getPhysicalNumberOfRows
();
i
++)
{
// 循环获取工作表的每一行
Row
sheetRow
=
sheet
.
getRow
(
i
);
if
(
sheetRow
==
null
)
{
continue
;
}
Map
<
String
,
Object
>
beanMap
=
new
HashMap
<>();
for
(
Cell
cell
:
titleRow
)
{
String
titleName
=
cell
.
getStringCellValue
();
if
(
importFieldMap
.
containsKey
(
titleName
))
{
try
{
String
stringCellValue
=
sheetRow
.
getCell
(
cell
.
getColumnIndex
()).
getStringCellValue
();
if
(
StringUtils
.
isNotEmpty
(
stringCellValue
))
{
beanMap
.
put
(
importFieldMap
.
get
(
titleName
),
stringCellValue
);
}
}
catch
(
Exception
e
)
{
log
.
debug
(
"数据导入excel解析{}行{}字段为空"
,
cell
.
getColumnIndex
(),
titleName
);
}
}
}
System
.
out
.
println
(
beanMap
);
list
.
add
(
BeanUtil
.
mapToBean
(
beanMap
,
CharacterBasicInfo
.
class
,
true
,
CopyOptions
.
create
().
setIgnoreError
(
true
)));
}
//需要新增的数据列表
List
<
CharacterBasicInfo
>
saveList
=
new
ArrayList
<>();
//需要更新的数据列表
List
<
CharacterBasicInfo
>
updateList
=
new
ArrayList
<>();
for
(
CharacterBasicInfo
basicInfo
:
list
)
{
if
(
basicInfo
==
null
||
StringUtils
.
isEmpty
(
basicInfo
.
getName
())
||
StringUtils
.
isEmpty
(
basicInfo
.
getDepartment
())
||
StringUtils
.
isEmpty
(
basicInfo
.
getTypeId
()))
{
log
.
info
(
"数据为空,跳过"
);
continue
;
}
basicInfo
.
setCategory
(
category
);
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getBirthday
()))
{
basicInfo
.
setBirthday
(
basicInfo
.
getBirthday
().
replaceAll
(
"[./]"
,
"-"
));
}
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getTechnicalDate
()))
{
basicInfo
.
setTechnicalDate
(
basicInfo
.
getTechnicalDate
().
replaceAll
(
"[./]"
,
"-"
));
}
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getWorkDate
()))
{
basicInfo
.
setWorkDate
(
basicInfo
.
getWorkDate
().
replaceAll
(
"[./]"
,
"-"
));
}
//检查是否已有数据
CharacterBasicInfo
oldBasicInfo
=
null
;
if
(
StringUtils
.
isNotEmpty
(
basicInfo
.
getUid
()))
{
oldBasicInfo
=
getBasicInfoByUid
(
basicInfo
.
getUid
());
}
else
{
oldBasicInfo
=
getByNameAndByDepartment
(
category
,
basicInfo
.
getTypeId
(),
basicInfo
.
getName
(),
basicInfo
.
getDepartment
());
}
if
(
oldBasicInfo
!=
null
)
{
//合并两个对象
oldBasicInfo
.
setSex
(
basicInfo
.
getSex
());
oldBasicInfo
.
setBirthday
(
basicInfo
.
getBirthday
());
oldBasicInfo
.
setNativePlace
(
basicInfo
.
getNativePlace
());
oldBasicInfo
.
setSchool
(
basicInfo
.
getSchool
());
oldBasicInfo
.
setSchoolSpeciality
(
basicInfo
.
getSchoolSpeciality
());
oldBasicInfo
.
setEducation
(
basicInfo
.
getEducation
());
oldBasicInfo
.
setDepart
(
basicInfo
.
getDepart
());
oldBasicInfo
.
setDuty
(
basicInfo
.
getDuty
());
oldBasicInfo
.
setTakeOfficeTime
(
basicInfo
.
getTakeOfficeTime
());
oldBasicInfo
.
setTakeOfficeTimeEnd
(
basicInfo
.
getTakeOfficeTimeEnd
());
oldBasicInfo
.
setExpertType
(
basicInfo
.
getExpertType
());
oldBasicInfo
.
setResearchField
(
basicInfo
.
getResearchField
());
oldBasicInfo
.
setSpeciality
(
basicInfo
.
getSpeciality
());
oldBasicInfo
.
setTalentPlanning
(
basicInfo
.
getTalentPlanning
());
oldBasicInfo
.
setTechnicalTitles
(
basicInfo
.
getTechnicalTitles
());
oldBasicInfo
.
setTechnicalDate
(
basicInfo
.
getTechnicalDate
());
oldBasicInfo
.
setWorkDate
(
basicInfo
.
getWorkDate
());
oldBasicInfo
.
setUpdateTime
(
new
Date
());
updateList
.
add
(
oldBasicInfo
);
}
else
{
String
id
=
Long
.
toString
(
generatorIdService
.
getOrderId
());
basicInfo
.
setId
(
id
);
basicInfo
.
setCreateTime
(
new
Date
());
String
uid
=
generatorIdService
.
getIdNo
();
basicInfo
.
setUid
(
uid
);
basicInfo
.
setMainEntry
(
1
);
saveList
.
add
(
basicInfo
);
}
}
if
(!
saveList
.
isEmpty
())
{
saveBatch
(
saveList
);
log
.
info
(
"新增{}条数据"
,
saveList
.
size
());
result
=
"新增"
+
saveList
.
size
()
+
"条数据"
;
}
if
(!
updateList
.
isEmpty
())
{
updateBatchById
(
updateList
);
log
.
info
(
"更新{}条数据"
,
updateList
.
size
());
if
(!
""
.
equals
(
result
))
{
result
+=
";"
;
}
result
+=
"更新"
+
updateList
.
size
()
+
"条数据"
;
}
}
}
catch
(
Exception
e
)
{
log
.
info
(
"导入专家信息异常:{}"
,
e
.
getMessage
(),
e
);
result
=
"导入专家信息异常:"
+
e
.
getMessage
();
}
finally
{
try
{
if
(
in
!=
null
)
{
in
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
try
{
if
(
workbook
!=
null
)
{
workbook
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
return
result
;
}
@Override
public
ResponseEntity
<
byte
[]>
exportExcel
(
List
<
CharacterBasicInfo
>
characterBasicInfos
,
Map
<
String
,
String
>
importFieldMap
)
throws
IOException
{
return
exportExcelByList
(
characterBasicInfos
,
importFieldMap
);
}
@Override
public
ResponseEntity
<
byte
[]>
exportExcelByIds
(
String
ids
,
Map
<
String
,
String
>
importFieldMap
)
throws
IOException
{
List
<
CharacterBasicInfo
>
characterBasicInfos
=
listByIds
(
Arrays
.
asList
(
ids
.
split
(
","
)));
return
exportExcelByList
(
characterBasicInfos
,
importFieldMap
);
}
private
ResponseEntity
<
byte
[]>
exportExcelByList
(
List
<
CharacterBasicInfo
>
characterBasicInfos
,
Map
<
String
,
String
>
importFieldMap
)
throws
IOException
{
// 创建Excel工作簿
Workbook
workbook
=
new
XSSFWorkbook
();
Sheet
sheet
=
workbook
.
createSheet
(
"人物信息"
);
// 填充数据到Excel工作表
Row
titlerow
=
sheet
.
createRow
(
0
);
// 创建字体样式
Font
headerFont
=
workbook
.
createFont
();
headerFont
.
setFontName
(
"Arial"
);
headerFont
.
setFontHeightInPoints
((
short
)
12
);
headerFont
.
setBold
(
true
);
// 创建单元格样式并应用字体
CellStyle
titleCellStyle
=
workbook
.
createCellStyle
();
titleCellStyle
.
setFont
(
headerFont
);
titleCellStyle
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
titleCellStyle
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
titleCellStyle
.
setFillForegroundColor
(
IndexedColors
.
BRIGHT_GREEN
.
getIndex
());
titleCellStyle
.
setFillPattern
(
FillPatternType
.
SOLID_FOREGROUND
);
AtomicInteger
colNum
=
new
AtomicInteger
();
importFieldMap
.
forEach
((
key
,
value
)
->
{
int
andIncrement
=
colNum
.
getAndIncrement
();
Cell
cell
=
titlerow
.
createCell
(
andIncrement
);
cell
.
setCellValue
(
key
);
cell
.
setCellStyle
(
titleCellStyle
);
sheet
.
setColumnWidth
(
andIncrement
,
15
*
256
);
});
int
rowNum
=
1
;
//数据填充到Excel工作表
for
(
CharacterBasicInfo
characterBasicInfo
:
characterBasicInfos
)
{
Row
row
=
sheet
.
createRow
(
rowNum
++);
//总列数
int
columns
=
importFieldMap
.
size
();
for
(
int
i
=
0
;
i
<
columns
;
i
++)
{
Cell
cell
=
row
.
createCell
(
i
);
// 列名获取
String
columnName
=
importFieldMap
.
get
(
titlerow
.
getCell
(
i
).
getStringCellValue
());
// 对象转化为map
Map
<
String
,
Object
>
enterpriseMap
=
BeanUtil
.
beanToMap
(
characterBasicInfo
);
if
(
columnName
!=
null
)
{
Object
value
=
enterpriseMap
.
get
(
columnName
);
if
(
value
!=
null
)
{
if
(
value
instanceof
String
)
{
cell
.
setCellValue
((
String
)
value
);
}
else
if
(
value
instanceof
Number
)
{
cell
.
setCellValue
(((
Number
)
value
).
doubleValue
());
}
else
if
(
value
instanceof
Date
)
{
cell
.
setCellValue
((
Date
)
value
);
}
else
{
// 处理其他类型的值,例如布尔值等
cell
.
setCellValue
(
value
.
toString
());
}
}
else
{
// 如果值为 null,可以设置为空字符串或其他默认值
cell
.
setCellValue
(
""
);
}
}
else
{
// 如果 columnName 不存在于 importFieldMap 中,可以设置为空字符串或其他默认值
cell
.
setCellValue
(
""
);
}
}
}
// 将Excel工作簿写入字节数组输出流
ByteArrayOutputStream
byteArrayOutputStream
=
new
ByteArrayOutputStream
();
workbook
.
write
(
byteArrayOutputStream
);
// 准备HTTP响应头
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
parseMediaType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
));
// 对文件名进行编码
String
encodedFileName
=
URLEncoder
.
encode
(
"人物信息.xlsx"
,
"utf-8"
);
headers
.
add
(
"Content-Disposition"
,
"attachment; filename="
+
encodedFileName
);
// 返回Excel文件作为字节数组响应
return
new
ResponseEntity
<>(
byteArrayOutputStream
.
toByteArray
(),
headers
,
HttpStatus
.
OK
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论