Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 057e0807
由
sunke
编写于
2022-09-22 09:02:02 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
每页展示数量修改
库位导出 接口异常功能优化 启动加载数据优化
1 个父辈
0e8f9693
隐藏空白字符变更
内嵌
并排
正在显示
25 个修改的文件
包含
332 行增加
和
206 行删除
src/main/java/com/neotel/smfcore/common/utils/FileUtil.java
src/main/java/com/neotel/smfcore/core/barcode/rest/ComponentController.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/BarcodeManagerImpl.java
src/main/java/com/neotel/smfcore/core/hik/rest/InterfaceExceptionController.java
src/main/java/com/neotel/smfcore/core/hik/rest/query/InterfaceExCriteria.java
src/main/java/com/neotel/smfcore/core/inList/util/InListCache.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/OrderPnCache.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderShortageController.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/outList/util/OutListCache.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
src/main/java/com/neotel/smfcore/core/system/service/manager/impl/DataLogManagerImpl.java
src/main/java/com/neotel/smfcore/hikvision/HikApiCache.java
src/main/java/com/neotel/smfcore/hikvision/HikvisionApiController.java
src/main/java/com/neotel/smfcore/hikvision/bean/api/HikApiRequest.java
src/main/java/com/neotel/smfcore/hikvision/service/dao/IHikApiRequestErrorDao.java
src/main/java/com/neotel/smfcore/hikvision/service/dao/impl/HikApiRequestErrorDaoImpl.java
src/main/java/com/neotel/smfcore/hikvision/service/po/HikApiRequestError.java
src/main/java/com/neotel/smfcore/hikvision/util/HttpHelper.java
src/main/java/com/neotel/smfcore/common/utils/FileUtil.java
查看文件 @
057e080
...
@@ -239,7 +239,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
...
@@ -239,7 +239,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
// 这里注意 如果同一个sheet只要创建一次
// 这里注意 如果同一个sheet只要创建一次
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"Sheet1"
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"Sheet1"
).
build
();
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
PageRequest
page
=
PageRequest
.
ofSize
(
1
0000
);
PageRequest
page
=
PageRequest
.
ofSize
(
2
0000
);
if
(
pageable
!=
null
){
if
(
pageable
!=
null
){
page
.
withSort
(
pageable
.
getSort
());
page
.
withSort
(
pageable
.
getSort
());
}
}
...
...
src/main/java/com/neotel/smfcore/core/barcode/rest/ComponentController.java
查看文件 @
057e080
...
@@ -86,6 +86,8 @@ public class ComponentController {
...
@@ -86,6 +86,8 @@ public class ComponentController {
@Override
@Override
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
long
end
=
pageable
.
getOffset
()
+
pageable
.
getPageSize
();
log
.
info
(
"开始导出元器件"
+
pageable
.
getOffset
()+
" - "
+
end
);
List
<
Component
>
list
=
componentManager
.
findByQuery
(
query
,
pageable
);
List
<
Component
>
list
=
componentManager
.
findByQuery
(
query
,
pageable
);
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
for
(
Component
component
:
list
)
{
for
(
Component
component
:
list
)
{
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/BarcodeManagerImpl.java
查看文件 @
057e080
...
@@ -83,6 +83,8 @@ public class BarcodeManagerImpl implements IBarcodeManager {
...
@@ -83,6 +83,8 @@ public class BarcodeManagerImpl implements IBarcodeManager {
@Override
@Override
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
long
end
=
pageable
.
getOffset
()
+
pageable
.
getPageSize
();
log
.
info
(
"开始导出条码"
+
pageable
.
getOffset
()+
" - "
+
end
);
List
<
Barcode
>
barcodeList
=
barcodeDao
.
findByQuery
(
query
,
pageable
);
List
<
Barcode
>
barcodeList
=
barcodeDao
.
findByQuery
(
query
,
pageable
);
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
for
(
Barcode
barcode
:
barcodeList
)
{
for
(
Barcode
barcode
:
barcodeList
)
{
...
...
src/main/java/com/neotel/smfcore/core/hik/rest/InterfaceExceptionController.java
查看文件 @
057e080
package
com
.
neotel
.
smfcore
.
core
.
hik
.
rest
;
package
com
.
neotel
.
smfcore
.
core
.
hik
.
rest
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.hik.rest.dto.InterfaceExDto
;
import
com.neotel.smfcore.core.hik.rest.dto.InterfaceExDto
;
import
com.neotel.smfcore.core.hik.rest.query.InterfaceExCriteria
;
import
com.neotel.smfcore.core.hik.rest.query.InterfaceExCriteria
;
import
com.neotel.smfcore.core.system.rest.bean.dto.TaskDto
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.hikvision.HikApiCache
;
import
com.neotel.smfcore.hikvision.HikApiCache
;
import
com.neotel.smfcore.hikvision.bean.api.HikApiRequest
;
import
com.neotel.smfcore.hikvision.bean.api.HikApiRequest
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.service.dao.IHikApiRequestErrorDao
;
import
com.neotel.smfcore.hikvision.service.po.HikApiRequestError
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.*
;
import
java.util.*
;
import
java.util.regex.Matcher
;
import
java.util.regex.Matcher
;
...
@@ -26,71 +36,24 @@ import java.util.regex.Pattern;
...
@@ -26,71 +36,24 @@ import java.util.regex.Pattern;
@RequestMapping
(
"api/interfaceException"
)
@RequestMapping
(
"api/interfaceException"
)
public
class
InterfaceExceptionController
{
public
class
InterfaceExceptionController
{
@Autowired
private
IHikApiRequestErrorDao
hikApiRequestErrorDao
;
@ApiOperation
(
"获取异常列表"
)
@ApiOperation
(
"获取异常列表"
)
@GetMapping
(
"/list"
)
@GetMapping
(
"/list"
)
public
List
<
InterfaceExDto
>
list
(
InterfaceExCriteria
criteria
)
{
public
PageData
<
InterfaceExDto
>
list
(
InterfaceExCriteria
criteria
,
Pageable
pageable
)
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
List
<
InterfaceExDto
>
results
=
new
ArrayList
<>();
List
<
InterfaceExDto
>
results
=
new
ArrayList
<>();
List
<
HikApiRequest
>
requests
=
HikApiCache
.
getAllRequestList
();
List
<
HikApiRequestError
>
requests
=
hikApiRequestErrorDao
.
findByQuery
(
query
,
pageable
);
for
(
HikApiRequest
request
:
requests
)
{
int
totalCount
=
hikApiRequestErrorDao
.
countByQuery
(
query
);
for
(
HikApiRequestError
request
:
requests
)
{
InterfaceExDto
dto
=
toDto
(
request
);
InterfaceExDto
dto
=
toDto
(
request
);
//dto.setApiType(2);
results
.
add
(
dto
);
if
(
criteria
.
getCreateDate
()
!=
null
)
{
Date
from
=
criteria
.
getCreateDate
().
getFrom
();
Date
to
=
criteria
.
getCreateDate
().
getTo
();
if
(
ObjectUtil
.
isNotEmpty
(
from
))
{
if
(
request
.
getUpdatetime
().
before
(
from
))
{
break
;
}
}
if
(
ObjectUtil
.
isNotEmpty
(
to
))
{
if
(
request
.
getUpdatetime
().
after
(
to
))
{
break
;
}
}
}
boolean
blurryOk
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
criteria
.
getBlurry
()))
{
String
blurry
=
criteria
.
getBlurry
();
String
[]
blurrys
=
blurry
.
split
(
","
);
String
[]
valueArray
=
new
String
[]{
dto
.
getReqCode
(),
dto
.
getResponseMsg
(),
JsonUtil
.
toJsonStr
(
dto
.
getData
())
,
dto
.
getUserCode
()};
for
(
String
s
:
blurrys
)
{
if
(
ObjectUtil
.
isNotEmpty
(
s
))
{
for
(
String
v
:
valueArray
)
{
if
(
ObjectUtil
.
isEmpty
(
v
))
{
continue
;
}
try
{
Pattern
pattern
=
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
s
),
Pattern
.
CASE_INSENSITIVE
);
Matcher
m
=
pattern
.
matcher
(
v
);
while
(
m
.
find
())
{
blurryOk
=
true
;
break
;
}
if
(
blurryOk
)
break
;
}
catch
(
Exception
ex
)
{
log
.
error
(
ex
.
toString
());
}
}
if
(
blurryOk
)
break
;
}
else
{
blurryOk
=
true
;
}
}
}
else
{
blurryOk
=
true
;
}
if
(
blurryOk
)
{
results
.
add
(
dto
);
}
}
}
return
results
;
return
new
PageData
<
InterfaceExDto
>(
results
,
totalCount
)
;
}
}
private
InterfaceExDto
toDto
(
HikApiRequest
request
)
{
private
InterfaceExDto
toDto
(
HikApiRequest
Error
request
)
{
InterfaceExDto
dto
=
new
InterfaceExDto
();
InterfaceExDto
dto
=
new
InterfaceExDto
();
dto
.
setApiType
(
request
.
getApiType
());
dto
.
setApiType
(
request
.
getApiType
());
dto
.
setCreateTime
(
request
.
getCreateTime
());
dto
.
setCreateTime
(
request
.
getCreateTime
());
...
@@ -112,7 +75,7 @@ public class InterfaceExceptionController {
...
@@ -112,7 +75,7 @@ public class InterfaceExceptionController {
throw
new
ValidateException
(
"smfcore.error.interfaceEx.invalid"
,
"未找到异常接口{1}"
,
new
String
[]{
""
});
throw
new
ValidateException
(
"smfcore.error.interfaceEx.invalid"
,
"未找到异常接口{1}"
,
new
String
[]{
""
});
}
}
HikApiRequest
request
=
HikApiCache
.
getRequest
(
reqCode
);
HikApiRequest
Error
request
=
HikApiCache
.
getRequest
(
reqCode
);
if
(
request
==
null
)
{
if
(
request
==
null
)
{
throw
new
ValidateException
(
"smfcore.error.interfaceEx.invalid"
,
"未找到异常接口{0}"
,
new
String
[]{
reqCode
});
throw
new
ValidateException
(
"smfcore.error.interfaceEx.invalid"
,
"未找到异常接口{0}"
,
new
String
[]{
reqCode
});
}
}
...
...
src/main/java/com/neotel/smfcore/core/hik/rest/query/InterfaceExCriteria.java
查看文件 @
057e080
...
@@ -8,10 +8,10 @@ import org.springframework.format.annotation.DateTimeFormat;
...
@@ -8,10 +8,10 @@ import org.springframework.format.annotation.DateTimeFormat;
import
java.sql.Date
;
import
java.sql.Date
;
@Data
@Data
public
class
InterfaceExCriteria
{
public
class
InterfaceExCriteria
{
@QueryCondition
(
blurry
=
"
reqCode,userCode,date,responseMsg
"
)
@QueryCondition
(
blurry
=
"
param.reqCode,param.userCode,param.data,responseParam.message,responseParam.data
"
)
private
String
blurry
;
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"
upd
ateDate"
)
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"
cre
ateDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
private
BetweenData
<
Date
>
createDate
;
private
BetweenData
<
Date
>
createDate
;
...
...
src/main/java/com/neotel/smfcore/core/inList/util/InListCache.java
查看文件 @
057e080
...
@@ -49,6 +49,7 @@ public class InListCache {
...
@@ -49,6 +49,7 @@ public class InListCache {
addInListToMap
(
list
);
addInListToMap
(
list
);
// }
// }
}
}
log
.
info
(
"加载到["
+
inLists
.
size
()+
"]条入库单"
);
}
}
public
void
addInListToMap
(
InList
inList
){
public
void
addInListToMap
(
InList
inList
){
if
(
inList
==
null
||
inList
.
getName
()==
null
){
if
(
inList
==
null
||
inList
.
getName
()==
null
){
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
057e080
...
@@ -66,6 +66,10 @@ public class LiteOrderCache implements ITaskListener {
...
@@ -66,6 +66,10 @@ public class LiteOrderCache implements ITaskListener {
*/
*/
public
static
Map
<
String
,
LiteOrder
>
liteOrderMap
=
new
ConcurrentHashMap
<>();
public
static
Map
<
String
,
LiteOrder
>
liteOrderMap
=
new
ConcurrentHashMap
<>();
public
static
Collection
<
LiteOrder
>
getAllCachedOrders
(){
return
liteOrderMap
.
values
();
}
public
void
loadUnEndOrderInfos
()
{
public
void
loadUnEndOrderInfos
()
{
Criteria
c
=
Criteria
.
where
(
"remainBoxNum"
).
exists
(
false
);
Criteria
c
=
Criteria
.
where
(
"remainBoxNum"
).
exists
(
false
);
Query
q
=
Query
.
query
(
c
);
Query
q
=
Query
.
query
(
c
);
...
@@ -91,6 +95,7 @@ public class LiteOrderCache implements ITaskListener {
...
@@ -91,6 +95,7 @@ public class LiteOrderCache implements ITaskListener {
addOrderToMap
(
order
);
addOrderToMap
(
order
);
// }
// }
}
}
log
.
info
(
"加载到["
+
unEndOutInfoList
.
size
()+
"]个未完成的需求单"
);
}
}
public
void
addOrderToMap
(
LiteOrder
order
){
public
void
addOrderToMap
(
LiteOrder
order
){
if
(
order
==
null
||
order
.
getOrderNo
()==
null
){
if
(
order
==
null
||
order
.
getOrderNo
()==
null
){
...
@@ -287,7 +292,7 @@ public class LiteOrderCache implements ITaskListener {
...
@@ -287,7 +292,7 @@ public class LiteOrderCache implements ITaskListener {
* @return
* @return
*/
*/
public
LiteOrder
updateOrderFromApi
(
String
userName
,
LiteOrder
liteOrder
)
{
public
LiteOrder
updateOrderFromApi
(
String
userName
,
LiteOrder
liteOrder
)
{
if
((!
liteOrder
.
isNew
())
&&(!
liteOrder
.
isShortage
())
)
{
if
((!
liteOrder
.
isNew
())
/**&&(!liteOrder.isShortage())*/
)
{
return
liteOrder
;
return
liteOrder
;
}
}
...
@@ -805,6 +810,8 @@ public class LiteOrderCache implements ITaskListener {
...
@@ -805,6 +810,8 @@ public class LiteOrderCache implements ITaskListener {
}
}
//挑选散盘
//挑选散盘
log
.
info
(
"开始挑选散盘料,剩余需求"
+
targetNum
);
log
.
info
(
"开始挑选散盘料,剩余需求"
+
targetNum
);
//已挑选的散盘数量
int
notWholeReelCount
=
0
;
while
(
true
){
while
(
true
){
//取散盘
//取散盘
StoragePos
outPos
=
pickNotWholeReel
(
excludePosNameList
,
posList
,
targetNum
,
oneReelNum
);
StoragePos
outPos
=
pickNotWholeReel
(
excludePosNameList
,
posList
,
targetNum
,
oneReelNum
);
...
@@ -818,16 +825,20 @@ public class LiteOrderCache implements ITaskListener {
...
@@ -818,16 +825,20 @@ public class LiteOrderCache implements ITaskListener {
if
(
targetNum
<=
0
){
if
(
targetNum
<=
0
){
break
;
break
;
}
}
notWholeReelCount
=
notWholeReelCount
+
1
;
// if(notWholeReelCount > 3){
// log.info(pn + "的散盘已挑选3盘,跳出");
// }
}
}
}
}
if
(
targetNum
>
0
){
if
(
targetNum
>
0
){
log
.
info
(
"剩余需求"
+
targetNum
+
"开始补充
整
盘"
);
log
.
info
(
"剩余需求"
+
targetNum
+
"开始补充
最合适的
盘"
);
while
(
true
){
while
(
true
){
StoragePos
outPos
=
pickFitWholeReel
(
excludePosNameList
,
posList
,
targetNum
);
StoragePos
outPos
=
pickFitWholeReel
(
excludePosNameList
,
posList
,
targetNum
);
if
(
outPos
==
null
){
if
(
outPos
==
null
){
break
;
break
;
}
else
{
}
else
{
log
.
info
(
"挑选到批次["
+
outPos
.
getBarcode
().
getBatch
()+
"]的
散盘
物料:"
+
outPos
.
getBarcode
().
getBarcode
()
+
" 数量:"
+
outPos
.
getBarcode
().
getAmount
());
log
.
info
(
"挑选到批次["
+
outPos
.
getBarcode
().
getBatch
()+
"]的物料:"
+
outPos
.
getBarcode
().
getBarcode
()
+
" 数量:"
+
outPos
.
getBarcode
().
getAmount
());
outPosList
.
add
(
outPos
);
outPosList
.
add
(
outPos
);
excludePosNameList
.
add
(
outPos
.
getPosName
());
excludePosNameList
.
add
(
outPos
.
getPosName
());
targetNum
=
targetNum
-
outPos
.
getBarcode
().
getAmount
();
targetNum
=
targetNum
-
outPos
.
getBarcode
().
getAmount
();
...
...
src/main/java/com/neotel/smfcore/core/order/OrderPnCache.java
查看文件 @
057e080
...
@@ -99,7 +99,7 @@ public class OrderPnCache {
...
@@ -99,7 +99,7 @@ public class OrderPnCache {
log
.
info
(
"开始更新齐套数据----------"
);
log
.
info
(
"开始更新齐套数据----------"
);
//需要每个工单单独计算缺料数,最后把总盘数加起来
//需要每个工单单独计算缺料数,最后把总盘数加起来
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findUnEndOrdersList
();
Collection
<
LiteOrder
>
liteOrders
=
LiteOrderCache
.
getAllCachedOrders
();
orderPnInfoMap
=
new
HashMap
<>();
orderPnInfoMap
=
new
HashMap
<>();
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
057e080
...
@@ -267,6 +267,9 @@ public class OrderController {
...
@@ -267,6 +267,9 @@ public class OrderController {
if
(
liteOrder
==
null
)
{
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
throw
new
ValidateException
(
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
}
if
(!
liteOrder
.
isNew
()
&&
!
liteOrder
.
isShortage
()){
throw
new
ValidateException
(
"smfcore.order.executed"
,
"该工单已执行,无法重复执行"
,
new
String
[]{});
}
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
SecurityUtils
.
getCurrentUsername
(),
liteOrder
.
getOrderNo
(),
isShortageOut
,
false
);
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
SecurityUtils
.
getCurrentUsername
(),
liteOrder
.
getOrderNo
(),
isShortageOut
,
false
);
if
(
ObjectUtil
.
isEmpty
(
result
))
{
if
(
ObjectUtil
.
isEmpty
(
result
))
{
return
ResultBean
.
newOkResult
(
result
);
return
ResultBean
.
newOkResult
(
result
);
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderShortageController.java
查看文件 @
057e080
...
@@ -36,10 +36,7 @@ import org.springframework.data.mongodb.core.query.Query;
...
@@ -36,10 +36,7 @@ import org.springframework.data.mongodb.core.query.Query;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@Slf4j
@Api
(
tags
=
"工单欠料发料,合单欠料"
)
@Api
(
tags
=
"工单欠料发料,合单欠料"
)
...
@@ -146,9 +143,9 @@ public class OrderShortageController {
...
@@ -146,9 +143,9 @@ public class OrderShortageController {
@PreAuthorize
(
"@el.check('reelOut')"
)
@PreAuthorize
(
"@el.check('reelOut')"
)
public
List
<
TaskDto
>
shortageOutTasks
(
@RequestParam
Map
<
String
,
String
>
paramsMap
)
{
public
List
<
TaskDto
>
shortageOutTasks
(
@RequestParam
Map
<
String
,
String
>
paramsMap
)
{
List
<
DataLog
>
taskList
=
new
ArrayList
<>();
List
<
DataLog
>
taskList
=
new
ArrayList
<>();
List
<
DataLog
>
allTasks
=
taskService
.
getAll
Tasks
();
Collection
<
DataLog
>
allTasks
=
taskService
.
getQueue
Tasks
();
for
(
DataLog
datalog
:
allTasks
)
{
for
(
DataLog
datalog
:
allTasks
)
{
if
(
datalog
.
isOrderTask
())
{
if
(
datalog
.
isOrderTask
()
&&
datalog
.
isCheckOutTask
()
)
{
//判断是否是缺料出库
//判断是否是缺料出库
if
(
datalog
.
isAddOutbound
())
{
if
(
datalog
.
isAddOutbound
())
{
taskList
.
add
(
datalog
);
taskList
.
add
(
datalog
);
...
@@ -158,7 +155,7 @@ public class OrderShortageController {
...
@@ -158,7 +155,7 @@ public class OrderShortageController {
taskList
.
sort
(
new
Comparator
<
DataLog
>()
{
taskList
.
sort
(
new
Comparator
<
DataLog
>()
{
@Override
@Override
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
return
o1
.
get
Cid
().
compareTo
(
o2
.
getCid
());
return
o1
.
get
PosName
().
compareTo
(
o2
.
getPosName
());
}
}
});
});
return
taskMapper
.
toDto
(
taskList
);
return
taskMapper
.
toDto
(
taskList
);
...
...
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
查看文件 @
057e080
...
@@ -20,10 +20,10 @@ import org.springframework.data.mongodb.core.query.Criteria;
...
@@ -20,10 +20,10 @@ import org.springframework.data.mongodb.core.query.Criteria;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
import
java.util.*
;
import
java.util.List
;
@Service
@Service
@Slf4j
public
class
LiteOrderManagerImpl
implements
ILiteOrderManager
{
public
class
LiteOrderManagerImpl
implements
ILiteOrderManager
{
@Autowired
@Autowired
...
@@ -46,6 +46,7 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
...
@@ -46,6 +46,7 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
public
LiteOrder
get
(
String
id
)
{
public
LiteOrder
get
(
String
id
)
{
LiteOrder
order
=
liteOrderDao
.
findOneById
(
id
);
LiteOrder
order
=
liteOrderDao
.
findOneById
(
id
);
if
(
order
!=
null
&&
order
.
getOrderItems
()==
null
){
if
(
order
!=
null
&&
order
.
getOrderItems
()==
null
){
log
.
info
(
"加载["
+
order
.
getOrderNo
()+
"]详情"
);
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getOrderNo
());
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getOrderNo
());
order
.
setOrderItems
(
items
);
order
.
setOrderItems
(
items
);
}
}
...
@@ -83,14 +84,29 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
...
@@ -83,14 +84,29 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
c
.
and
(
"status"
).
nin
(
LITEORDER_STATUS
.
CLOSED
);
c
.
and
(
"status"
).
nin
(
LITEORDER_STATUS
.
CLOSED
);
Query
query
=
new
Query
(
c
);
Query
query
=
new
Query
(
c
);
List
<
LiteOrder
>
orders
=
findByQuery
(
query
);
List
<
LiteOrder
>
orders
=
findByQuery
(
query
);
for
(
LiteOrder
order
:
orders
log
.
info
(
"加载到["
+
orders
.
size
()+
"]个未完成需求单,开始加载需求单详情"
);
)
{
List
<
String
>
orderNoList
=
new
ArrayList
<>();
Map
<
String
,
LiteOrder
>
orderMap
=
new
HashMap
<>();
for
(
LiteOrder
order
:
orders
)
{
orderNoList
.
add
(
order
.
getOrderNo
());
orderMap
.
put
(
order
.
getOrderNo
(),
order
);
if
(
order
!=
null
&&
order
.
getOrderItems
()
==
null
)
{
if
(
order
!=
null
&&
order
.
getOrderItems
()
==
null
)
{
//log.info("加载["+order.getOrderNo()+"]详情");
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getOrderNo
());
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getOrderNo
());
order
.
setOrderItems
(
items
);
order
.
setOrderItems
(
items
);
}
}
}
}
return
orders
;
// List<LiteOrderItem> items = liteOrderItemManager.findByQuery(Query.query(Criteria.where("orderNo").in(orderNoList)));
// log.info("加载到["+items.size()+"]条详情");
// for (LiteOrderItem item : items) {
// LiteOrder order = orderMap.get(item.getOrderNo());
// if(order != null){
// order.addOrderItems(item);
// }else{
// log.info("未找到工单["+item.getOrderNo()+"]");
// }
// }
return
new
ArrayList
<>(
orderMap
.
values
());
}
}
@Override
@Override
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
057e080
...
@@ -359,6 +359,9 @@ public class LiteOrder extends BasePo implements Serializable {
...
@@ -359,6 +359,9 @@ public class LiteOrder extends BasePo implements Serializable {
}
}
public
void
addOrderItems
(
LiteOrderItem
item
){
public
void
addOrderItems
(
LiteOrderItem
item
){
if
(
orderItems
==
null
){
orderItems
=
new
ArrayList
<>();
}
orderItems
.
add
(
item
);
orderItems
.
add
(
item
);
}
}
...
...
src/main/java/com/neotel/smfcore/core/outList/util/OutListCache.java
查看文件 @
057e080
...
@@ -152,7 +152,7 @@ public class OutListCache implements ITaskListener {
...
@@ -152,7 +152,7 @@ public class OutListCache implements ITaskListener {
public
void
loadMap
()
{
public
void
loadMap
()
{
log
.
info
(
"开始加载转储出库单"
);
log
.
info
(
"开始加载转储出库单"
);
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
2
));
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
3
));
List
<
OutList
>
outLists
=
outListManager
.
findByQuery
(
query
);
List
<
OutList
>
outLists
=
outListManager
.
findByQuery
(
query
);
long
now
=
System
.
currentTimeMillis
();
long
now
=
System
.
currentTimeMillis
();
for
(
OutList
list
:
outLists
)
{
for
(
OutList
list
:
outLists
)
{
...
@@ -163,6 +163,7 @@ public class OutListCache implements ITaskListener {
...
@@ -163,6 +163,7 @@ public class OutListCache implements ITaskListener {
addOutListToMap
(
list
);
addOutListToMap
(
list
);
// }
// }
}
}
log
.
info
(
"加载到["
+
outLists
.
size
()+
"]条转储出库单"
);
}
}
public
void
addOutListToMap
(
OutList
outList
)
{
public
void
addOutListToMap
(
OutList
outList
)
{
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
057e080
...
@@ -2,13 +2,12 @@ package com.neotel.smfcore.core.storage.rest;
...
@@ -2,13 +2,12 @@ package com.neotel.smfcore.core.storage.rest;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.base.IExcelDownLoad
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.*
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.CodeDto
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.CodeDto
;
...
@@ -29,6 +28,7 @@ import com.neotel.smfcore.core.storage.service.dao.IStoragePosDao;
...
@@ -29,6 +28,7 @@ import com.neotel.smfcore.core.storage.service.dao.IStoragePosDao;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
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.rest.bean.query.TaskQueryCondition
;
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
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
...
@@ -54,6 +54,8 @@ import org.springframework.web.bind.annotation.*;
...
@@ -54,6 +54,8 @@ import org.springframework.web.bind.annotation.*;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.text.DateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.*
;
import
java.util.regex.Pattern
;
import
java.util.regex.Pattern
;
...
@@ -81,15 +83,20 @@ public class StoragePosController {
...
@@ -81,15 +83,20 @@ public class StoragePosController {
@Autowired
@Autowired
private
CodeMapper
codeMapper
;
private
CodeMapper
codeMapper
;
private
Query
getQuery
(
StoragePosQueryCriteria
criteria
){
if
(
criteria
.
getStorageIdList
()
!=
null
&&
criteria
.
getStorageIdList
().
contains
(
"0"
))
{
criteria
.
setStorageIdList
(
null
);
}
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
return
query
;
}
@ApiOperation
(
"查询库位"
)
@ApiOperation
(
"查询库位"
)
@GetMapping
@GetMapping
@PreAuthorize
(
"@el.check('storagePos:list')"
)
@PreAuthorize
(
"@el.check('storagePos:list')"
)
public
PageData
<
StoragePosDto
>
query
(
StoragePosQueryCriteria
criteria
,
Pageable
pageable
)
{
public
PageData
<
StoragePosDto
>
query
(
StoragePosQueryCriteria
criteria
,
Pageable
pageable
)
{
if
(
criteria
.
getStorageIdList
()
!=
null
&&
criteria
.
getStorageIdList
().
contains
(
"0"
))
{
Query
query
=
getQuery
(
criteria
);
criteria
.
setStorageIdList
(
null
);
}
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
PageData
<
StoragePos
>
pages
=
storagePosManager
.
findByPage
(
query
,
pageable
);
PageData
<
StoragePos
>
pages
=
storagePosManager
.
findByPage
(
query
,
pageable
);
List
<
StoragePosDto
>
StoragePosDtos
=
storagePosMapper
.
toDto
(
pages
.
getContent
());
List
<
StoragePosDto
>
StoragePosDtos
=
storagePosMapper
.
toDto
(
pages
.
getContent
());
...
@@ -102,6 +109,70 @@ public class StoragePosController {
...
@@ -102,6 +109,70 @@ public class StoragePosController {
return
new
PageData
(
StoragePosDtos
,
pages
.
getTotalElements
());
return
new
PageData
(
StoragePosDtos
,
pages
.
getTotalElements
());
}
}
@ApiOperation
(
"导出库位"
)
@GetMapping
(
value
=
"/download"
)
@PreAuthorize
(
"@el.check('storagePos:list')"
)
public
void
download
(
HttpServletResponse
response
,
StoragePosQueryCriteria
criteria
,
Pageable
pageable
,
HttpServletRequest
request
)
throws
IOException
{
Query
query
=
getQuery
(
criteria
);
FileUtil
.
downloadExcel
(
query
,
pageable
,
response
,
new
IExcelDownLoad
()
{
@Override
public
List
<
List
<
String
>>
getHeader
()
{
List
<
List
<
String
>>
header
=
new
ArrayList
<>();
header
.
add
(
Lists
.
newArrayList
(
"设备名称"
));
header
.
add
(
Lists
.
newArrayList
(
"库位号"
));
header
.
add
(
Lists
.
newArrayList
(
"是否可用"
));
header
.
add
(
Lists
.
newArrayList
(
"条码"
));
header
.
add
(
Lists
.
newArrayList
(
"料件编号"
));
header
.
add
(
Lists
.
newArrayList
(
"料盘尺寸"
));
header
.
add
(
Lists
.
newArrayList
(
"直径"
));
header
.
add
(
Lists
.
newArrayList
(
"厚度"
));
return
header
;
}
@Override
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
long
end
=
pageable
.
getOffset
()
+
pageable
.
getPageSize
();
log
.
info
(
"开始导出库位"
+
pageable
.
getOffset
()+
" - "
+
end
);
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
query
,
pageable
);
DateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
for
(
StoragePos
pos
:
posList
)
{
List
<
Object
>
data
=
new
ArrayList
<>();
//storageName,posName,enabled,barcode.barcode,barcode.partNumber,barcode.size,w,h,
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
String
storageName
=
""
;
if
(
storage
!=
null
){
storageName
=
storage
.
getName
();
}
String
enabled
=
"是"
;
if
(
pos
.
isEnabled
()){
enabled
=
"否"
;
}
Barcode
barcode
=
pos
.
getBarcode
();
String
barcodeStr
=
""
;
String
pn
=
""
;
String
reelSize
=
""
;
if
(
barcode
!=
null
){
barcodeStr
=
barcode
.
getBarcode
();
pn
=
barcode
.
getPartNumber
();
reelSize
=
""
+
barcode
.
getPlateSize
()+
"X"
+
barcode
.
getHeight
();
}
data
.
add
(
storageName
);
//"设备名称"
data
.
add
(
pos
.
getPosName
());
//"库位号"
data
.
add
(
enabled
);
//"是否可用"
data
.
add
(
barcodeStr
);
//"条码"
data
.
add
(
pn
);
//"料件编号"
data
.
add
(
reelSize
);
//"料盘尺寸"
data
.
add
(
pos
.
getW
());
//"直径"
data
.
add
(
pos
.
getH
());
//"厚度"
dataList
.
add
(
data
);
}
return
dataList
;
}
});
}
@ApiOperation
(
"删除指定料仓所有库位"
)
@ApiOperation
(
"删除指定料仓所有库位"
)
@PutMapping
(
"/removeAllPos"
)
@PutMapping
(
"/removeAllPos"
)
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
057e080
...
@@ -33,6 +33,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
...
@@ -33,6 +33,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
List
<
StoragePos
>
findByQuery
(
Query
query
,
Pageable
pageable
);
void
removePosByStorageId
(
String
storageId
);
void
removePosByStorageId
(
String
storageId
);
void
deletePoss
(
Set
<
String
>
ids
);
void
deletePoss
(
Set
<
String
>
ids
);
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
057e080
...
@@ -297,6 +297,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -297,6 +297,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
}
@Override
@Override
public
List
<
StoragePos
>
findByQuery
(
Query
query
,
Pageable
pageable
)
{
return
storagePosDao
.
findByQuery
(
query
,
pageable
);
}
@Override
public
List
<
StoragePos
>
findByQuery
(
Query
query
)
{
public
List
<
StoragePos
>
findByQuery
(
Query
query
)
{
return
storagePosDao
.
findByQuery
(
query
);
return
storagePosDao
.
findByQuery
(
query
);
}
}
...
@@ -532,6 +537,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -532,6 +537,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
@Override
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
long
end
=
pageable
.
getOffset
()
+
pageable
.
getPageSize
();
log
.
info
(
"开始导出库存"
+
pageable
.
getOffset
()+
" - "
+
end
);
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
StoragePos
>
storagePos
=
storagePosDao
.
findByQuery
(
query
,
pageable
);
List
<
StoragePos
>
storagePos
=
storagePosDao
.
findByQuery
(
query
,
pageable
);
DateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:SS"
);
DateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:SS"
);
...
...
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
查看文件 @
057e080
...
@@ -200,6 +200,7 @@ public class TaskController {
...
@@ -200,6 +200,7 @@ public class TaskController {
if
(
task
.
isCancel
()||
task
.
isFinished
()||
task
.
isEnd
()){
if
(
task
.
isCancel
()||
task
.
isFinished
()||
task
.
isEnd
()){
throw
new
ValidateException
(
"smfcore.taskHasEnd"
,
"任务{0}已取消或已结束"
,
new
String
[]{
task
.
getPosName
()}
);
throw
new
ValidateException
(
"smfcore.taskHasEnd"
,
"任务{0}已取消或已结束"
,
new
String
[]{
task
.
getPosName
()}
);
}
}
log
.
info
(
"用户:"
+
SecurityUtils
.
getCurrentUsername
()
+
"取消["
+
task
.
getBarcode
()+
"]的任务"
);
taskService
.
cancelTask
(
taskId
);
taskService
.
cancelTask
(
taskId
);
}
}
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
...
...
src/main/java/com/neotel/smfcore/core/system/service/manager/impl/DataLogManagerImpl.java
查看文件 @
057e080
...
@@ -12,6 +12,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
...
@@ -12,6 +12,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import
com.neotel.smfcore.core.system.service.dao.IDataLogDao
;
import
com.neotel.smfcore.core.system.service.dao.IDataLogDao
;
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
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.domain.Sort
;
...
@@ -26,6 +27,7 @@ import java.text.SimpleDateFormat;
...
@@ -26,6 +27,7 @@ import java.text.SimpleDateFormat;
import
java.util.*
;
import
java.util.*
;
@Service
@Service
@Slf4j
public
class
DataLogManagerImpl
implements
IDataLogManager
{
public
class
DataLogManagerImpl
implements
IDataLogManager
{
@Autowired
@Autowired
...
@@ -115,6 +117,8 @@ public class DataLogManagerImpl implements IDataLogManager {
...
@@ -115,6 +117,8 @@ public class DataLogManagerImpl implements IDataLogManager {
@Override
@Override
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
long
end
=
pageable
.
getOffset
()
+
pageable
.
getPageSize
();
log
.
info
(
"开始导出出入库记录"
+
pageable
.
getOffset
()+
" - "
+
end
);
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
DataLog
>
dataLogList
=
dataLogDao
.
findByQuery
(
query
,
pageable
);
List
<
DataLog
>
dataLogList
=
dataLogDao
.
findByQuery
(
query
,
pageable
);
DateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
DateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
...
...
src/main/java/com/neotel/smfcore/hikvision/HikApiCache.java
查看文件 @
057e080
...
@@ -3,8 +3,11 @@ package com.neotel.smfcore.hikvision;
...
@@ -3,8 +3,11 @@ package com.neotel.smfcore.hikvision;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.service.dao.IStorageDao
;
import
com.neotel.smfcore.hikvision.bean.api.HikApiRequest
;
import
com.neotel.smfcore.hikvision.bean.api.HikApiRequest
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.service.dao.IHikApiRequestErrorDao
;
import
com.neotel.smfcore.hikvision.service.po.HikApiRequestError
;
import
com.neotel.smfcore.hikvision.util.HttpHelper
;
import
com.neotel.smfcore.hikvision.util.HttpHelper
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -20,79 +23,71 @@ import java.util.concurrent.ConcurrentHashMap;
...
@@ -20,79 +23,71 @@ import java.util.concurrent.ConcurrentHashMap;
public
class
HikApiCache
{
public
class
HikApiCache
{
private
static
DataCache
dataCache
;
private
static
DataCache
dataCache
;
@Autowired
@Autowired
public
void
setDataCache
(
DataCache
dataCache
)
{
public
void
setDataCache
(
DataCache
dataCache
)
{
HikApiCache
.
dataCache
=
dataCache
;
HikApiCache
.
dataCache
=
dataCache
;
}
}
/**
* 需要重发的指令列表
*/
private
static
Map
<
String
,
HikApiRequest
>
failedRequestMap
=
new
HashMap
<>();
private
static
boolean
isProcessTimer
=
false
;
private
static
IHikApiRequestErrorDao
hikApiRequestErrorDao
;
@Autowired
public
void
setHikApiRequestErrorDao
(
IHikApiRequestErrorDao
hikApiRequestErrorDao
)
{
HikApiCache
.
hikApiRequestErrorDao
=
hikApiRequestErrorDao
;
}
@PostConstruct
@PostConstruct
public
void
Init
()
{
public
void
Init
()
{
initApiRequestMap
();
//
initApiRequestMap();
}
}
/**
/**
* 加载请求指令信息
* 加载请求指令信息
*/
*/
private
static
void
initApiRequestMap
()
{
private
static
void
initApiRequestMap
()
{
failedRequestMap
=
new
ConcurrentHashMap
<>();
Map
<
String
,
HikApiRequest
>
dbFailedRequestMap
=
dataCache
.
getCache
(
Constants
.
CACHE_failedRequestMap
);
Map
<
String
,
HikApiRequest
>
dbFailedRequestMap
=
dataCache
.
getCache
(
Constants
.
CACHE_failedRequestMap
);
if
(
dbFailedRequestMap
!=
null
)
{
if
(
dbFailedRequestMap
!=
null
&&
dbFailedRequestMap
.
size
()
>
0
)
{
failedRequestMap
.
putAll
(
dbFailedRequestMap
);
List
<
HikApiRequestError
>
failedList
=
new
ArrayList
<>();
log
.
info
(
"共加载到接口异常:"
+
failedRequestMap
.
size
()
+
"条"
);
for
(
HikApiRequest
dbRequest
:
dbFailedRequestMap
.
values
())
{
}
HikApiRequestError
requestError
=
new
HikApiRequestError
();
}
requestError
.
setApiType
(
dbRequest
.
getApiType
());
/**
requestError
.
setUrl
(
dbRequest
.
getUrl
());
* 定时器,每10秒执行一次
requestError
.
setKey
(
dbRequest
.
getKey
());
*/
requestError
.
setSecret
(
dbRequest
.
getSecret
());
public
static
void
runTimer
()
{
requestError
.
setParam
(
dbRequest
.
getParam
());
if
(!
isProcessTimer
)
{
requestError
.
setCreateTime
(
dbRequest
.
getCreateTime
());
isProcessTimer
=
true
;
requestError
.
setUpdatetime
(
dbRequest
.
getUpdatetime
());
try
{
requestError
.
setResponseParam
(
dbRequest
.
getResponseParam
());
// sendFailedRequest();
failedList
.
add
(
requestError
);
}
catch
(
Exception
e
)
{
log
.
error
(
"发送失败请求定时器执行出错:"
+
e
.
getMessage
());
}
finally
{
isProcessTimer
=
false
;
}
}
hikApiRequestErrorDao
.
insertAll
(
failedList
);
log
.
info
(
"转移["
+
dbFailedRequestMap
.
size
()+
"]条历史异常"
);
dataCache
.
updateCache
(
Constants
.
CACHE_failedRequestMap
,
new
HashMap
<>());
}
}
}
}
public
static
List
<
HikApiRequest
>
getAllRequestList
()
{
List
<
HikApiRequest
>
requests
=
new
ArrayList
<>(
failedRequestMap
.
values
());
public
static
HikApiRequestError
getRequest
(
String
req
)
{
//自动根据更新时间排序
return
hikApiRequestErrorDao
.
getByReqCode
(
req
);
Collections
.
sort
(
requests
);
return
requests
;
}
public
static
HikApiRequest
getRequest
(
String
req
)
{
return
failedRequestMap
.
get
(
req
);
}
}
public
static
void
addFailedRequest
(
HikApiRequest
apiRequest
,
ResponseParam
responseParam
)
{
public
static
void
addFailedRequest
(
HikApiRequest
Error
apiRequest
,
ResponseParam
responseParam
)
{
String
mapKey
=
apiRequest
.
getParam
().
getReqCode
();
String
mapKey
=
apiRequest
.
getParam
().
getReqCode
();
apiRequest
.
setResponseParam
(
responseParam
);
apiRequest
.
setResponseParam
(
responseParam
);
apiRequest
.
setUpdatetime
(
new
Date
());
apiRequest
.
setUpdatetime
(
new
Date
());
if
(
failedRequestMap
.
get
(
mapKey
)
==
null
)
{
HikApiRequestError
dbRequest
=
hikApiRequestErrorDao
.
getByReqCode
(
mapKey
);
log
.
info
(
mapKey
+
"通知指令发送到Hik失败,加入到缓存"
);
if
(
dbRequest
==
null
)
{
log
.
info
(
mapKey
+
"通知指令"
+
mapKey
+
"发送到Hik失败,加入到缓存"
);
hikApiRequestErrorDao
.
save
(
apiRequest
);
}
}
failedRequestMap
.
put
(
apiRequest
.
getParam
().
getReqCode
(),
apiRequest
);
dataCache
.
updateCache
(
Constants
.
CACHE_failedRequestMap
,
failedRequestMap
);
}
}
public
static
void
removeFailedRequest
(
HikApiRequest
apiRequest
)
{
public
static
void
removeFailedRequest
(
HikApiRequest
Error
apiRequest
)
{
String
mapKey
=
apiRequest
.
getParam
().
getReqCode
();
String
mapKey
=
apiRequest
.
getParam
().
getReqCode
();
if
(
failedRequestMap
.
get
(
mapKey
)
!=
null
)
{
hikApiRequestErrorDao
.
removeOneById
(
apiRequest
.
getId
());
log
.
info
(
mapKey
+
"通知指令发送到Hik成功,从缓存中移除"
);
log
.
info
(
mapKey
+
"通知指令["
+
mapKey
+
"]发送到Hik成功,从缓存中移除"
);
failedRequestMap
.
remove
(
apiRequest
.
getParam
().
getReqCode
());
dataCache
.
updateCache
(
Constants
.
CACHE_failedRequestMap
,
failedRequestMap
);
}
}
}
...
@@ -100,26 +95,13 @@ public class HikApiCache {
...
@@ -100,26 +95,13 @@ public class HikApiCache {
* 获取失败列表,进行定时发送
* 获取失败列表,进行定时发送
*/
*/
public
static
void
sendFailedRequest
()
{
public
static
void
sendFailedRequest
()
{
List
<
HikApiRequestError
>
failedList
=
hikApiRequestErrorDao
.
findAllFailedList
();
if
(
failedRequestMap
==
null
)
{
for
(
HikApiRequestError
apiRequest
:
failedList
)
{
initApiRequestMap
();
}
List
<
HikApiRequest
>
failedList
=
new
ArrayList
<>();
failedList
.
addAll
(
failedRequestMap
.
values
());
failedList
.
sort
(
new
Comparator
<
HikApiRequest
>()
{
@Override
public
int
compare
(
HikApiRequest
o1
,
HikApiRequest
o2
)
{
return
o1
.
getCreateTime
().
compareTo
(
o2
.
getCreateTime
());
}
});
for
(
HikApiRequest
apiRequest
:
failedList
)
{
reSendRequest
(
apiRequest
);
reSendRequest
(
apiRequest
);
}
}
}
}
public
static
ResponseParam
reSendRequest
(
HikApiRequest
apiRequest
)
{
public
static
ResponseParam
reSendRequest
(
HikApiRequest
Error
apiRequest
)
{
ResponseParam
responseParam
=
null
;
ResponseParam
responseParam
=
null
;
try
{
try
{
String
interName
=
"Hik 接口"
+
apiRequest
.
getApiType
()
+
" 重发:"
;
String
interName
=
"Hik 接口"
+
apiRequest
.
getApiType
()
+
" 重发:"
;
...
...
src/main/java/com/neotel/smfcore/hikvision/HikvisionApiController.java
查看文件 @
057e080
...
@@ -34,8 +34,6 @@ public class HikvisionApiController {
...
@@ -34,8 +34,6 @@ public class HikvisionApiController {
@Autowired
@Autowired
private
LiteOrderCache
liteOrderCache
;
private
LiteOrderCache
liteOrderCache
;
@Autowired
@Autowired
private
ILiteOrderItemManager
liteOrderItemManager
;
@Autowired
private
ILiteOrderManager
liteOrderManager
;
private
ILiteOrderManager
liteOrderManager
;
@ApiOperation
(
"创建出库单:创建出库需求单,可一次性传入多个"
)
@ApiOperation
(
"创建出库单:创建出库需求单,可一次性传入多个"
)
...
...
src/main/java/com/neotel/smfcore/hikvision/bean/api/HikApiRequest.java
查看文件 @
057e080
package
com
.
neotel
.
smfcore
.
hikvision
.
bean
.
api
;
package
com
.
neotel
.
smfcore
.
hikvision
.
bean
.
api
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.hikvision.service.po.HikApiRequestError
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
lombok.*
;
import
lombok.*
;
...
@@ -10,11 +11,9 @@ import java.util.HashMap;
...
@@ -10,11 +11,9 @@ import java.util.HashMap;
import
java.util.Map
;
import
java.util.Map
;
@Data
@Data
@AllArgsConstructor
public
class
HikApiRequest
extends
HikApiRequestError
{
@NoArgsConstructor
public
class
HikApiRequest
implements
Serializable
,
Comparable
<
HikApiRequest
>{
public
HikApiRequest
(
int
apiType
,
String
url
,
String
key
,
String
secret
,
RequestParam
param
){
public
HikApiRequest
(
int
apiType
,
String
url
,
String
key
,
String
secret
,
RequestParam
param
){
this
.
apiType
=
apiType
;
this
.
apiType
=
apiType
;
this
.
url
=
url
;
this
.
url
=
url
;
this
.
key
=
key
;
this
.
key
=
key
;
...
@@ -24,52 +23,6 @@ public class HikApiRequest implements Serializable , Comparable<HikApiRequest>{
...
@@ -24,52 +23,6 @@ public class HikApiRequest implements Serializable , Comparable<HikApiRequest>{
this
.
updatetime
=
new
Date
();
this
.
updatetime
=
new
Date
();
}
}
/**
* 消息类型
* 2=7.2转储单入库过账接口
* 3=7.3排程发料过账接口
* 5=7.5 入库上架过账接口
* 6=7.6 出库下架过账接口
* 11=7.11订单发料完成通知接口
*/
private
int
apiType
=
0
;
/**
* url
*/
private
String
url
=
""
;
/**
* 接口key
*/
private
String
key
=
""
;
/**
* 接口密钥
*/
private
String
secret
=
""
;
/**
* 参数信息
*/
private
RequestParam
param
;
/**
* 消息创建时间
*/
private
Date
createTime
;
/**
* 最后更新时间
*/
private
Date
updatetime
;
/**
* 最后一次接口返回值
*/
private
ResponseParam
responseParam
;
public
String
getParamJson
(){
public
String
getParamJson
(){
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"reqCode"
,
param
.
getReqCode
());
params
.
put
(
"reqCode"
,
param
.
getReqCode
());
...
@@ -83,11 +36,11 @@ public class HikApiRequest implements Serializable , Comparable<HikApiRequest>{
...
@@ -83,11 +36,11 @@ public class HikApiRequest implements Serializable , Comparable<HikApiRequest>{
return
JsonUtil
.
toJsonStr
(
param
.
getData
());
return
JsonUtil
.
toJsonStr
(
param
.
getData
());
}
}
@Override
//
@Override
public
int
compareTo
(
HikApiRequest
o
)
{
//
public int compareTo(HikApiRequest o) {
if
(
o
.
getUpdatetime
()!=
null
&&
this
.
getUpdatetime
()!=
null
){
//
if(o.getUpdatetime()!=null&&this.getUpdatetime()!=null){
return
o
.
getUpdatetime
().
compareTo
(
this
.
getUpdatetime
());
//
return o.getUpdatetime().compareTo(this.getUpdatetime());
}
//
}
return
o
.
getCreateTime
().
compareTo
(
this
.
getCreateTime
());
//
return o.getCreateTime().compareTo(this.getCreateTime());
}
//
}
}
}
src/main/java/com/neotel/smfcore/hikvision/service/dao/IHikApiRequestErrorDao.java
0 → 100644
查看文件 @
057e080
package
com
.
neotel
.
smfcore
.
hikvision
.
service
.
dao
;
import
com.neotel.smfcore.common.base.IBaseDao
;
import
com.neotel.smfcore.hikvision.service.po.HikApiRequestError
;
import
java.util.List
;
public
interface
IHikApiRequestErrorDao
extends
IBaseDao
{
HikApiRequestError
getByReqCode
(
String
reqCode
);
List
<
HikApiRequestError
>
findAllFailedList
();
}
src/main/java/com/neotel/smfcore/hikvision/service/dao/impl/HikApiRequestErrorDaoImpl.java
0 → 100644
查看文件 @
057e080
package
com
.
neotel
.
smfcore
.
hikvision
.
service
.
dao
.
impl
;
import
com.neotel.smfcore.common.base.AbstractBaseDao
;
import
com.neotel.smfcore.hikvision.service.dao.IHikApiRequestErrorDao
;
import
com.neotel.smfcore.hikvision.service.po.HikApiRequestError
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
@Service
public
class
HikApiRequestErrorDaoImpl
extends
AbstractBaseDao
implements
IHikApiRequestErrorDao
{
@Override
public
Class
getEntityClass
()
{
return
HikApiRequestError
.
class
;
}
@Override
public
HikApiRequestError
getByReqCode
(
String
reqCode
){
return
findOneByCondition
(
new
String
[]{
"param.reqCode"
},
new
String
[]{
reqCode
});
}
@Override
public
List
<
HikApiRequestError
>
findAllFailedList
(){
Query
query
=
new
Query
();
//根据开始出库时间排序
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"createDate"
);
query
.
with
(
sort
);
return
findByQuery
(
query
);
}
}
src/main/java/com/neotel/smfcore/hikvision/service/po/HikApiRequestError.java
0 → 100644
查看文件 @
057e080
package
com
.
neotel
.
smfcore
.
hikvision
.
service
.
po
;
import
com.neotel.smfcore.common.base.BasePo
;
import
com.neotel.smfcore.hikvision.bean.api.RequestParam
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.util.JsonUtil
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
public
class
HikApiRequestError
extends
BasePo
implements
Serializable
{
/**
* 消息类型
* 2=7.2转储单入库过账接口
* 3=7.3排程发料过账接口
* 5=7.5 入库上架过账接口
* 6=7.6 出库下架过账接口
* 11=7.11订单发料完成通知接口
*/
protected
int
apiType
=
0
;
/**
* url
*/
protected
String
url
=
""
;
/**
* 接口key
*/
protected
String
key
=
""
;
/**
* 接口密钥
*/
protected
String
secret
=
""
;
/**
* 参数信息
*/
protected
RequestParam
param
;
/**
* 消息创建时间
*/
protected
Date
createTime
;
/**
* 最后更新时间
*/
protected
Date
updatetime
;
/**
* 最后一次接口返回值
*/
protected
ResponseParam
responseParam
;
}
src/main/java/com/neotel/smfcore/hikvision/util/HttpHelper.java
查看文件 @
057e080
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.DateUtil;
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.DateUtil;
import
com.neotel.smfcore.hikvision.bean.api.HikApiRequest
;
import
com.neotel.smfcore.hikvision.bean.api.HikApiRequest
;
import
com.neotel.smfcore.hikvision.bean.api.RequestParam
;
import
com.neotel.smfcore.hikvision.bean.api.RequestParam
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.bean.api.ResponseParam
;
import
com.neotel.smfcore.hikvision.service.po.HikApiRequestError
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.client.HttpClient
;
import
org.apache.http.client.HttpClient
;
...
@@ -38,7 +39,7 @@ public class HttpHelper {
...
@@ -38,7 +39,7 @@ public class HttpHelper {
// 设置User-Agent
// 设置User-Agent
private
static
final
String
USER_AGENT
=
"SMD-BOX"
;
private
static
final
String
USER_AGENT
=
"SMD-BOX"
;
public
static
ResponseParam
post
(
HikApiRequest
request
)
throws
ApiException
{
public
static
ResponseParam
post
(
HikApiRequest
Error
request
)
throws
ApiException
{
String
url
=
request
.
getUrl
();
String
url
=
request
.
getUrl
();
String
key
=
request
.
getKey
();
String
key
=
request
.
getKey
();
String
secret
=
request
.
getSecret
();
String
secret
=
request
.
getSecret
();
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论