Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jilinzhongdianrenqun
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
吴超
jilinzhongdianrenqun
Commits
dbbd5422
Commit
dbbd5422
authored
Dec 22, 2025
by
wangchunyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
办公用品导入
parent
76ffaf9f
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
192 行增加
和
0 行删除
+192
-0
src/main/java/com/scpyun/platform/jilinsscgsdp/bean/entity/MaterialImp.java
+43
-0
src/main/java/com/scpyun/platform/jilinsscgsdp/service/impl/KeyDmMaterialServiceImpl.java
+45
-0
src/main/java/com/scpyun/platform/jilinsscgsdp/utils/MaterialFileListener.java
+104
-0
没有找到文件。
src/main/java/com/scpyun/platform/jilinsscgsdp/bean/entity/MaterialImp.java
0 → 100644
View file @
dbbd5422
package
com
.
scpyun
.
platform
.
jilinsscgsdp
.
bean
.
entity
;
public
class
MaterialImp
{
private
String
category_Code
;
private
String
category_Name
;
private
String
material_code
;
private
String
material_name
;
private
String
material_spec
;
private
String
unit
;
private
Double
unit_price
;
private
String
storage_location
;
private
Double
min_stock
;
private
Double
max_stock
;
private
Integer
can_borrow
;
private
String
material_desc
;
public
String
getCategory_Code
()
{
return
category_Code
;
}
public
void
setCategory_Code
(
String
category_Code
)
{
this
.
category_Code
=
category_Code
;
}
public
String
getCategory_Name
()
{
return
category_Name
;
}
public
void
setCategory_Name
(
String
category_Name
)
{
this
.
category_Name
=
category_Name
;
}
public
String
getMaterial_code
()
{
return
material_code
;
}
public
void
setMaterial_code
(
String
material_code
)
{
this
.
material_code
=
material_code
;
}
public
String
getMaterial_name
()
{
return
material_name
;
}
public
void
setMaterial_name
(
String
material_name
)
{
this
.
material_name
=
material_name
;
}
public
String
getMaterial_spec
()
{
return
material_spec
;
}
public
void
setMaterial_spec
(
String
material_spec
)
{
this
.
material_spec
=
material_spec
;
}
public
String
getUnit
()
{
return
unit
;
}
public
void
setUnit
(
String
unit
)
{
this
.
unit
=
unit
;
}
public
Double
getUnit_price
()
{
return
unit_price
;
}
public
void
setUnit_price
(
Double
unit_price
)
{
this
.
unit_price
=
unit_price
;
}
public
String
getStorage_location
()
{
return
storage_location
;
}
public
void
setStorage_location
(
String
storage_location
)
{
this
.
storage_location
=
storage_location
;
}
public
Double
getMin_stock
()
{
return
min_stock
;
}
public
void
setMin_stock
(
Double
min_stock
)
{
this
.
min_stock
=
min_stock
;
}
public
Double
getMax_stock
()
{
return
max_stock
;
}
public
void
setMax_stock
(
Double
max_stock
)
{
this
.
max_stock
=
max_stock
;
}
public
Integer
getCan_borrow
()
{
return
can_borrow
;
}
public
void
setCan_borrow
(
Integer
can_borrow
)
{
this
.
can_borrow
=
can_borrow
;
}
public
String
getMaterial_desc
()
{
return
material_desc
;
}
public
void
setMaterial_desc
(
String
material_desc
)
{
this
.
material_desc
=
material_desc
;
}
}
src/main/java/com/scpyun/platform/jilinsscgsdp/service/impl/KeyDmMaterialServiceImpl.java
View file @
dbbd5422
...
...
@@ -11,6 +11,18 @@ import org.springframework.stereotype.Service;
import
java.util.HashMap
;
import
java.util.Map
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.scpyun.platform.jilinsscgsdp.utils.MaterialFileListener
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.core.io.Resource
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.InputStream
;
import
java.net.URLEncoder
;
import
java.util.List
;
import
java.io.IOException
;
@Api
(
"办公用品管理"
)
@Service
(
"keyDmMaterial"
)
...
...
@@ -62,5 +74,38 @@ public class KeyDmMaterialServiceImpl {
}
return
SUCCESS
;
}
@ApiOperation
(
value
=
"导入物料"
,
desc
=
"解析 Excel 导入物料信息"
)
public
Map
<
String
,
Object
>
importExcel
(
Map
<
String
,
Object
>
map
,
MultipartFile
file
)
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
try
{
MaterialFileListener
listener
=
new
MaterialFileListener
(
commonService
,
namespace
,
map
);
EasyExcel
.
read
(
file
.
getInputStream
(),
com
.
scpyun
.
platform
.
jilinsscgsdp
.
bean
.
entity
.
MaterialImp
.
class
,
listener
).
sheet
().
headRowNumber
(
1
).
doRead
();
result
=
listener
.
getResult
();
}
catch
(
IOException
e
)
{
throw
new
CustomException
(
"导入失败"
);
}
return
result
;
}
@ApiOperation
(
value
=
"导入模板下载"
,
desc
=
"下载物料导入模板"
)
public
void
templateDownload
(
Map
<
String
,
Object
>
map
,
HttpServletResponse
response
)
{
response
.
setContentType
(
"application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
try
{
String
fileName
=
URLEncoder
.
encode
(
"物料导入模板"
,
"UTF-8"
).
replaceAll
(
"\\+"
,
"%20"
);
response
.
setHeader
(
"Content-disposition"
,
"attachment;filename*=utf-8''"
+
fileName
+
".xlsx"
);
response
.
setHeader
(
"filename"
,
fileName
+
".xlsx"
);
response
.
setHeader
(
"Access-Control-Expose-Headers"
,
"filename,Content-Disposition"
);
String
tpl
=
"keyMaterialImp.xlsx"
;
Resource
resource
=
new
ClassPathResource
(
tpl
);
InputStream
is
=
resource
.
getInputStream
();
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
response
.
getOutputStream
()).
withTemplate
(
is
).
excelType
(
ExcelTypeEnum
.
XLSX
).
build
();
excelWriter
.
finish
();
}
catch
(
Exception
e
)
{
throw
new
CustomException
(
"模板下载失败"
);
}
}
}
src/main/java/com/scpyun/platform/jilinsscgsdp/utils/MaterialFileListener.java
0 → 100644
View file @
dbbd5422
package
com
.
scpyun
.
platform
.
jilinsscgsdp
.
utils
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.scpyun.base.core.utils.UUIDUtil
;
import
com.scpyun.base.db.service.CommonService
;
import
com.scpyun.platform.jilinsscgsdp.bean.entity.MaterialImp
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.atomic.AtomicInteger
;
public
class
MaterialFileListener
extends
AnalysisEventListener
<
MaterialImp
>
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
MaterialFileListener
.
class
);
private
static
final
int
BATCH_COUNT
=
200
;
private
List
<
MaterialImp
>
cached
=
new
ArrayList
<>(
BATCH_COUNT
);
private
AtomicInteger
insertCount
=
new
AtomicInteger
(
0
);
private
AtomicInteger
updateCount
=
new
AtomicInteger
(
0
);
private
AtomicInteger
errorCount
=
new
AtomicInteger
(
0
);
private
CommonService
commonService
;
private
String
namespace
;
private
Map
<
String
,
Object
>
param
;
private
List
<
String
>
errInfo
=
new
ArrayList
<>();
public
MaterialFileListener
(
CommonService
commonService
,
String
namespace
,
Map
<
String
,
Object
>
param
)
{
this
.
commonService
=
commonService
;
this
.
namespace
=
namespace
;
this
.
param
=
param
;
}
@Override
public
void
invoke
(
MaterialImp
data
,
AnalysisContext
context
)
{
try
{
cached
.
add
(
data
);
if
(
cached
.
size
()
>=
BATCH_COUNT
)
{
saveBatch
();
cached
.
clear
();
}
}
catch
(
Exception
e
)
{
errorCount
.
incrementAndGet
();
log
.
error
(
"解析物料导入行异常"
,
e
);
}
}
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
context
)
{
if
(!
cached
.
isEmpty
())
{
saveBatch
();
cached
.
clear
();
}
}
private
void
saveBatch
()
{
for
(
MaterialImp
m
:
cached
)
{
try
{
Map
<
String
,
Object
>
q
=
new
HashMap
<>();
q
.
put
(
"material_code"
,
m
.
getMaterial_code
());
Map
<
String
,
Object
>
exists
=
commonService
.
getObject
(
namespace
+
"getByCode"
,
q
);
Map
<
String
,
Object
>
row
=
new
HashMap
<>();
row
.
put
(
"category_Code"
,
m
.
getCategory_Code
());
row
.
put
(
"category_Name"
,
m
.
getCategory_Name
());
row
.
put
(
"material_code"
,
m
.
getMaterial_code
());
row
.
put
(
"material_name"
,
m
.
getMaterial_name
());
row
.
put
(
"material_spec"
,
m
.
getMaterial_spec
());
row
.
put
(
"unit"
,
m
.
getUnit
());
row
.
put
(
"unit_price"
,
m
.
getUnit_price
());
row
.
put
(
"storage_location"
,
m
.
getStorage_location
());
row
.
put
(
"min_stock"
,
m
.
getMin_stock
());
row
.
put
(
"max_stock"
,
m
.
getMax_stock
());
row
.
put
(
"can_borrow"
,
m
.
getCan_borrow
());
row
.
put
(
"material_desc"
,
m
.
getMaterial_desc
());
row
.
put
(
"order_no"
,
0
);
if
(
exists
==
null
)
{
row
.
put
(
"id"
,
UUIDUtil
.
getUUID
());
commonService
.
insert
(
namespace
+
"insert"
,
row
);
insertCount
.
incrementAndGet
();
}
else
{
row
.
put
(
"id"
,
exists
.
get
(
"id"
));
commonService
.
update
(
namespace
+
"update"
,
row
);
updateCount
.
incrementAndGet
();
}
}
catch
(
Exception
ex
)
{
errorCount
.
incrementAndGet
();
errInfo
.
add
(
m
.
getMaterial_code
()
+
":"
+
ex
.
getMessage
());
}
}
}
public
Map
<
String
,
Object
>
getResult
()
{
Map
<
String
,
Object
>
r
=
new
HashMap
<>();
r
.
put
(
"insert"
,
insertCount
.
get
());
r
.
put
(
"update"
,
updateCount
.
get
());
r
.
put
(
"error"
,
errorCount
.
get
());
r
.
put
(
"errInfo"
,
String
.
join
(
","
,
errInfo
));
return
r
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论