Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit efc1b607
由
LN
编写于
2023-02-22 13:34:43 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
工单增加xlsx格式的文件导入
1 个父辈
615bb7f2
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
188 行增加
和
6 行删除
src/main/java/com/neotel/smfcore/common/excel/ExcelReader.java
src/main/java/com/neotel/smfcore/common/excel/NoModelDataListener.java
src/main/java/com/neotel/smfcore/core/barcode/utils/CodeResolve.java
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/common/excel/ExcelReader.java
0 → 100644
查看文件 @
efc1b60
package
com
.
neotel
.
smfcore
.
common
.
excel
;
import
com.alibaba.excel.EasyExcel
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
public
class
ExcelReader
{
public
static
List
<
Map
<
Integer
,
String
>>
noModelRead
(
String
fileName
)
{
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
NoModelDataListener
listener
=
new
NoModelDataListener
();
EasyExcel
.
read
(
fileName
,
listener
).
sheet
().
doRead
();
List
<
Map
<
Integer
,
String
>>
data
=
listener
.
getData
();
Map
<
Integer
,
String
>
headerMap
=
listener
.
getHeaderMap
();
if
(
headerMap
!=
null
)
{
if
(
data
==
null
)
{
data
=
new
ArrayList
<>();
}
data
.
add
(
0
,
headerMap
);
}
return
data
;
}
// public static List<OrderLineItem> ReadOrder(String fileName){
// ExcelReaderBuilder workBook = EasyExcel.read
// (fileName, OrderLineItem.class, new OrderReaderListener());
//
// // 封装工作表
// ExcelReaderSheetBuilder sheet1 = workBook.sheet();
// // 读取
// sheet1.doRead();
//
// //写入数据库
// List<OrderLineItem> orderLineItems = OrderReaderListener.getStudentList();
// return orderLineItems;
//
// }
}
src/main/java/com/neotel/smfcore/common/excel/NoModelDataListener.java
0 → 100644
查看文件 @
efc1b60
package
com
.
neotel
.
smfcore
.
common
.
excel
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
com.alibaba.excel.util.ConverterUtils
;
import
com.alibaba.fastjson.JSON
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
public
class
NoModelDataListener
extends
AnalysisEventListener
<
Map
<
Integer
,
String
>>
{
private
List
<
Map
<
Integer
,
String
>>
cachedDataList
=
new
ArrayList
<>();
private
Map
<
Integer
,
String
>
headerMap
=
new
HashMap
<>();
@Override
public
void
invoke
(
Map
<
Integer
,
String
>
data
,
AnalysisContext
context
)
{
log
.
debug
(
"解析到一条数据:{}"
,
JSON
.
toJSONString
(
data
));
cachedDataList
.
add
(
data
);
}
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
context
)
{
log
.
info
(
"所有数据解析完成,共"
+
cachedDataList
.
size
()+
"条数据!"
);
}
public
List
<
Map
<
Integer
,
String
>>
getData
(){
return
cachedDataList
;
}
public
Map
<
Integer
,
String
>
getHeaderMap
(){
return
headerMap
;
}
@Override
public
void
invokeHead
(
Map
<
Integer
,
ReadCellData
<?>>
headMap
,
AnalysisContext
context
)
{
log
.
debug
(
"解析到一条头数据:{}"
,
JSON
.
toJSONString
(
headMap
));
headerMap
=
ConverterUtils
.
convertToStringMap
(
headMap
,
context
);
// 如果想转成成 Map<Integer,String>
// 方案1: 不要implements ReadListener 而是 extends AnalysisEventListener
// 方案2: 调用 ConverterUtils.convertToStringMap(headMap, context) 自动会转换
}
}
src/main/java/com/neotel/smfcore/core/barcode/utils/CodeResolve.java
查看文件 @
efc1b60
...
...
@@ -161,6 +161,11 @@ public class CodeResolve {
}
}
}
if
(
barcodeFromRule
.
getExpireDate
()!=
null
&&
barcode
.
getExpireDate
()==
null
){
barcode
.
setExpireDate
(
barcodeFromRule
.
getExpireDate
());
log
.
info
(
"重新设置"
+
codeBeanFromRule
.
getCodeStr
()+
"的过期日期"
);
needUpdate
=
true
;
}
if
(
needUpdate
){
try
{
...
...
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
查看文件 @
efc1b60
...
...
@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.order.listener;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.csv.CsvReader
;
import
com.neotel.smfcore.common.excel.ExcelReader
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
...
...
@@ -42,12 +43,16 @@ public class DefaultOrderFileListener implements IOrderFileListener {
// if(!fileName.endsWith(".process") && fileName.endsWith("_result.txt")){
//
// }
if
(
isFileType
(
fileName
,
"csv"
)){
if
(
isFileType
(
fileName
,
"csv"
)
||
isFileType
(
fileName
,
"xlsx"
)
){
LiteOrder
fileNameOrder
=
liteOrderManager
.
findBySource
(
fileName
);
if
(
fileNameOrder
==
null
){
try
{
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
readCsvFile
(
fileName
,
orderFile
.
getAbsolutePath
());
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
null
;
if
(
isFileType
(
fileName
,
"csv"
))
{
itemMap
=
readCsvFile
(
fileName
,
orderFile
.
getAbsolutePath
());
}
else
if
(
isFileType
(
fileName
,
"xlsx"
)){
itemMap
=
readExcelFile
(
fileName
,
orderFile
.
getAbsolutePath
());
}
if
(
itemMap
!=
null
&&
itemMap
.
size
()
>
0
)
{
for
(
String
so:
itemMap
.
keySet
())
{
...
...
@@ -178,6 +183,89 @@ public class DefaultOrderFileListener implements IOrderFileListener {
}
public
Map
<
String
,
List
<
LiteOrderItem
>>
readExcelFile
(
String
fileName
,
String
fileURL
)
{
try
{
fileName
=
fileName
.
replace
(
".xlsx"
,
""
);
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
new
HashMap
<>();
List
<
Map
<
Integer
,
String
>>
data
=
ExcelReader
.
noModelRead
(
fileURL
);
if
(
data
!=
null
&&
data
.
size
()>=
2
){
Map
<
Integer
,
String
>
headerData
=
data
.
get
(
0
);
Map
<
String
,
Integer
>
headerMap
=
new
HashMap
<>();
for
(
Integer
key
:
headerData
.
keySet
())
{
String
v
=
headerData
.
get
(
key
);
headerMap
.
put
(
v
,
key
);
}
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
int
partNumberIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getPn
(),-
1
);
int
qtyIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getQty
(),-
1
);
int
feederIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getFeeder
(),-
1
);
int
riIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getRi
(),-
1
);
int
soIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getSo
(),-
1
);
for
(
int
i
=
1
;
i
<
data
.
size
();
i
++){
Map
<
Integer
,
String
>
lineValues
=
data
.
get
(
i
);
String
partNumber
=
lineValues
.
get
(
partNumberIndex
);
String
ri
=
""
;
if
(
riIndex
!=-
1
){
ri
=
lineValues
.
get
(
riIndex
);
}
if
(
partNumber
.
isEmpty
()&&
ri
.
isEmpty
())
{
log
.
warn
(
"行[partNumber="
+
partNumber
+
"]中PN和RI都 为空,此行忽略"
);
}
else
{
int
num
=
1
;
if
(
qtyIndex
!=
-
1
)
{
String
numStr
=
lineValues
.
get
(
qtyIndex
)
;
if
(
Strings
.
isNotBlank
(
numStr
))
{
try
{
num
=
Integer
.
valueOf
(
numStr
);
}
catch
(
Exception
e
)
{
log
.
error
(
partNumber
+
"的数量:"
+
numStr
+
" 不是数字,使用1"
);
}
}
}
String
feeder
=
""
;
if
(
feederIndex
!=
-
1
)
{
feeder
=
lineValues
.
get
(
feederIndex
);
}
String
so
=
fileName
;
if
(
soIndex
!=-
1
){
so
=
lineValues
.
get
(
soIndex
);
}
if
(!
ObjectUtil
.
isNotEmpty
(
so
)){
so
=
fileName
;
}
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setPn
(
partNumber
);
if
(
partNumber
.
isEmpty
()){
item
.
setNeedReelCount
(
1
);
}
item
.
setNeedNum
(
num
);
item
.
setFeederInfo
(
feeder
);
item
.
setRi
(
ri
);
if
(!
itemMap
.
containsKey
(
so
)){
itemMap
.
put
(
so
,
new
ArrayList
<
LiteOrderItem
>());
}
itemMap
.
get
(
so
).
add
(
item
);
}
}
}
return
itemMap
;
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析上传的工单出错:"
+
ex
.
toString
());
}
finally
{
}
return
null
;
}
protected
boolean
isFileType
(
String
smbFile
,
String
type
){
//判断是否是有效的工单文件
if
(
smbFile
.
toLowerCase
().
endsWith
(
type
)){
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
efc1b60
...
...
@@ -129,11 +129,12 @@ public class OrderController {
@AnonymousAccess
public
ResultBean
updateAvatar
(
@RequestParam
MultipartFile
orderFile
)
{
String
image
=
"csv"
;
String
csv
=
"csv"
;
String
excel
=
"xlsx"
;
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
String
fileName
=
FileUtil
.
getFileNameNoEx
(
orderFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
)
)
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
if
(
fileType
!=
null
&&
(!
csv
.
contains
(
fileType
))&&(!
excel
.
contains
(
fileType
))
)
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
csv
+
","
+
excel
});
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论