Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
Gree
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 88cfe62f
由
LN
编写于
2021-07-12 09:33:17 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
Merge remote-tracking branch 'origin/master'
2 个父辈
9d6a689a
30a75ffa
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
27 个修改的文件
包含
244 行增加
和
78 行删除
myproject/src/main/java/com/myproject/bean/qisda/AppendInfo.java
myproject/src/main/java/com/myproject/bean/qisda/InquiryShelfBean.java
myproject/src/main/java/com/myproject/bean/qisda/SoseqLockInfo.java → myproject/src/main/java/com/myproject/bean/qisda/LockInfo.java
myproject/src/main/java/com/myproject/bean/update/DataLog.java
myproject/src/main/java/com/myproject/dao/mongo/IStoragePosDao.java
myproject/src/main/java/com/myproject/dao/mongo/impl/StoragePosDaoImpl.java
myproject/src/main/java/com/myproject/dao/mongo/qisda/IOutInfoDao.java
myproject/src/main/java/com/myproject/dao/mongo/qisda/impl/OutInfoDaoImpl.java
myproject/src/main/java/com/myproject/manager/impl/StoragePosManagerImpl.java
myproject/src/main/java/com/myproject/util/HttpHelper.java
myproject/src/main/java/com/myproject/util/QisdaApi.java
myproject/src/main/java/com/myproject/util/StorageConstants.java
myproject/src/main/java/com/myproject/webapp/controller/qisda/OutInfoSearchController.java
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
myproject/src/main/java/com/myproject/webapp/controller/user/DataLogSearchController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/GreeDeviceController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaApiController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaBindService.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/StorageDataController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
myproject/src/main/resources/mongo.xml
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
myproject/src/main/webapp/WEB-INF/pages/qisda/orderOut.jsp
myproject/src/main/webapp/WEB-INF/pages/qisda/outInfoSearch.jsp
myproject/src/main/webapp/common/metroTopMenu.jsp
myproject/src/main/webapp/decorators/metro.jsp
myproject/src/main/java/com/myproject/bean/qisda/AppendInfo.java
查看文件 @
88cfe62
...
...
@@ -309,6 +309,13 @@ public class AppendInfo {
return
getAction
().
contains
(
"急料"
)
||
getAction
().
contains
(
"指定"
)
||
getAction
().
contains
(
"单独出库"
)
||
isCheckAction
();
}
public
boolean
isPnAction
(){
if
(
action
==
null
){
return
false
;
}
return
getAction
().
contains
(
"PN"
);
}
/**
* 盘点出库需求单
*/
...
...
myproject/src/main/java/com/myproject/bean/qisda/InquiryShelfBean.java
查看文件 @
88cfe62
...
...
@@ -264,9 +264,17 @@ public class InquiryShelfBean {
if
(
hSerial
!=
null
){
Map
<
String
,
ShelfInfo
>
shelfMap
=
hSerialShelfMap
.
get
(
hSerial
);
if
(
shelfMap
!=
null
){
List
<
ShelfInfo
>
shelfList
=
new
ArrayList
<>(
shelfMap
.
values
());
shelfList
.
sort
(
new
Comparator
<
ShelfInfo
>()
{
@Override
public
int
compare
(
ShelfInfo
o1
,
ShelfInfo
o2
)
{
Integer
index1
=
o1
.
getRfidIndex
();
Integer
index2
=
o2
.
getRfidIndex
();
return
index1
.
compareTo
(
index2
);
}
});
ShelfInfo
minIndexShelf
=
null
;
for
(
ShelfInfo
shelf
:
shelfMap
.
values
())
{
for
(
ShelfInfo
shelf
:
shelfList
)
{
if
(
shelf
.
isFull
()){
//已经放满,查找下一个
continue
;
...
...
@@ -290,9 +298,21 @@ public class InquiryShelfBean {
log
.
error
(
"任务条码["
+
task
.
getBarcode
()+
"]已无料架可放"
);
return
null
;
}
else
{
lockLoc
=
minIndexShelf
.
lockOneEmptyLoc
(
task
);
if
(
lockLoc
!=
null
){
shelfInfo
=
minIndexShelf
;
//这里判断是否有未绑定过的料架
boolean
hasEmptyShelf
=
false
;
for
(
String
rfid
:
rfidList
)
{
ShelfInfo
shelf
=
findShelfByRealRfid
(
rfid
);
if
(
shelf
==
null
){
hasEmptyShelf
=
true
;
break
;
}
}
if
(
hasEmptyShelf
){
lockLoc
=
minIndexShelf
.
lockOneEmptyLoc
(
task
);
if
(
lockLoc
!=
null
){
shelfInfo
=
minIndexShelf
;
}
}
}
}
...
...
myproject/src/main/java/com/myproject/bean/qisda/
Soseq
LockInfo.java
→
myproject/src/main/java/com/myproject/bean/qisda/LockInfo.java
查看文件 @
88cfe62
...
...
@@ -6,7 +6,7 @@ import java.util.List;
/**
* Created by sunke on 2020/6/12.
*/
public
class
Soseq
LockInfo
{
public
class
LockInfo
{
/**
* 工单序号
*/
...
...
@@ -15,6 +15,11 @@ public class SoseqLockInfo {
private
String
so
;
/**
* 需求序号
*/
private
String
hSerial
;
/**
* 站位序号
*/
private
List
<
LockItemInfo
>
lockItems
=
new
ArrayList
<>();
...
...
@@ -46,4 +51,12 @@ public class SoseqLockInfo {
public
void
addLockItem
(
LockItemInfo
lockItem
){
lockItems
.
add
(
lockItem
);
}
public
String
gethSerial
()
{
return
hSerial
;
}
public
void
sethSerial
(
String
hSerial
)
{
this
.
hSerial
=
hSerial
;
}
}
myproject/src/main/java/com/myproject/bean/update/DataLog.java
查看文件 @
88cfe62
...
...
@@ -618,10 +618,10 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
}
/**
* 是否是在
皮带
线上
* 是否是在
流水
线上
*/
public
boolean
isInBelt
(){
return
status
.
toLowerCase
().
equals
(
"inbelt"
);
return
status
.
toLowerCase
().
equals
(
"inbelt"
)
||
status
.
toLowerCase
().
equals
(
"inline"
)
||
status
.
toLowerCase
().
equals
(
"inrobot"
)
;
}
/**
...
...
myproject/src/main/java/com/myproject/dao/mongo/IStoragePosDao.java
查看文件 @
88cfe62
...
...
@@ -72,6 +72,8 @@ public interface IStoragePosDao extends IMongoDao {
List
<
StoragePos
>
findBindList
(
String
hSerial
);
int
countBind
(
String
hSerial
);
List
<
StoragePos
>
findBindList
(
String
hSerial
,
String
outItemId
);
/**
...
...
myproject/src/main/java/com/myproject/dao/mongo/impl/StoragePosDaoImpl.java
查看文件 @
88cfe62
...
...
@@ -395,6 +395,13 @@ public class StoragePosDaoImpl extends AbstractMongoDao implements IStoragePosDa
return
findByQuery
(
q
);
}
@Override
public
int
countBind
(
String
hSerial
){
Criteria
c
=
Criteria
.
where
(
"barcode.appendInfo.hSerial"
).
is
(
hSerial
);
Query
q
=
new
Query
(
c
);
return
countByQuery
(
q
);
}
/**
* 获取工单的所有绑定料盘
*/
...
...
myproject/src/main/java/com/myproject/dao/mongo/qisda/IOutInfoDao.java
查看文件 @
88cfe62
...
...
@@ -26,7 +26,11 @@ public interface IOutInfoDao extends IMongoDao {
void
updateTaskFinishNum
(
String
hSerail
,
int
taskFinishNum
);
void
updateBindNum
(
String
hSerail
,
int
taskFinishNum
);
void
updateOutReelNum
(
String
hSerial
,
int
outReelNum
);
void
updateExecuteTime
(
String
hSerial
,
long
firstExecuteTime
);
void
updateOutInfo
(
OutInfo
outInfo
);
}
myproject/src/main/java/com/myproject/dao/mongo/qisda/impl/OutInfoDaoImpl.java
查看文件 @
88cfe62
...
...
@@ -90,6 +90,17 @@ public class OutInfoDaoImpl extends AbstractMongoDao implements IOutInfoDao {
updateFirst
(
query
,
update
);
}
/**
* 更新建议和必须出仓时间及线别目的地
*/
@Override
public
void
updateOutInfo
(
OutInfo
outInfo
){
Criteria
c
=
Criteria
.
where
(
"hSerial"
).
is
(
outInfo
.
gethSerial
());
Query
query
=
Query
.
query
(
c
);
Update
update
=
Update
.
update
(
"sdate"
,
outInfo
.
getSdate
()).
set
(
"mdate"
,
outInfo
.
getMdate
()).
set
(
"line"
,
outInfo
.
getLine
());
updateFirst
(
query
,
update
);
}
@Override
public
void
updateTaskEndTime
(
String
hSerial
,
long
taskEndTime
){
update
(
hSerial
,
"taskEndTime"
,
taskEndTime
);
...
...
@@ -101,6 +112,11 @@ public class OutInfoDaoImpl extends AbstractMongoDao implements IOutInfoDao {
}
@Override
public
void
updateBindNum
(
String
hSerail
,
int
taskFinishNum
)
{
update
(
hSerail
,
"totalBindNum"
,
taskFinishNum
);
}
@Override
public
void
updateOutReelNum
(
String
hSerial
,
int
outReelNum
){
update
(
hSerial
,
"outReelNum"
,
outReelNum
);
}
...
...
myproject/src/main/java/com/myproject/manager/impl/StoragePosManagerImpl.java
查看文件 @
88cfe62
...
...
@@ -155,12 +155,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
is
(
barcode
.
getHeight
());
}
else
if
(
compatibleType
==
StorageConstants
.
COMPATIBLE_TYPE
.
FULLY_COMPATIBLE
){
//同厚度兼容
//c = c.and("w").gte(barcode.getPlateSize()).and("h").gte(barcode.getHeight());//宽度大于等于料盘宽度,高度大于等于料盘高度
if
(
barcode
.
getPlateSize
()
!=
7
){
//
if(barcode.getPlateSize() != 7){
c
=
c
.
and
(
"w"
).
gte
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
//除7寸外,完全兼容
}
else
{
//=7寸使用同尺寸兼容
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
}
//
}else{
//
//=7寸使用同尺寸兼容
//
c = c.and("w").is(barcode.getPlateSize()).and("h").gte(barcode.getHeight());
//
}
}
else
if
(
compatibleType
==
StorageConstants
.
COMPATIBLE_TYPE
.
SIZE_COMPATIBLE
){
//同尺寸兼容
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
//宽度等于料盘宽度,高度大于等于料盘高度
...
...
myproject/src/main/java/com/myproject/util/HttpHelper.java
查看文件 @
88cfe62
...
...
@@ -18,6 +18,7 @@ import org.apache.logging.log4j.util.Strings;
import
java.io.*
;
import
java.net.URL
;
import
java.net.URLConnection
;
import
java.net.URLEncoder
;
import
java.util.*
;
import
java.util.Map.Entry
;
...
...
@@ -41,7 +42,7 @@ public class HttpHelper {
// return postJson(url,params,null, "http");
// }
public
static
String
get
(
String
url
,
Hash
Map
<
String
,
String
>
params
)
throws
ApiException
{
public
static
String
get
(
String
url
,
Map
<
String
,
String
>
params
)
throws
ApiException
{
return
get
(
url
,
params
,
null
,
"http"
);
}
...
...
@@ -233,7 +234,7 @@ public class HttpHelper {
* 请求协议 "http" / "https"
* @return 服务器响应的请求结果
*/
public
static
String
get
(
String
url
,
Hash
Map
<
String
,
String
>
params
,
public
static
String
get
(
String
url
,
Map
<
String
,
String
>
params
,
HashMap
<
String
,
String
>
cookies
,
String
protocol
)
throws
ApiException
{
// if (protocol.equalsIgnoreCase("https")) {
// Protocol httpsProtocol = new Protocol("https", new SecureProtocolSocketFactoryImpl(), 443);
...
...
@@ -251,7 +252,9 @@ public class HttpHelper {
int
i
=
0
;
while
(
iterator
.
hasNext
())
{
Entry
<
String
,
String
>
entry
=
iterator
.
next
();
data
[
i
]
=
new
NameValuePair
(
entry
.
getKey
(),
entry
.
getValue
());
String
paramValue
=
entry
.
getValue
();
paramValue
=
URLEncoder
.
encode
(
paramValue
);
data
[
i
]
=
new
NameValuePair
(
entry
.
getKey
(),
paramValue
);
++
i
;
}
getMethod
.
setQueryString
(
data
);
...
...
myproject/src/main/java/com/myproject/util/QisdaApi.java
查看文件 @
88cfe62
此文件的差异被折叠,
点击展开。
myproject/src/main/java/com/myproject/util/StorageConstants.java
查看文件 @
88cfe62
...
...
@@ -531,7 +531,7 @@ public class StorageConstants {
/**
* 完全兼容
*/
FULLY_COMPATIBLE
(
"
11,13,15
完全兼容"
),
FULLY_COMPATIBLE
(
"完全兼容"
),
/**
* 同尺寸兼容
*/
...
...
myproject/src/main/java/com/myproject/webapp/controller/qisda/OutInfoSearchController.java
查看文件 @
88cfe62
...
...
@@ -43,26 +43,38 @@ public class OutInfoSearchController extends BaseSearchController {
@RequestMapping
(
"/outInfoSearch*"
)
public
String
onSubmit
(
@ModelAttribute
(
"searchCriteria"
)
BaseSearchCriteria
searchCriteria
,
HttpServletRequest
request
)
{
boolean
stop
Out
=
dataCache
.
getSettings
().
isStopOut
();
request
.
setAttribute
(
"stop
Out"
,
stopOut
);
boolean
stop
Job
=
dataCache
.
getSettings
().
isStopJob
();
request
.
setAttribute
(
"stop
Job"
,
stopJob
);
Query
query
=
new
Query
();
Criteria
criteria
=
new
Criteria
();
addLikeParam
(
request
,
criteria
,
"so"
);
String
reelId
=
request
.
getParameter
(
"reelId"
);
if
(
Strings
.
isNotBlank
(
reelId
)){
Pattern
pattern
=
Pattern
.
compile
(
reelId
,
Pattern
.
CASE_INSENSITIVE
);
Criteria
c
=
Criteria
.
where
(
"reelID"
).
regex
(
pattern
);
String
lineStr
=
request
.
getParameter
(
"line"
);
if
(
lineStr
==
null
){
lineStr
=
"NONE"
;
}
request
.
setAttribute
(
"line"
,
lineStr
);
if
(
Strings
.
isNotBlank
(
lineStr
)){
String
line
=
lineStr
;
if
(
lineStr
.
equals
(
"NONE"
)){
line
=
null
;
}
criteria
.
and
(
"line"
).
is
(
line
);
}
String
pn
=
request
.
getParameter
(
"pn"
);
if
(
Strings
.
isNotBlank
(
pn
)){
Pattern
pattern
=
Pattern
.
compile
(
pn
,
Pattern
.
CASE_INSENSITIVE
);
Criteria
c
=
Criteria
.
where
(
"pn"
).
regex
(
pattern
);
List
<
OutItem
>
itemList
=
outItemDao
.
findByQuery
(
new
Query
(
c
));
List
<
String
>
hSerialList
=
new
ArrayList
<>();
for
(
OutItem
outItem
:
itemList
)
{
hSerialList
.
add
(
outItem
.
gethSerial
());
}
criteria
.
and
(
"hSerial"
).
in
(
hSerialList
);
request
.
setAttribute
(
"
reelId"
,
reelId
);
request
.
setAttribute
(
"
pn"
,
pn
);
}
else
{
addLikeParam
(
request
,
criteria
,
"hSerial"
);
}
...
...
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
查看文件 @
88cfe62
...
...
@@ -77,6 +77,7 @@ public class OutInfoCache {
if
(!
isProcessTimer
){
isProcessTimer
=
true
;
try
{
closeOutInfos
();
if
(!
dataCache
.
getSettings
().
isStopJob
()){
updateMustExeOutInfo
();
executeBindTask
();
...
...
@@ -90,15 +91,16 @@ public class OutInfoCache {
}
}
public
void
executeOutTask
(){
/**
* 关闭已完成的需求单
*/
public
void
closeOutInfos
(){
Date
now
=
new
Date
();
List
<
OutInfo
>
cachedOutInfos
=
getCachedOutInfos
();
for
(
OutInfo
unEndOutInfo
:
cachedOutInfos
)
{
if
(!
unEndOutInfo
.
isClosed
()
&&
unEndOutInfo
.
isTaskEnd
()
&&
!
unEndOutInfo
.
isReelCutAction
()){
long
last
EndTime
=
unEndOutInfo
.
getTaskEndTime
();
if
(
now
.
getTime
()
-
last
EndTime
>=
5
*
60
*
1000
){
long
task
EndTime
=
unEndOutInfo
.
getTaskEndTime
();
if
(
taskEndTime
>
0
&&
now
.
getTime
()
-
task
EndTime
>=
5
*
60
*
1000
){
//任务已结束5分钟
if
(
unEndOutInfo
.
isEndOutInfo
()){
log
.
info
(
"需求单["
+
unEndOutInfo
.
gethSerial
()+
"]已执行过,且是工单的最后一个需求单,关闭工单"
+
unEndOutInfo
.
getSo
()+
"["
+
unEndOutInfo
.
getSoseq
()+
"]"
);
...
...
@@ -110,6 +112,19 @@ public class OutInfoCache {
}
}
if
(
unEndOutInfo
.
getFirstExecuteTime
()<=
0
&&
unEndOutInfo
.
getTotalBindNum
()
<=
0
){
//未执行过,且未绑定的,更新绑定数量
int
bindCount
=
storagePosDao
.
countBind
(
unEndOutInfo
.
gethSerial
());
updateBindNum
(
unEndOutInfo
.
gethSerial
(),
bindCount
);
}
}
}
public
void
executeOutTask
(){
Date
now
=
new
Date
();
List
<
OutInfo
>
cachedOutInfos
=
getCachedOutInfos
();
for
(
OutInfo
unEndOutInfo
:
cachedOutInfos
)
{
if
(
unEndOutInfo
.
isReelCutAction
()
||
unEndOutInfo
.
isUrgentAction
()
||
unEndOutInfo
.
isCheckAction
()){
//单独出库,分盘料或盘点料,不按时间可直接执行,距离上次任务完成5分钟后才可再次执行
if
(
unEndOutInfo
.
isTaskEnd
()
||
unEndOutInfo
.
isNew
()){
...
...
@@ -277,7 +292,11 @@ public class OutInfoCache {
continue
;
}
//寻找未执行过的到达建议时间和必须出库时间的工单料(首盘或补料)
if
(
unEndOutInfo
.
isTailAction
()
||
unEndOutInfo
.
isFirstReelAction
()){
if
(
unEndOutInfo
.
isTailAction
()
||
unEndOutInfo
.
isFirstReelAction
()
||
unEndOutInfo
.
isPnAction
()){
if
(
Strings
.
isBlank
(
unEndOutInfo
.
getLine
())){
//无目的地
continue
;
}
long
firstExecuteTime
=
unEndOutInfo
.
getFirstExecuteTime
();
if
(
firstExecuteTime
<
0
){
if
(
mustOutInfo
==
null
||
firstExecuteTime
>
mustOutInfo
.
getFirstExecuteTime
()){
...
...
@@ -626,6 +645,16 @@ public class OutInfoCache {
return
outInfoList
;
}
public
void
updateBindNum
(
String
hSerial
,
int
bindNum
){
OutInfo
outInfo
=
getOutInfoFromCache
(
hSerial
);
if
(
outInfo
!=
null
&&
outInfo
.
getFirstExecuteTime
()
<=
0
)
{
//未执行过,更新
outInfo
.
setTotalBindNum
(
bindNum
);
outInfoDao
.
updateBindNum
(
hSerial
,
bindNum
);
outInfoMap
.
put
(
hSerial
,
outInfo
);
}
}
/**
* 任务开始时,初始化出库任务数
* @param hSerial
...
...
@@ -811,6 +840,25 @@ public class OutInfoCache {
}
}
/**
* 更新需求单的建议和必须出仓时间及线别
*/
public
void
updateOutInfo
(
OutInfo
outInfo
){
//已经执行过的不能更新
outInfoDao
.
updateOutInfo
(
outInfo
);
if
(
outInfo
.
isPnAction
()
&&
Strings
.
isNotBlank
(
outInfo
.
getLine
())){
qisdaBindService
.
bindPnOutInfo
(
outInfo
);
List
<
StoragePos
>
bindPosList
=
storagePosDao
.
findBindList
(
outInfo
.
gethSerial
());
int
bindReelNum
=
bindPosList
.
size
();
outInfo
.
setTotalBindNum
(
bindReelNum
);
log
.
info
(
"PN需求单["
+
outInfo
.
gethSerial
()+
"]绑定料盘数量为:"
+
bindReelNum
);
outInfoDao
.
save
(
outInfo
);
}
outInfoMap
.
put
(
outInfo
.
gethSerial
(),
outInfo
);
log
.
info
(
"更新需求单["
+
outInfo
.
gethSerial
()+
"]的建议时间为:"
+
outInfo
.
getSdate
()
+
" 必须时间为:"
+
outInfo
.
getMdate
()
+
" 目的地为:"
+
outInfo
.
getLine
());
}
private
void
removeFromCache
(
String
hSerial
){
outInfoMap
.
remove
(
hSerial
);
...
...
@@ -867,14 +915,15 @@ public class OutInfoCache {
* @return
*/
private
ResultBean
checkOutInfoCanOut
(
OutInfo
outInfo
){
if
(
dataCache
.
getSettings
().
isStopOut
()){
return
ResultBean
.
newErrorResult
(
100
,
"系统更新中,暂停出库,请稍后再试"
,
false
);
}
if
(
outInfo
==
null
){
return
ResultBean
.
newErrorResult
(
1001
,
"未找到需求单"
,
false
);
}
if
(
Strings
.
isBlank
(
outInfo
.
getLine
())){
return
ResultBean
.
newErrorResult
(
1007
,
"未设置线别"
,
false
);
}
String
hSerial
=
outInfo
.
gethSerial
();
String
executingHSerial
=
QisdaCache
.
getCurrentOrderHSerial
();
if
(
hSerial
.
equals
(
executingHSerial
)){
...
...
@@ -894,20 +943,22 @@ public class OutInfoCache {
//是否有工单料任务
boolean
hasOrderTask
=
false
;
boolean
hasUrgenReel
=
false
;
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
dataLog
.
isCheckOutTask
()){
if
(
dataLog
.
isCheckOutTask
()
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
()
){
//if(!dataLog.isUrgentReel() && !dataLog.isCutReel() && !dataLog.isLessSendReel()){
if
(
dataLog
.
getAppendInfo
().
isTailAction
()
||
dataLog
.
getAppendInfo
().
isFirstReelAction
()){
//工单料(不是指定料也不是分盘料即首盘或补料)
hasOrderTask
=
true
;
}
else
if
(
dataLog
.
getAppendInfo
().
isPnAction
()){
if
(!
dataLog
.
isInBelt
()){
return
ResultBean
.
newErrorResult
(
1006
,
"上一需求单全部任务出库完成后才可执行"
,
false
);
}
}
else
{
//分盘和紧急料或缺料补发的料
String
taskHSerial
=
dataLog
.
getAppendInfo
().
gethSerial
();
if
(
taskHSerial
.
equals
(
outInfo
.
gethSerial
())){
return
ResultBean
.
newErrorResult
(
1002
,
"当前需求单还有未完成的任务"
,
false
);
}
hasUrgenReel
=
true
;
}
}
}
...
...
@@ -954,6 +1005,11 @@ public class OutInfoCache {
private
static
AtomicBoolean
outProcessing
=
new
AtomicBoolean
(
false
);
public
synchronized
ResultBean
checkOutOutItems
(
String
hSerial
){
if
(
dataCache
.
getSettings
().
isStopOut
()){
return
ResultBean
.
newErrorResult
(
1001
,
"系统更新中,暂停出入库,请稍后再试"
,
false
);
}
boolean
canProcess
=
outProcessing
.
compareAndSet
(
false
,
true
);
try
{
if
(
canProcess
){
...
...
@@ -970,7 +1026,7 @@ public class OutInfoCache {
}
}
p
ublic
synchronized
ResultBean
executeOutItems
(
String
hSerial
){
p
rivate
synchronized
ResultBean
executeOutItems
(
String
hSerial
){
//OutInfo outInfo = outInfoDao.findByHSerial(hSerial);
OutInfo
outInfoToExecute
=
getOutInfoFromCache
(
hSerial
);
...
...
@@ -1103,12 +1159,6 @@ public class OutInfoCache {
msg
=
"需求单"
+
hSerial
+
"任务分配完成,共["
+
outReelNum
+
"]盘任务"
;
log
.
info
(
msg
);
}
else
{
msg
=
"需求单"
+
outInfo
.
gethSerial
()+
"本次出库料盘数量为0"
;
if
(
outInfo
.
isEndOutInfo
()){
log
.
info
(
"需求单["
+
outInfo
.
gethSerial
()+
"]是工单的最后一个需求单,关闭工单"
+
outInfo
.
getSo
()+
"["
+
outInfo
.
getSoseq
()+
"]"
);
closeSoSeq
(
outInfo
.
getSoseq
());
}
}
if
(
outInfo
.
isReelCutAction
()
||
outInfo
.
isFirstReelAction
()){
...
...
@@ -1118,6 +1168,15 @@ public class OutInfoCache {
QisdaApi
.
VMILocationOutFeedback
(
outItemList
,
lessBind
);
}
}
if
(
outReelNum
==
0
){
msg
=
"需求单"
+
outInfo
.
gethSerial
()+
"本次出库料盘数量为0"
;
if
(
outInfo
.
isEndOutInfo
()){
log
.
info
(
"需求单["
+
outInfo
.
gethSerial
()+
"]是工单的最后一个需求单,关闭工单"
+
outInfo
.
getSo
()+
"["
+
outInfo
.
getSoseq
()+
"]"
);
closeSoSeq
(
outInfo
.
getSoseq
());
}
else
{
closeHSerial
(
outInfo
.
gethSerial
());
}
}
return
ResultBean
.
newOkResult
(
msg
,
"ok"
);
}
...
...
myproject/src/main/java/com/myproject/webapp/controller/user/DataLogSearchController.java
查看文件 @
88cfe62
...
...
@@ -82,13 +82,13 @@ public class DataLogSearchController extends BaseSearchController {
String
barcode
=
searchCriteria
.
getBarcode
();
if
(!
Strings
.
isNullOrEmpty
(
barcode
)){
Pattern
pattern
=
Pattern
.
compile
(
barcode
,
Pattern
.
CASE_INSENSITIVE
);
Pattern
pattern
=
Pattern
.
compile
(
escapeExprSpecialWord
(
barcode
)
,
Pattern
.
CASE_INSENSITIVE
);
criteria
.
and
(
"barcode"
).
regex
(
pattern
);
}
String
partNumber
=
searchCriteria
.
getPartNumber
();
if
(!
Strings
.
isNullOrEmpty
(
partNumber
))
{
Pattern
pattern
=
Pattern
.
compile
(
partNumber
,
Pattern
.
CASE_INSENSITIVE
);
Pattern
pattern
=
Pattern
.
compile
(
escapeExprSpecialWord
(
partNumber
)
,
Pattern
.
CASE_INSENSITIVE
);
criteria
.
and
(
"partNumber"
).
regex
(
pattern
);
}
...
...
@@ -129,6 +129,18 @@ public class DataLogSearchController extends BaseSearchController {
return
SUCCESS_VIEW
;
}
private
String
escapeExprSpecialWord
(
String
keyword
)
{
if
(!
Strings
.
isNullOrEmpty
(
keyword
))
{
String
[]
fbsArr
=
{
"\\"
,
"$"
,
"("
,
")"
,
"*"
,
"+"
,
"."
,
"["
,
"]"
,
"?"
,
"^"
,
"{"
,
"}"
,
"|"
};
for
(
String
key
:
fbsArr
)
{
if
(
keyword
.
contains
(
key
))
{
keyword
=
keyword
.
replace
(
key
,
"\\"
+
key
);
}
}
}
return
keyword
;
}
@Override
protected
BaseSearchCriteria
getNewSearchCriteria
()
{
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/GreeDeviceController.java
查看文件 @
88cfe62
...
...
@@ -65,7 +65,6 @@ public class GreeDeviceController {
}
}
String
hSerial
=
QisdaCache
.
getCurrentOrderHSerial
();
List
<
String
>
usedRfidList
=
InquiryShelfBean
.
getUsedRfidList
(
hSerial
);
Map
<
String
,
Integer
>
rfidMap
=
new
HashMap
<>();
if
(!
Strings
.
isBlank
(
rfids
))
{
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaApiController.java
查看文件 @
88cfe62
此文件的差异被折叠,
点击展开。
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaBindService.java
查看文件 @
88cfe62
此文件的差异被折叠,
点击展开。
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
查看文件 @
88cfe62
...
...
@@ -171,6 +171,8 @@ public class QisdaDeviceController extends BaseController {
try
{
String
rfid
=
request
.
getParameter
(
"rfid"
);
//是否是在横移上判断
String
onMoving
=
request
.
getParameter
(
"onMoving"
);
String
codeStr
=
request
.
getParameter
(
"barcode"
);
Barcode
barcode
=
dataCache
.
resolveOneValideBarcode
(
codeStr
);
DataLog
task
=
taskService
.
getFinishedTask
(
barcode
.
getBarcode
());
...
...
@@ -199,9 +201,9 @@ public class QisdaDeviceController extends BaseController {
AppendInfo
appendInfo
=
task
.
getAppendInfo
();
ShelfLoc
shelfLoc
=
InquiryShelfBean
.
lockShelfLoc
(
task
,
rfid
);
if
(
shelfLoc
==
null
){
String
msg
=
"获取料架["
+
rfid
+
"]位置信息失败"
;
log
.
info
(
msg
);
return
ResultBean
.
newErrorResult
(
202
,
msg
);
String
msg
=
task
.
getBarcode
()
+
"获取料架["
+
rfid
+
"]位置信息失败"
;
//
log.info(msg);
return
ResultBean
.
newErrorResult
(
99
,
msg
);
}
String
rfidToSave
=
shelfLoc
.
getRealRfid
();
...
...
@@ -214,8 +216,10 @@ public class QisdaDeviceController extends BaseController {
appendInfo
.
setRfidLoc
(
shelfLoc
.
getLoc
());
task
.
setAppendInfo
(
appendInfo
);
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
INROBOT
.
name
());
task
.
setLocInfo
(
""
);
if
(!
Boolean
.
valueOf
(
onMoving
)){
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
INROBOT
.
name
());
task
.
setLocInfo
(
""
);
}
task
=
dataLogDao
.
save
(
task
);
taskService
.
updateFinishedTask
(
task
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/StorageDataController.java
查看文件 @
88cfe62
...
...
@@ -8,6 +8,7 @@ import com.google.common.collect.Sets;
import
com.myproject.bean.CodeBean
;
import
com.myproject.bean.json.*
;
import
com.myproject.bean.qisda.ReelLockPosInfo
;
import
com.myproject.bean.qisda.ResultBean
;
import
com.myproject.bean.search.PageList
;
import
com.myproject.bean.update.*
;
import
com.myproject.bean.utils.BoxStatusBean
;
...
...
@@ -251,6 +252,10 @@ public class StorageDataController extends BaseController {
@ResponseBody
public
String
checkPos
(
HttpServletRequest
request
)
{
if
(
dataCache
.
getSettings
().
isStopOut
()){
return
"系统更新中,暂停出入库,请稍后再试"
;
}
String
cid
=
request
.
getParameter
(
"cid"
);
String
partnumber
=
request
.
getParameter
(
"pn"
);
if
(
partnumber
!=
null
){
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
查看文件 @
88cfe62
...
...
@@ -843,7 +843,7 @@ public class TaskService implements ITaskService {
QisdaApi
.
VMIMateriaRecAss
(
task
,
barcode
,
latest
);
}
}
}
else
if
(
taskAppendInfo
.
isUrgentAction
()
||
taskAppendInfo
.
isReelCutAction
()){
}
else
if
(
taskAppendInfo
.
isUrgentAction
()
||
taskAppendInfo
.
isReelCutAction
()
||
taskAppendInfo
.
isPnAction
()
){
//紧急料或分盘料,增加任务完成数量
log
.
info
(
"紧急料或分盘料["
+
task
.
getBarcode
()+
"]任务已出库完成,发料任务完成数量+1"
);
outInfoCache
.
incTaskFinishNum
(
taskAppendInfo
.
gethSerial
(),
0
,
0
);
...
...
myproject/src/main/resources/mongo.xml
查看文件 @
88cfe62
...
...
@@ -22,7 +22,7 @@
socket-timeout=
"${mongo.socketTimeout}"
slave-ok=
"${mongo.slaveOk}"
write-number=
"1"
write-timeout=
"0"
write-fsync=
"true"
/>
</mongo:mongo>
<mongo:db-factory
dbname=
"
qisda
"
username=
"${mongo.username}"
<mongo:db-factory
dbname=
"
gree
"
username=
"${mongo.username}"
password=
"${mongo.password}"
mongo-ref=
"mongo"
/>
<bean
id=
"mongoTemplate"
class=
"org.springframework.data.mongodb.core.MongoTemplate"
>
<constructor-arg
name=
"mongoDbFactory"
ref=
"mongoDbFactory"
/>
...
...
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
查看文件 @
88cfe62
...
...
@@ -223,15 +223,15 @@
<%--<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true">--%>
<%--<fmt:formatDate value="${pos.barcode.expireDate}" pattern="yyyy-MM-dd"/>--%>
<%--</display:column>--%>
<
%--<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT, ROLE_MANAGE_FEEDER">--%
>
<
%--<display:column titleKey="checkOut.operate" media="html">--%
>
<
%--<c:if test="${!limitCheckOut}">--%
>
<%--<button class="btn yellow limit${pos.barcode.inFixture}" id="btn${pos.id}"--%>
<%--onclick="checkoutStorage('${pos.id}')">--%
>
<
%--<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>--%
>
<
%--</c:if>--%
>
<
%--</display:column>--%
>
<
%--</security:authorize>--%
>
<
security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT, ROLE_MANAGE_FEEDER"
>
<
display:column titleKey="checkOut.operate" media="html"
>
<
c:if test="${!limitCheckOut}"
>
<button class="btn yellow limit${pos.barcode.inFixture}" id="btn${pos.id}"
onclick="checkoutStorage('${pos.id}')"
>
<
i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button
>
<
/c:if
>
<
/display:column
>
<
/security:authorize
>
<c:if test="${limitCheckOut}">
<c:set var="limitCodes" value="${pos.barcode.inFixture},${limitCodes}"/>
</c:if>
...
...
myproject/src/main/webapp/WEB-INF/pages/qisda/orderOut.jsp
查看文件 @
88cfe62
...
...
@@ -75,7 +75,7 @@
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#executing" href="#priorityOrder">
<i class="icon-cursor-move"></i>
[首盘] 需求单: 808 工单: 879235
备料单: F001_879235N_1
<span class="right">建议时间: 2019-11-18 08:59</span>
[首盘] 需求单: 808 工单: 879235 <span class="right">建议时间: 2019-11-18 08:59</span>
</a>
</h4>
</div>
...
...
@@ -101,7 +101,7 @@
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#executing" href="#priorityOrder">
<i class="icon-cursor-move"></i>
[首盘] 需求单: 808 工单: 879235
备料单: F001_879235N_1
<span class="right">建议时间: 2019-11-18 08:59</span>
[首盘] 需求单: 808 工单: 879235 <span class="right">建议时间: 2019-11-18 08:59</span>
</a>
</h4>
</div>
...
...
@@ -144,24 +144,24 @@
'<h4 class="panel-title">' +
'<a class="accordion-toggle" data-toggle="collapse" href="#'+outInfo.hSerial+'">' +
moveHandle + //outInfo.firstExecuteTime +
'需求单:'+ outInfo.hSerial+' ['+outInfo.action+'] 工单: ' + outInfo.so +'
备料单: ' + outInfo.refno + '[' + outInfo.sendStatus +'] 工单序号:' + outInfo.soseq
+
'需求单:'+ outInfo.hSerial+' ['+outInfo.action+'] 工单: ' + outInfo.so +'
线别: ' + outInfo.line + ' 绑定:' + outInfo.totalBindNum
+
'<span class="right">创建时间: '+createDate+'</span>' +
'<span class="right">建议时间: '+sdate+'</span>' +
'<span class="right">必须时间: '+mdate+'</span>' +
//
'<span class="right">必须时间: '+mdate+'</span>' +
//'<span class="right">['+outInfo.firstExecuteTime+']</span>' +
'</a></h4></div>' +
'<div id="'+outInfo.hSerial+'" class="panel-collapse collapse">' +
'<div class="panel-body bg-grey">' +
'<ul class="list-inline">' +
'<li><i class="fa fa-tasks"></i>工单: '+outInfo.so+'</li>' +
'<li><i class="fa fa-briefcase"></i>备料单: '+outInfo.refno+'</li>' +
//
'<li><i class="fa fa-briefcase"></i>备料单: '+outInfo.refno+'</li>' +
'<li><i class="fa fa-calendar"></i>建议时间:'+sdate+'</li>' +
'<li><i class="fa fa-star"></i>必须出仓日期:'+mdate+'</li>' +
'<li><i class="fa fa-star"></i>创建时间:'+createDate+'</li>' +
'</ul>' +
'<h4 class="list-inline '+bgClass+'">' +
'线体['+outInfo.line+']未解绑料架信息: '+outInfo.lineBindShelfInfo+'' +
'</h4>' +
//
'<h4 class="list-inline '+bgClass+'">' +
//
'线体['+outInfo.line+']未解绑料架信息: '+outInfo.lineBindShelfInfo+'' +
//
'</h4>' +
'</div></div></div></div>';
return infoHtml;
}
...
...
@@ -174,6 +174,9 @@
for(var i in data){
var outInfo = data[i];
if(outInfo.line == '' || outInfo.line == null){
continue;
}
var infoHtml = getOutInfoHtml(outInfo);
if(outInfo.executing || outInfo.sendLess || outInfo.firstExecuteTime > 0){
executingHtml = executingHtml + infoHtml;
...
...
myproject/src/main/webapp/WEB-INF/pages/qisda/outInfoSearch.jsp
查看文件 @
88cfe62
此文件的差异被折叠,
点击展开。
myproject/src/main/webapp/common/metroTopMenu.jsp
查看文件 @
88cfe62
...
...
@@ -85,11 +85,11 @@
</a>
</li>
<
%--<li class="classic-menu-dropdown">--%
>
<
%--<a href="${ctx}/workOrder/checkOutSettings.html" name="workOrder">--%
>
<
%--<fmt:message key="menu.outRule"/><span class="selected"></span>--%
>
<
%--</a>--%
>
<
%--</li>--%
>
<
li class="classic-menu-dropdown"
>
<
a href="${ctx}/workOrder/checkOutSettings.html" name="workOrder"
>
<
fmt:message key="menu.outRule"/><span class="selected"></span
>
<
/a
>
<
/li
>
</security:authorize>
</ul>
</security:authorize>
...
...
myproject/src/main/webapp/decorators/metro.jsp
查看文件 @
88cfe62
...
...
@@ -237,9 +237,9 @@
<!-- BEGIN FOOTER -->
<div
class=
"page-footer"
>
<div
class=
"page-footer-inner"
>
2016
©
<a
href=
"
${ctx}/updateHistory.html
"
>
SMD BOX
</a>
2016
©
<a
href=
""
>
SMD BOX
</a>
</div>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version:
2021.03.25
</span>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version:
1.6.2910
</span>
<div
class=
"scroll-to-top"
>
<i
class=
"icon-arrow-up"
></i>
</div>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论