Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a1a331a3
由
LN
编写于
2021-12-27 09:38:53 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
工单监控功能
1 个父辈
2046e95c
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
241 行增加
和
96 行删除
pom.xml
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/common/utils/SmbUtil.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/service/manager/ILiteOrderManager.java
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/core/order/util/OrderFileWatch.java
pom.xml
查看文件 @
a1a331a
...
@@ -205,6 +205,11 @@
...
@@ -205,6 +205,11 @@
<artifactId>
mina-core
</artifactId>
<artifactId>
mina-core
</artifactId>
<version>
2.1.0
</version>
<version>
2.1.0
</version>
</dependency>
</dependency>
<dependency>
<groupId>
org.samba.jcifs
</groupId>
<artifactId>
jcifs
</artifactId>
<version>
1.3.3
</version>
</dependency>
</dependencies>
</dependencies>
...
...
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
a1a331a
...
@@ -3,6 +3,7 @@ package com.neotel.smfcore.common.init;
...
@@ -3,6 +3,7 @@ package com.neotel.smfcore.common.init;
import
com.neotel.smfcore.common.utils.PermissionInitUtil
;
import
com.neotel.smfcore.common.utils.PermissionInitUtil
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.UserCodeUtil
;
import
com.neotel.smfcore.common.utils.UserCodeUtil
;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
...
@@ -49,6 +50,9 @@ public class DataInitManager {
...
@@ -49,6 +50,9 @@ public class DataInitManager {
@Autowired
@Autowired
PermissionInitUtil
annotationUtil
;
PermissionInitUtil
annotationUtil
;
@Autowired
OrderFileWatch
orderFileWatch
;
@PostConstruct
@PostConstruct
public
void
DataInit
()
{
public
void
DataInit
()
{
try
{
try
{
...
@@ -101,6 +105,8 @@ public class DataInitManager {
...
@@ -101,6 +105,8 @@ public class DataInitManager {
mainTimer
.
init
();
mainTimer
.
init
();
orderFileWatch
.
init
();
allPermissionSet
=
annotationUtil
.
initPermission
();
allPermissionSet
=
annotationUtil
.
initPermission
();
}
catch
(
Exception
exception
)
{
}
catch
(
Exception
exception
)
{
log
.
error
(
"初始化环境出错..."
+
exception
.
toString
());
log
.
error
(
"初始化环境出错..."
+
exception
.
toString
());
...
...
src/main/java/com/neotel/smfcore/common/utils/SmbUtil.java
0 → 100644
查看文件 @
a1a331a
package
com
.
neotel
.
smfcore
.
common
.
utils
;
import
com.google.common.collect.Lists
;
import
jcifs.Config
;
import
jcifs.smb.NtlmPasswordAuthentication
;
import
jcifs.smb.SmbFile
;
import
jcifs.smb.SmbFileInputStream
;
import
lombok.extern.slf4j.Slf4j
;
import
java.io.*
;
import
java.net.URI
;
import
java.util.List
;
@Slf4j
public
class
SmbUtil
{
/**
* 列出SMB服务器文件夹中的所有文件名称,如果目录不存在或者访问出错返回null
*/
public
static
List
<
String
>
smbFileNameList
(
String
smbDir
){
try
{
SmbFile
remoteFile
=
new
SmbFile
(
smbDir
);
if
(
remoteFile
.
exists
()
&&
remoteFile
.
isDirectory
())
{
String
[]
fileNames
=
remoteFile
.
list
();
return
Lists
.
newArrayList
(
fileNames
);
}
else
{
log
.
info
(
"SMB目录["
+
smbDir
+
"]不存在"
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"访问SMB目录["
+
smbDir
+
"]出错"
,
e
);
}
return
null
;
}
/**
* @Title smbGet
* @Param shareUrl 共享目录中的文件路径,如smb://132.20.2.33/CIMPublicTest/eg.txt
* @Param localDirectory 本地目录,如tempStore/smb
*/
public
static
boolean
smbGet
(
String
smbFile
,
String
localDirectory
){
InputStream
in
=
null
;
OutputStream
out
=
null
;
try
{
Config
.
registerSmbURLHandler
();
SmbFile
remoteFile
=
new
SmbFile
(
smbFile
);
if
(!
remoteFile
.
exists
())
{
log
.
info
(
"共享文件不存在"
);
return
false
;
}
// 有文件的时候再初始化输入输出流
log
.
info
(
"下载共享目录的文件 "
+
smbFile
+
" 到 "
+
localDirectory
);
String
fileName
=
remoteFile
.
getName
();
File
localFile
=
new
File
(
localDirectory
+
File
.
separator
+
fileName
);
File
fileParent
=
localFile
.
getParentFile
();
if
(
null
!=
fileParent
&&
!
fileParent
.
exists
())
{
fileParent
.
mkdirs
();
}
in
=
new
BufferedInputStream
(
new
SmbFileInputStream
(
remoteFile
));
out
=
new
BufferedOutputStream
(
new
FileOutputStream
(
localFile
));
byte
[]
buffer
=
new
byte
[
1024
];
while
(
in
.
read
(
buffer
)
!=
-
1
)
{
out
.
write
(
buffer
);
buffer
=
new
byte
[
1024
];
}
out
.
flush
();
//刷新缓冲区输出流
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"获取 SMB 文件出错"
,
e
);
}
finally
{
close
(
in
,
out
);
}
return
false
;
}
private
static
void
close
(
InputStream
in
,
OutputStream
out
){
try
{
if
(
in
!=
null
){
out
.
close
();
in
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
/**
*
* @Title smbPut
* @Description 向共享目录上传文件
* @Param shareDirectory 共享目录
* @Param localFilePath 本地目录中的文件路径
* @date 2019-01-10 20:16
*/
public
static
boolean
smbPut
(
String
shareDirectory
,
String
localFilePath
)
{
InputStream
in
=
null
;
OutputStream
out
=
null
;
String
domain
=
""
;
try
{
if
(!
shareDirectory
.
toLowerCase
().
startsWith
(
"smb"
)){
return
false
;
}
File
localFile
=
new
File
(
localFilePath
);
Config
.
registerSmbURLHandler
();
URI
uri
=
new
URI
(
shareDirectory
);
NtlmPasswordAuthentication
auth
=
new
NtlmPasswordAuthentication
(
uri
.
getUserInfo
());
String
smbFileName
=
uri
.
getScheme
()
+
"://"
+
uri
.
getHost
()
+
uri
.
getPath
()
+
localFile
.
getName
();
SmbFile
remoteFile
=
new
SmbFile
(
smbFileName
,
auth
);
log
.
info
(
"put "
+
localFilePath
+
" to "
+
remoteFile
.
getPath
());
in
=
new
BufferedInputStream
(
new
FileInputStream
(
localFile
));
out
=
new
BufferedOutputStream
(
remoteFile
.
getOutputStream
());
byte
[]
buffer
=
new
byte
[
1024
];
while
(
in
.
read
(
buffer
)
!=
-
1
)
{
out
.
write
(
buffer
);
buffer
=
new
byte
[
1024
];
}
out
.
flush
();
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"上传 SMB 文件出错"
,
e
);
}
finally
{
close
(
in
,
out
);
}
return
false
;
}
}
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
a1a331a
...
@@ -21,6 +21,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
...
@@ -21,6 +21,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
...
@@ -93,7 +94,7 @@ public class OrderController {
...
@@ -93,7 +94,7 @@ public class OrderController {
private
final
FileProperties
properties
;
private
final
FileProperties
properties
;
@Autowired
@Autowired
private
DataCache
dataCache
;
private
OrderFileWatch
orderFileWatch
;
// @ApiOperation("导出用户数据")
// @ApiOperation("导出用户数据")
// @GetMapping(value = "/download")
// @GetMapping(value = "/download")
...
@@ -115,7 +116,7 @@ public class OrderController {
...
@@ -115,7 +116,7 @@ public class OrderController {
}
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
handleOrderCsv
(
fileName
,
localFile
.
getAbsolutePath
());
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
orderFileWatch
.
readCsvFile
(
fileName
,
localFile
.
getAbsolutePath
());
if
(
itemMap
==
null
||
itemMap
.
size
()
<=
0
)
{
if
(
itemMap
==
null
||
itemMap
.
size
()
<=
0
)
{
throw
new
ValidateException
(
"smfcore.fileError"
,
"文件解析失败"
);
throw
new
ValidateException
(
"smfcore.fileError"
,
"文件解析失败"
);
...
@@ -128,20 +129,8 @@ public class OrderController {
...
@@ -128,20 +129,8 @@ public class OrderController {
if
(
liteOrderItems
.
size
()
<=
0
)
{
if
(
liteOrderItems
.
size
()
<=
0
)
{
continue
;
continue
;
}
}
int
type
=
2
;
for
(
LiteOrderItem
item
:
liteOrderItems
)
{
if
(!
StringUtils
.
isEmpty
(
item
.
getPn
())
&&
(
StringUtils
.
isEmpty
(
item
.
getRi
())))
{
type
=
1
;
break
;
}
}
LiteOrder
liteOrder
=
new
LiteOrder
(
so
,
liteOrderItems
);
LiteOrder
liteOrder
=
new
LiteOrder
(
so
,
liteOrderItems
);
liteOrder
.
setType
(
type
);
liteOrder
.
setSource
(
localFile
.
getName
());
liteOrder
.
setSource
(
localFile
.
getName
());
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
NEW
);
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
if
(
dbOrder
!=
null
)
{
if
(
dbOrder
!=
null
)
{
...
@@ -276,87 +265,7 @@ public class OrderController {
...
@@ -276,87 +265,7 @@ public class OrderController {
}
}
protected
Map
<
String
,
List
<
LiteOrderItem
>>
handleOrderCsv
(
String
fileName
,
String
fileURL
)
{
//
try
{
fileName
=
fileName
.
replace
(
".csv"
,
""
);
log
.
info
(
"开始更解析上传的工单"
);
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
new
HashMap
<>();
List
<
LiteOrderItem
>
items
=
Lists
.
newArrayList
();
OrderSetting
orderSetting
=
dataCache
.
getCache
(
Constants
.
CACHE_OrderSetting
);
if
(
orderSetting
==
null
)
{
orderSetting
=
new
OrderSetting
();
}
CsvReader
csvRead
=
CsvReader
.
newReader
(
fileURL
,
"PN"
,
orderSetting
.
getPn
());
int
partNumberIndex
=
csvRead
.
getIndex
(
"PN"
,
orderSetting
.
getPn
());
int
qtyIndex
=
csvRead
.
getIndex
(
"QTY"
,
orderSetting
.
getQty
());
int
feederIndex
=
csvRead
.
getIndex
(
"FEEDER"
,
orderSetting
.
getFeeder
());
int
riIndex
=
csvRead
.
getIndex
(
"RI"
,
orderSetting
.
getRi
());
int
soIndex
=
csvRead
.
getIndex
(
"SO"
,
orderSetting
.
getSo
());
int
row
=
1
;
int
newRowCount
=
0
;
int
updateRowCount
=
0
;
while
(
csvRead
.
readRecord
())
{
row
++;
String
[]
lineValues
=
csvRead
.
getValues
();
String
partNumber
=
lineValues
[
partNumberIndex
];
String
ri
=
""
;
if
(
riIndex
!=-
1
){
ri
=
lineValues
[
riIndex
];
}
if
(
partNumber
.
isEmpty
()&&
ri
.
isEmpty
())
{
log
.
warn
(
"行[partNumber="
+
partNumber
+
"]中PN和RI都 为空,此行忽略"
);
}
else
{
int
num
=
1
;
if
(
qtyIndex
!=
-
1
)
{
String
numStr
=
lineValues
[
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
[
feederIndex
];
}
String
so
=
fileName
;
if
(
soIndex
!=-
1
){
so
=
lineValues
[
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
);
items
.
add
(
item
);
}
}
return
itemMap
;
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析上传的工单出错:"
+
ex
.
toString
());
}
return
null
;
}
@ApiOperation
(
"工单详情"
)
@ApiOperation
(
"工单详情"
)
@GetMapping
(
"/detial"
)
@GetMapping
(
"/detial"
)
...
@@ -453,4 +362,83 @@ public class OrderController {
...
@@ -453,4 +362,83 @@ public class OrderController {
return
ResultBean
.
newOkResult
(
orderMapper
.
toDto
(
order
));
return
ResultBean
.
newOkResult
(
orderMapper
.
toDto
(
order
));
}
}
// protected Map<String ,List<LiteOrderItem>> handleOrderCsv(String fileName,String fileURL) {
// try {
// fileName=fileName.replace(".csv","");
// log.info("开始更解析上传的工单");
// Map<String ,List<LiteOrderItem>> itemMap=new HashMap<>();
// List<LiteOrderItem> items = Lists.newArrayList();
//
// OrderSetting orderSetting = dataCache.getOrderSetting();
//
// CsvReader csvRead = CsvReader.newReader(fileURL,"PN", orderSetting.getPn());
// int partNumberIndex = csvRead.getIndex("PN", orderSetting.getPn());
// int qtyIndex = csvRead.getIndex("QTY", orderSetting.getQty());
// int feederIndex = csvRead.getIndex("FEEDER", orderSetting.getFeeder());
// int riIndex = csvRead.getIndex("RI",orderSetting.getRi());
// int soIndex = csvRead.getIndex("SO", orderSetting.getSo());
//
// int row = 1;
// int newRowCount = 0;
// int updateRowCount = 0;
//
// while (csvRead.readRecord()) {
// row++;
// String[] lineValues = csvRead.getValues();
// String partNumber = lineValues[partNumberIndex];
// String ri="";
// if(riIndex!=-1){
// ri=lineValues[riIndex];
// }
// if (partNumber.isEmpty()&&ri.isEmpty()) {
// log.warn("行[partNumber=" + partNumber + "]中PN和RI都 为空,此行忽略");
// } else {
// int num = 1;
// if (qtyIndex != -1) {
// String numStr = lineValues[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[feederIndex];
// }
// String so=fileName;
//
// if(soIndex!=-1){
// so=lineValues[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);
//
//
// items.add(item);
// }
// }
// return itemMap;
// } catch (Exception ex) {
// log.error("解析上传的工单出错:" + ex.toString());
// }
// return null;
// }
}
}
src/main/java/com/neotel/smfcore/core/order/service/manager/ILiteOrderManager.java
查看文件 @
a1a331a
...
@@ -12,4 +12,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
...
@@ -12,4 +12,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
LiteOrder
createWithItems
(
LiteOrder
liteOrder
)
throws
ValidateException
;
LiteOrder
createWithItems
(
LiteOrder
liteOrder
)
throws
ValidateException
;
List
<
LiteOrder
>
findUnEndOrdersList
();
List
<
LiteOrder
>
findUnEndOrdersList
();
LiteOrder
findBySource
(
String
source
);
}
}
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
查看文件 @
a1a331a
...
@@ -94,6 +94,15 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
...
@@ -94,6 +94,15 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
}
}
@Override
@Override
public
LiteOrder
findBySource
(
String
source
)
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
else
{
return
liteOrderDao
.
findOneByCondition
(
new
String
[]{
"source"
},
new
String
[]{
source
});
}
}
@Override
public
PageData
<
LiteOrder
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
public
PageData
<
LiteOrder
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
int
totalCount
=
liteOrderDao
.
countByQuery
(
query
);
int
totalCount
=
liteOrderDao
.
countByQuery
(
query
);
List
<
LiteOrder
>
list
=
liteOrderDao
.
findByQuery
(
query
,
pageable
);
List
<
LiteOrder
>
list
=
liteOrderDao
.
findByQuery
(
query
,
pageable
);
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
a1a331a
...
@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.order.service.po;
...
@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.order.service.po;
import
com.neotel.smfcore.common.base.BasePo
;
import
com.neotel.smfcore.common.base.BasePo
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
lombok.Data
;
import
lombok.Data
;
import
org.springframework.data.annotation.Transient
;
import
org.springframework.data.annotation.Transient
;
...
@@ -21,7 +22,15 @@ public class LiteOrder extends BasePo implements Serializable {
...
@@ -21,7 +22,15 @@ public class LiteOrder extends BasePo implements Serializable {
public
LiteOrder
(
String
orderNo
,
List
<
LiteOrderItem
>
orderItems
)
{
public
LiteOrder
(
String
orderNo
,
List
<
LiteOrderItem
>
orderItems
)
{
this
.
orderItems
=
orderItems
;
this
.
orderItems
=
orderItems
;
this
.
orderNo
=
orderNo
;
this
.
orderNo
=
orderNo
;
this
.
type
=
1
;
this
.
type
=
2
;
for
(
LiteOrderItem
item
:
orderItems
)
{
if
(!
StringUtils
.
isEmpty
(
item
.
getPn
())
&&
(
StringUtils
.
isEmpty
(
item
.
getRi
())))
{
this
.
type
=
1
;
break
;
}
}
this
.
status
=
LITEORDER_STATUS
.
NEW
;
}
}
/**
/**
...
...
src/main/java/com/neotel/smfcore/core/order/util/OrderFileWatch.java
0 → 100644
查看文件 @
a1a331a
此文件的差异被折叠,
点击展开。
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论