Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
QisdaNew
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit f97ca246
由
sunke
编写于
2020-05-28 08:43:39 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
补料出库时,按slot循环取数量最大的一盘
清理Qisda库存接口调用
1 个父辈
3b3c8ba9
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
215 行增加
和
73 行删除
myproject/src/main/java/com/myproject/bean/update/DataLog.java
myproject/src/main/java/com/myproject/util/DateUtil.java
myproject/src/main/java/com/myproject/util/QisdaApi.java
myproject/src/main/java/com/myproject/webapp/controller/cloud/AlarmInfoSearchController.java
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
myproject/src/main/java/com/myproject/webapp/controller/storage/StoragePosUpdateController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
myproject/src/main/webapp/WEB-INF/pages/storage/storageUpdate.jsp
myproject/src/main/java/com/myproject/bean/update/DataLog.java
查看文件 @
f97ca24
...
@@ -156,9 +156,9 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
...
@@ -156,9 +156,9 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
private
String
operator
;
private
String
operator
;
/**
/**
*
关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*
出库顺序,补料时需要按此顺序从小到大执行出库
*/
*/
private
List
<
String
>
relationCodes
;
private
int
outOrder
=
0
;
public
String
getStorageName
()
{
public
String
getStorageName
()
{
return
storageName
;
return
storageName
;
...
@@ -476,25 +476,10 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
...
@@ -476,25 +476,10 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
return
eq
;
return
eq
;
}
}
@Override
// @Override
public
int
hashCode
()
{
// public int hashCode() {
return
getId
().
hashCode
();
// return getId().hashCode();
}
// }
public
List
<
String
>
getRelationCodes
()
{
return
relationCodes
;
}
public
void
setRelationCodes
(
List
<
String
>
relationCodes
)
{
this
.
relationCodes
=
relationCodes
;
}
public
void
addRelationCode
(
String
relationCode
){
if
(
relationCodes
==
null
){
relationCodes
=
Lists
.
newArrayList
();
}
relationCodes
.
add
(
relationCode
);
}
public
boolean
isSingleOut
()
{
public
boolean
isSingleOut
()
{
return
singleOut
;
return
singleOut
;
...
@@ -623,4 +608,12 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
...
@@ -623,4 +608,12 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
public
void
setLocInfo
(
String
locInfo
)
{
public
void
setLocInfo
(
String
locInfo
)
{
this
.
locInfo
=
locInfo
;
this
.
locInfo
=
locInfo
;
}
}
public
int
getOutOrder
()
{
return
outOrder
;
}
public
void
setOutOrder
(
int
outOrder
)
{
this
.
outOrder
=
outOrder
;
}
}
}
myproject/src/main/java/com/myproject/util/DateUtil.java
查看文件 @
f97ca24
...
@@ -3,9 +3,10 @@ package com.myproject.util;
...
@@ -3,9 +3,10 @@ package com.myproject.util;
import
com.csvreader.CsvWriter
;
import
com.csvreader.CsvWriter
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.*
;
import
com.google.common.collect.Maps
;
import
com.myproject.Constants
;
import
com.myproject.Constants
;
import
com.myproject.bean.qisda.AppendInfo
;
import
com.myproject.bean.update.DataLog
;
import
com.myproject.bean.update.qisda.OutItem
;
import
com.myproject.bean.update.qisda.OutItem
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.commons.logging.LogFactory
;
...
@@ -202,30 +203,76 @@ public final class DateUtil {
...
@@ -202,30 +203,76 @@ public final class DateUtil {
}
}
public
static
void
main
(
String
args
[])
throws
Exception
{
public
static
void
main
(
String
args
[])
throws
Exception
{
List
<
Date
>
list
=
new
ArrayList
<>();
List
<
DataLog
>
list
=
new
ArrayList
<>();
Calendar
c
=
Calendar
.
getInstance
();
c
.
set
(
Calendar
.
DAY_OF_YEAR
,
5
);
list
.
add
(
c
.
getTime
());
list
.
add
(
newDataLog
(
14
,
2000
));
c
.
set
(
Calendar
.
DAY_OF_YEAR
,
10
);
list
.
add
(
newDataLog
(
14
,
4000
));
list
.
add
(
c
.
getTime
());
list
.
add
(
newDataLog
(
2
,
3000
));
c
.
set
(
Calendar
.
DAY_OF_YEAR
,
1
);
list
.
add
(
newDataLog
(
2
,
1000
));
list
.
add
(
c
.
getTime
());
list
.
add
(
newDataLog
(
2
,
2000
));
c
.
set
(
Calendar
.
DAY_OF_YEAR
,
111
);
list
.
add
(
newDataLog
(
2
,
4000
));
list
.
add
(
c
.
getTime
());
list
.
add
(
newDataLog
(
3
,
2000
));
c
.
set
(
Calendar
.
DAY_OF_YEAR
,
9
);
list
.
add
(
newDataLog
(
1
,
1000
));
list
.
add
(
c
.
getTime
());
list
.
add
(
newDataLog
(
1
,
2000
));
list
.
add
(
newDataLog
(
1
,
3000
));
list
.
sort
(
new
Comparator
<
Date
>()
{
List
<
DataLog
>
sortList
=
sortTailTasks
(
list
);
sortList
.
sort
(
new
Comparator
<
DataLog
>()
{
@Override
@Override
public
int
compare
(
Date
o1
,
Date
o2
)
{
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
//按优先级排序,如果没有优先级,使用
return
o1
.
getOutOrder
()
-
o2
.
getOutOrder
();
return
o1
.
compareTo
(
o2
);
}
}
});
});
for
(
Date
date
:
list
)
{
for
(
DataLog
d
:
sortList
)
{
System
.
out
.
println
(
DateUtil
.
toDateString
(
date
));
System
.
out
.
println
(
"["
+
d
.
getOutOrder
()+
"]"
+
d
.
getAppendInfo
().
getSlotIndex
()+
" - "
+
d
.
getNum
());
}
}
/**
* 对补料任务进行出库排序
*/
private
static
List
<
DataLog
>
sortTailTasks
(
List
<
DataLog
>
tailTasks
){
Multimap
<
Integer
,
DataLog
>
slotTaskMap
=
HashMultimap
.
create
();
Set
<
Integer
>
slotSet
=
new
HashSet
<>();
for
(
DataLog
dataLog
:
tailTasks
)
{
slotTaskMap
.
put
(
dataLog
.
getAppendInfo
().
getSlotIndex
(),
dataLog
);
slotSet
.
add
(
dataLog
.
getAppendInfo
().
getSlotIndex
());
}
List
<
DataLog
>
sortList
=
new
ArrayList
<>();
int
outOrder
=
0
;
while
(
outOrder
<
tailTasks
.
size
()){
for
(
Integer
slot
:
slotSet
)
{
Collection
<
DataLog
>
slotTasks
=
slotTaskMap
.
get
(
slot
);
DataLog
maxNumtask
=
null
;
for
(
DataLog
slotTask
:
slotTasks
)
{
if
(
maxNumtask
==
null
||
slotTask
.
getNum
()
>
maxNumtask
.
getNum
()){
maxNumtask
=
slotTask
;
}
}
if
(
maxNumtask
!=
null
){
outOrder
=
outOrder
+
1
;
maxNumtask
.
setOutOrder
(
outOrder
);
sortList
.
add
(
maxNumtask
);
slotTaskMap
.
remove
(
slot
,
maxNumtask
);
}
}
}
}
return
sortList
;
}
private
static
DataLog
newDataLog
(
int
slotIndex
,
int
num
){
DataLog
d1
=
new
DataLog
();
AppendInfo
appendInfo
=
new
AppendInfo
();
appendInfo
.
setSlotIndex
(
slotIndex
);
d1
.
setAppendInfo
(
appendInfo
);
d1
.
setNum
(
num
);
return
d1
;
}
}
}
}
myproject/src/main/java/com/myproject/util/QisdaApi.java
查看文件 @
f97ca24
...
@@ -607,4 +607,22 @@ public class QisdaApi {
...
@@ -607,4 +607,22 @@ public class QisdaApi {
}
}
return
null
;
return
null
;
}
}
/**
* 清理Qisda库存
*/
public
static
void
ClearStockBy
(
String
posName
){
String
url
=
"http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/ClearStockBy"
;
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<
String
,
Object
>();
paramMap
.
put
(
"location"
,
posName
);
paramMap
.
put
(
"userName"
,
USER_NAME
);
log
.
info
(
"清理Qisda库存(ClearStockBy):posName="
+
posName
);
try
{
String
result
=
HttpHelper
.
postParam
(
url
,
paramMap
);
log
.
info
(
"清理Qisda库存["
+
posName
+
"](ClearStockBy)返回:"
+
result
);
return
;
}
catch
(
Exception
e
)
{
log
.
error
(
"清理Qisda库存["
+
posName
+
"](ClearStockBy)接口出错"
,
e
);
}
}
}
}
myproject/src/main/java/com/myproject/webapp/controller/cloud/AlarmInfoSearchController.java
查看文件 @
f97ca24
...
@@ -5,6 +5,7 @@ import com.myproject.bean.search.PageList;
...
@@ -5,6 +5,7 @@ import com.myproject.bean.search.PageList;
import
com.myproject.dao.mongo.IAlarmInfoDao
;
import
com.myproject.dao.mongo.IAlarmInfoDao
;
import
com.myproject.util.DateUtil
;
import
com.myproject.util.DateUtil
;
import
com.myproject.webapp.controller.storage.BaseSearchController
;
import
com.myproject.webapp.controller.storage.BaseSearchController
;
import
org.displaytag.properties.SortOrderEnum
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.data.mongodb.core.query.Query
;
...
@@ -53,7 +54,14 @@ public class AlarmInfoSearchController extends BaseSearchController {
...
@@ -53,7 +54,14 @@ public class AlarmInfoSearchController extends BaseSearchController {
super
.
addLikeParam
(
request
,
baseCriteria
,
"alarmMsg"
);
super
.
addLikeParam
(
request
,
baseCriteria
,
"alarmMsg"
);
query
.
addCriteria
(
baseCriteria
);
query
.
addCriteria
(
baseCriteria
);
PageList
pageList
=
alarmInfoDao
.
findByQuery
(
query
,
searchCriteria
.
getPageList
());
PageList
pageList
=
searchCriteria
.
getPageList
();
if
(
pageList
.
getSortCriterion
().
equals
(
"id"
)){
pageList
.
setSortCriterion
(
"updateDate"
);
pageList
.
setSortDirection
(
SortOrderEnum
.
DESCENDING
);
searchCriteria
.
setPageList
(
pageList
);
}
pageList
=
alarmInfoDao
.
findByQuery
(
query
,
searchCriteria
.
getPageList
());
searchCriteria
.
setPageList
(
pageList
);
searchCriteria
.
setPageList
(
pageList
);
return
SUCCESS_VIEW
;
return
SUCCESS_VIEW
;
...
...
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
查看文件 @
f97ca24
package
com
.
myproject
.
webapp
.
controller
.
qisda
.
util
;
package
com
.
myproject
.
webapp
.
controller
.
qisda
.
util
;
import
com.google.common.collect.HashMultimap
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Multimap
;
import
com.myproject.bean.qisda.AppendInfo
;
import
com.myproject.bean.qisda.AppendInfo
;
import
com.myproject.bean.qisda.InquiryShelfBean
;
import
com.myproject.bean.qisda.InquiryShelfBean
;
import
com.myproject.bean.qisda.ResultBean
;
import
com.myproject.bean.qisda.ResultBean
;
...
@@ -799,6 +801,11 @@ public class OutInfoCache {
...
@@ -799,6 +801,11 @@ public class OutInfoCache {
resetTaskNum
(
hSerial
,
outReelNum
);
resetTaskNum
(
hSerial
,
outReelNum
);
//补料出库,且不是缺料重发,需要重新排序,按站位序号循环出,每次出最大的盘
if
(
outInfo
.
isTailAction
()
&&
!
outInfoExecuted
){
tasks
=
sortTailTasks
(
tasks
);
}
//先出小料盘,再出大料盘
//先出小料盘,再出大料盘
for
(
DataLog
task
:
tasks
)
{
for
(
DataLog
task
:
tasks
)
{
if
(
task
.
isSmallReel
()){
if
(
task
.
isSmallReel
()){
...
@@ -827,6 +834,40 @@ public class OutInfoCache {
...
@@ -827,6 +834,40 @@ public class OutInfoCache {
return
ResultBean
.
newOkResult
(
msg
,
"ok"
);
return
ResultBean
.
newOkResult
(
msg
,
"ok"
);
}
}
/**
* 对补料任务进行出库排序
*/
private
List
<
DataLog
>
sortTailTasks
(
List
<
DataLog
>
tailTasks
){
Multimap
<
Integer
,
DataLog
>
slotTaskMap
=
HashMultimap
.
create
();
Set
<
Integer
>
slotSet
=
new
HashSet
<>();
for
(
DataLog
dataLog
:
tailTasks
)
{
slotTaskMap
.
put
(
dataLog
.
getAppendInfo
().
getSlotIndex
(),
dataLog
);
slotSet
.
add
(
dataLog
.
getAppendInfo
().
getSlotIndex
());
}
List
<
DataLog
>
sortList
=
new
ArrayList
<>();
int
outOrder
=
0
;
while
(
outOrder
<
tailTasks
.
size
()){
for
(
Integer
slot
:
slotSet
)
{
Collection
<
DataLog
>
slotTasks
=
slotTaskMap
.
get
(
slot
);
DataLog
maxNumtask
=
null
;
for
(
DataLog
slotTask
:
slotTasks
)
{
if
(
maxNumtask
==
null
||
slotTask
.
getNum
()
>
maxNumtask
.
getNum
()){
maxNumtask
=
slotTask
;
}
}
if
(
maxNumtask
!=
null
){
outOrder
=
outOrder
+
1
;
slotTaskMap
.
remove
(
slot
,
maxNumtask
);
maxNumtask
.
setOutOrder
(
outOrder
);
DataLog
tailOrderTask
=
dataLogDao
.
save
(
maxNumtask
);
sortList
.
add
(
tailOrderTask
);
}
}
}
return
sortList
;
}
private
List
<
DataLog
>
checkOutUrgent
(
OutItem
outItem
){
private
List
<
DataLog
>
checkOutUrgent
(
OutItem
outItem
){
...
...
myproject/src/main/java/com/myproject/webapp/controller/storage/StoragePosUpdateController.java
查看文件 @
f97ca24
...
@@ -8,6 +8,7 @@ import com.myproject.dao.mongo.IBarcodeDao;
...
@@ -8,6 +8,7 @@ import com.myproject.dao.mongo.IBarcodeDao;
import
com.myproject.exception.ValidateException
;
import
com.myproject.exception.ValidateException
;
import
com.myproject.manager.IBarcodeManager
;
import
com.myproject.manager.IBarcodeManager
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.util.QisdaApi
;
import
com.myproject.util.StorageConstants
;
import
com.myproject.util.StorageConstants
;
import
com.myproject.webapp.controller.webService.DataCache
;
import
com.myproject.webapp.controller.webService.DataCache
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
...
@@ -63,6 +64,8 @@ public class StoragePosUpdateController extends BaseUpdateController {
...
@@ -63,6 +64,8 @@ public class StoragePosUpdateController extends BaseUpdateController {
StoragePos
storagePos
=
storagePosManager
.
get
(
pid
);
StoragePos
storagePos
=
storagePosManager
.
get
(
pid
);
if
(
storagePos
!=
null
){
if
(
storagePos
!=
null
){
try
{
try
{
log
.
info
(
"清理库位["
+
storagePos
.
getPosName
()+
"]"
);
QisdaApi
.
ClearStockBy
(
storagePos
.
getPosName
());
Barcode
barcode
=
storagePos
.
getBarcode
();
Barcode
barcode
=
storagePos
.
getBarcode
();
if
(
barcode
!=
null
){
if
(
barcode
!=
null
){
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
查看文件 @
f97ca24
...
@@ -472,12 +472,12 @@ public class QisdaDeviceController extends BaseController {
...
@@ -472,12 +472,12 @@ public class QisdaDeviceController extends BaseController {
return
null
;
return
null
;
}
}
if
(
task
.
isExecuting
()
||
task
.
isCancel
()){
if
(
task
.
isExecuting
()
||
task
.
isCancel
()){
log
.
error
(
"料盘["
+
barcode
+
"]的任务未完成,
补发出库通知到Qisda
"
);
log
.
error
(
"料盘["
+
barcode
+
"]的任务未完成,
清空库位信息
"
);
try
{
try
{
taskService
.
checkoutFinished
(
task
);
taskService
.
checkoutFinished
(
task
);
task
=
taskService
.
getFinishedTask
(
barcode
);
task
=
taskService
.
getFinishedTask
(
barcode
);
}
catch
(
ValidateException
e
)
{
}
catch
(
ValidateException
e
)
{
log
.
error
(
"
补发通知
出错"
,
e
);
log
.
error
(
"
清空未完成任务的库位信息
出错"
,
e
);
}
}
}
else
if
(
task
.
isFinished
()){
}
else
if
(
task
.
isFinished
()){
log
.
error
(
"料盘["
+
barcode
+
"]的任务已完成"
);
log
.
error
(
"料盘["
+
barcode
+
"]的任务已完成"
);
...
@@ -594,7 +594,7 @@ public class QisdaDeviceController extends BaseController {
...
@@ -594,7 +594,7 @@ public class QisdaDeviceController extends BaseController {
String
rfidLoc
=
request
.
getParameter
(
"rfidLoc"
);
String
rfidLoc
=
request
.
getParameter
(
"rfidLoc"
);
log
.
debug
(
"收到["
+
cid
+
"]紧急/分盘料["
+
barcode
+
"]放入"
+
rfid
+
"["
+
rfidLoc
+
"]指令"
);
log
.
debug
(
"收到["
+
cid
+
"]紧急/分盘料["
+
barcode
+
"]放入"
+
rfid
+
"["
+
rfidLoc
+
"]指令"
);
DataLog
task
=
findFinishedTask
(
barcode
);
DataLog
task
=
findFinishedTask
(
barcode
);
if
(
task
!=
null
){
if
(
task
!=
null
&&
!
task
.
isCancel
()
){
ShelfLoc
shelfLoc
=
InquiryShelfBean
.
putInCutReel
(
task
,
rfid
,
Integer
.
valueOf
(
rfidLoc
));
ShelfLoc
shelfLoc
=
InquiryShelfBean
.
putInCutReel
(
task
,
rfid
,
Integer
.
valueOf
(
rfidLoc
));
if
(
shelfLoc
!=
null
){
if
(
shelfLoc
!=
null
){
log
.
info
(
"["
+
cid
+
"]紧急/分盘料["
+
barcode
+
"]放入"
+
rfid
+
"["
+
rfidLoc
+
"]成功"
);
log
.
info
(
"["
+
cid
+
"]紧急/分盘料["
+
barcode
+
"]放入"
+
rfid
+
"["
+
rfidLoc
+
"]成功"
);
...
@@ -781,7 +781,7 @@ public class QisdaDeviceController extends BaseController {
...
@@ -781,7 +781,7 @@ public class QisdaDeviceController extends BaseController {
alarmInfoDao
.
save
(
alarmInfo
);
alarmInfoDao
.
save
(
alarmInfo
);
return
putResult
;
return
putResult
;
}
else
{
}
else
{
log
.
info
(
"料盘["
+
cacheTask
.
getBarcode
()+
"]放入位置"
+
rfid
+
"["
+
rfidLoc
+
"]成功
"
);
log
.
info
(
"料盘["
+
cacheTask
.
getBarcode
()+
"]放入位置"
+
rfid
+
"["
+
rfidLoc
+
"]成功
outOrder="
+
cacheTask
.
getOutOrder
()
);
cacheTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
cacheTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
appendInfo
.
setRfid
(
rfid
);
appendInfo
.
setRfid
(
rfid
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
查看文件 @
f97ca24
...
@@ -313,9 +313,9 @@ public class TaskService implements ITaskService {
...
@@ -313,9 +313,9 @@ public class TaskService implements ITaskService {
barcodeManager
.
save
(
barcodeSave
);
barcodeManager
.
save
(
barcodeSave
);
}
}
}
}
QisdaCache
.
removeReelLockPosInfo
(
barcodeSave
.
getBarcode
());
String
trayRfid
=
statusBean
.
getTrayRfid
();
String
trayRfid
=
statusBean
.
getTrayRfid
();
addPutInTaskToExecute
(
storage
,
barcodeSave
,
storagePos
,
trayRfid
);
addPutInTaskToExecute
(
storage
,
barcodeSave
,
storagePos
,
trayRfid
);
QisdaCache
.
removeReelLockPosInfo
(
barcodeSave
.
getBarcode
());
}
}
...
@@ -464,7 +464,7 @@ public class TaskService implements ITaskService {
...
@@ -464,7 +464,7 @@ public class TaskService implements ITaskService {
* @return
* @return
*/
*/
@Override
@Override
public
synchronized
StoragePos
findEmptyPosForPutIn
(
List
<
Storage
>
storageList
,
Barcode
barcode
,
String
inRFID
)
throws
ValidateException
{
public
StoragePos
findEmptyPosForPutIn
(
List
<
Storage
>
storageList
,
Barcode
barcode
,
String
inRFID
)
throws
ValidateException
{
verifyBarcodePutIn
(
storageList
,
barcode
,
inRFID
);
verifyBarcodePutIn
(
storageList
,
barcode
,
inRFID
);
//如果有正在执行的任务,把库位发过去
//如果有正在执行的任务,把库位发过去
...
@@ -509,27 +509,38 @@ public class TaskService implements ITaskService {
...
@@ -509,27 +509,38 @@ public class TaskService implements ITaskService {
if
(
status
.
timeOut
()){
if
(
status
.
timeOut
()){
continue
;
continue
;
}
}
if
(!
status
.
isBoxCanPutIn
()){
//料仓不可入库
continue
;
}
if
(
hasOutTaskStorageIds
.
contains
(
storage
.
getId
())){
//有正在执行的出库任务
continue
;
}
if
(
storage
.
canPutIn
(
barcode
.
getPlateSize
(),
barcode
.
getHeight
())){
if
(
storage
.
canPutIn
(
barcode
.
getPlateSize
(),
barcode
.
getHeight
())){
availbleStorageList
.
add
(
storage
);
availbleStorageList
.
add
(
storage
);
}
}
}
}
if
(
availbleStorageList
.
isEmpty
()){
throw
new
ValidateException
(
"料仓列表中未找到可用的料仓"
);
}
return
findEmptyPosInStorages
(
barcode
,
availbleStorageList
,
executingTaskCountMap
);
}
private
synchronized
StoragePos
findEmptyPosInStorages
(
Barcode
barcode
,
List
<
Storage
>
availbleStorageList
,
Map
<
String
,
Integer
>
executingTaskCountMap
){
//优先从没有出库任务的料仓中查找库位
//优先从没有出库任务的料仓中查找库位
for
(
Storage
storage
:
availbleStorageList
)
{
for
(
Storage
storage
:
availbleStorageList
)
{
if
(
hasOutTaskStorageIds
.
contains
(
storage
.
getId
())){
//流水线有出库任务的,暂不分配入库任务(出库优先)
continue
;
}
Integer
executingTaskCount
=
executingTaskCountMap
.
get
(
storage
.
getId
());
Integer
executingTaskCount
=
executingTaskCountMap
.
get
(
storage
.
getId
());
if
(
executingTaskCount
>=
1
){
if
(
executingTaskCount
>=
1
){
continue
;
continue
;
}
}
try
{
try
{
log
.
info
(
"尝试从无出库任务的料仓
"
+
storage
.
getName
()+
"["
+
storage
.
getCid
()+
"]查找空位,当前料仓正在执行任务数:"
+
executingTaskCount
);
log
.
info
(
"尝试从无出库任务的料仓
["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位,当前料仓正在执行任务数:"
+
executingTaskCount
);
return
findLineEmptyPosForPutIn
(
storage
,
barcode
);
return
findLineEmptyPosForPutIn
(
storage
,
barcode
);
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
log
.
info
(
"
从"
+
storage
.
getName
()+
"["
+
storage
.
getCid
()+
"]查找空位失败:"
+
e
.
getMessage
());
log
.
info
(
"
尝试从["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位失败:"
+
e
.
getMessage
());
}
}
}
}
...
@@ -540,10 +551,10 @@ public class TaskService implements ITaskService {
...
@@ -540,10 +551,10 @@ public class TaskService implements ITaskService {
}
}
try
{
try
{
log
.
info
(
"尝试从
"
+
storage
.
getName
()+
"["
+
storage
.
getCid
()+
"]查找空位,当前料仓正在执行任务数:"
+
executingTaskCount
);
log
.
info
(
"尝试从
["
+
storage
.
getCid
()+
"]为["
+
barcode
.
getBarcode
()+
"]查找空位,当前料仓正在执行任务数:"
+
executingTaskCount
);
return
findLineEmptyPosForPutIn
(
storage
,
barcode
);
return
findLineEmptyPosForPutIn
(
storage
,
barcode
);
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
log
.
info
(
"
从"
+
storage
.
getName
()+
"["
+
storage
.
getCid
()+
"]查找空位失败:"
+
e
.
getMessage
());
log
.
info
(
"
尝试从["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位失败:"
+
e
.
getMessage
());
}
}
}
}
...
@@ -551,15 +562,14 @@ public class TaskService implements ITaskService {
...
@@ -551,15 +562,14 @@ public class TaskService implements ITaskService {
log
.
info
(
"可用料仓太少,不按任务数分配,重新查找..."
);
log
.
info
(
"可用料仓太少,不按任务数分配,重新查找..."
);
for
(
Storage
storage
:
availbleStorageList
)
{
for
(
Storage
storage
:
availbleStorageList
)
{
try
{
try
{
log
.
info
(
"不按任务数分配,尝试从
"
+
storage
.
getName
()+
"["
+
storage
.
getCid
()+
"]查找空位"
);
log
.
info
(
"不按任务数分配,尝试从
["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位"
);
return
findLineEmptyPosForPutIn
(
storage
,
barcode
);
return
findLineEmptyPosForPutIn
(
storage
,
barcode
);
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
log
.
info
(
"
从"
+
storage
.
getName
()+
"["
+
storage
.
getCid
()+
"]查找空位失败:"
+
e
.
getMessage
());
log
.
info
(
"
尝试从["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位失败:"
+
e
.
getMessage
());
}
}
}
}
return
null
;
return
null
;
}
}
/**
/**
* 为 barcode 查找流水线料仓中空闲的仓位
* 为 barcode 查找流水线料仓中空闲的仓位
...
@@ -1025,6 +1035,8 @@ public class TaskService implements ITaskService {
...
@@ -1025,6 +1035,8 @@ public class TaskService implements ITaskService {
return
null
;
return
null
;
}
}
/**
/**
* 查找补料任务
* 查找补料任务
* @return
* @return
...
@@ -1035,12 +1047,25 @@ public class TaskService implements ITaskService {
...
@@ -1035,12 +1047,25 @@ public class TaskService implements ITaskService {
return
findPackageMinTask
(
storage
,
minARfidIndex
);
return
findPackageMinTask
(
storage
,
minARfidIndex
);
}
else
{
}
else
{
//一次性把D料架出完,再出C料架,包装料可以同时出
//一次性把D料架出完,再出C料架,包装料可以同时出
for
(
DataLog
task
:
taskMap
.
values
())
{
Collection
<
DataLog
>
waitTasks
=
taskMap
.
values
();
List
<
DataLog
>
allTaskList
=
new
ArrayList
<>();
if
(!
waitTasks
.
isEmpty
()){
allTaskList
.
addAll
(
waitTasks
);
allTaskList
.
sort
(
new
Comparator
<
DataLog
>()
{
@Override
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
return
o1
.
getOutOrder
()
-
o2
.
getOutOrder
();
}
});
}
for
(
DataLog
task
:
allTaskList
)
{
if
(
storage
.
getCid
().
equals
(
task
.
getCid
())
&&
task
.
isCheckOutTask
()
&&
task
.
isWait
()){
if
(
storage
.
getCid
().
equals
(
task
.
getCid
())
&&
task
.
isCheckOutTask
()
&&
task
.
isWait
()){
//还有小料架出库任务,出小料架
//还有小料架出库任务,出小料架
if
(
minDRfidIndex
!=
-
1
){
if
(
minDRfidIndex
!=
-
1
){
if
(
task
.
isSmallReel
()){
if
(
task
.
isSmallReel
()){
log
.
info
(
"出库小料任务"
+
task
.
getBarcode
()+
"["
+
task
.
getPosName
()+
"]
"
);
log
.
info
(
"出库小料任务"
+
task
.
getBarcode
()+
"["
+
task
.
getPosName
()+
"]
outOrder="
+
task
.
getOutOrder
()
);
return
task
;
return
task
;
}
}
}
else
{
}
else
{
...
@@ -1048,7 +1073,7 @@ public class TaskService implements ITaskService {
...
@@ -1048,7 +1073,7 @@ public class TaskService implements ITaskService {
if
(!
task
.
isSmallReel
()){
if
(!
task
.
isSmallReel
()){
//未完成的大料数量(正在执行和未放上料架的)
//未完成的大料数量(正在执行和未放上料架的)
int
unFinishedBigTaskCount
=
0
;
int
unFinishedBigTaskCount
=
0
;
for
(
DataLog
dataLog
:
taskMap
.
values
()
)
{
for
(
DataLog
dataLog
:
allTaskList
)
{
if
(!
dataLog
.
isPackageReel
()
&&
!
dataLog
.
isSmallReel
()
&&
dataLog
.
isExecuting
()){
if
(!
dataLog
.
isPackageReel
()
&&
!
dataLog
.
isSmallReel
()
&&
dataLog
.
isExecuting
()){
unFinishedBigTaskCount
=
unFinishedBigTaskCount
+
1
;
unFinishedBigTaskCount
=
unFinishedBigTaskCount
+
1
;
}
}
...
@@ -1456,6 +1481,7 @@ public class TaskService implements ITaskService {
...
@@ -1456,6 +1481,7 @@ public class TaskService implements ITaskService {
DataLog
task
=
newTask
(
pos
);
DataLog
task
=
newTask
(
pos
);
//手动出库的当做是紧急料,放到料串上
//手动出库的当做是紧急料,放到料串上
task
.
setUrgentReel
(
true
);
task
.
setUrgentReel
(
true
);
AppendInfo
appendInfo
=
task
.
getAppendInfo
();
AppendInfo
appendInfo
=
task
.
getAppendInfo
();
appendInfo
.
setShelfType
(
StorageConstants
.
SHEFL_TYPE
.
B
);
appendInfo
.
setShelfType
(
StorageConstants
.
SHEFL_TYPE
.
B
);
task
.
setAppendInfo
(
appendInfo
);
task
.
setAppendInfo
(
appendInfo
);
...
@@ -1625,7 +1651,7 @@ public class TaskService implements ITaskService {
...
@@ -1625,7 +1651,7 @@ public class TaskService implements ITaskService {
finishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
finishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
log
.
error
(
"addTaskToFinished Error:"
,
e
);
}
}
}
}
...
@@ -1796,10 +1822,9 @@ public class TaskService implements ITaskService {
...
@@ -1796,10 +1822,9 @@ public class TaskService implements ITaskService {
Barcode
barcode
=
storagePos
.
getBarcode
();
Barcode
barcode
=
storagePos
.
getBarcode
();
if
(
barcode
==
null
){
if
(
barcode
==
null
){
//记录日志
//记录日志
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
OUTBOX
.
name
());
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
CANCEL
.
name
());
taskMap
.
remove
(
task
.
getId
());
taskMap
.
remove
(
task
.
getId
());
finishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
finishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
log
.
warn
(
"任务:"
+
task
.
getBarcode
()
+
" 仓位:"
+
task
.
getPosName
()+
" 的 Barcode 为null, 之前可能处理过直接返回"
);
log
.
warn
(
"任务:"
+
task
.
getBarcode
()
+
" 仓位:"
+
task
.
getPosName
()+
" 的 Barcode 为null, 之前可能处理过直接返回"
);
return
;
return
;
}
}
...
@@ -1829,12 +1854,15 @@ public class TaskService implements ITaskService {
...
@@ -1829,12 +1854,15 @@ public class TaskService implements ITaskService {
AppendInfo
appendInfo
=
task
.
getAppendInfo
();
AppendInfo
appendInfo
=
task
.
getAppendInfo
();
String
outItemId
=
appendInfo
.
getOutItemId
();
String
outItemId
=
appendInfo
.
getOutItemId
();
log
.
info
(
"出库完成,清空仓位: "
+
storagePos
.
getId
()
+
"["
+
storagePos
.
getPosName
()
+
"]outItemId"
+
outItemId
);
log
.
info
(
task
.
getBarcode
()
+
"出库完成,清空仓位: "
+
storagePos
.
getId
()
+
"["
+
storagePos
.
getPosName
()
+
"]outItemId"
+
outItemId
);
//更新缓存中的库存信息
//更新缓存中的库存信息
dataCache
.
updateInventory
(
storagePos
,
barcode
);
dataCache
.
updateInventory
(
storagePos
,
barcode
);
//记录日志
//记录日志
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
OUTBOX
.
name
());
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
OUTBOX
.
name
());
if
(
isCancelTask
){
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
CANCEL
.
name
());
}
dataLogDao
.
save
(
task
);
dataLogDao
.
save
(
task
);
//从队列里面移除操作
//从队列里面移除操作
...
@@ -1853,7 +1881,8 @@ public class TaskService implements ITaskService {
...
@@ -1853,7 +1881,8 @@ public class TaskService implements ITaskService {
if
(!
isCancelTask
){
if
(!
isCancelTask
){
updateOutInfo
(
outItemId
,
task
,
barcode
);
updateOutInfo
(
outItemId
,
task
,
barcode
);
}
else
{
}
else
{
log
.
info
(
task
.
getBarcode
()+
"的出库任务["
+
task
.
getId
()+
"]已被取消,不再更新需求单信息"
);
log
.
info
(
task
.
getBarcode
()+
"的出库任务["
+
task
.
getId
()+
"]已被取消,仅清除Qisda库存["
+
task
.
getPosName
()+
"],不再更新需求单信息"
);
QisdaApi
.
ClearStockBy
(
task
.
getPosName
());
}
}
}
}
...
@@ -1899,8 +1928,8 @@ public class TaskService implements ITaskService {
...
@@ -1899,8 +1928,8 @@ public class TaskService implements ITaskService {
String
latest
=
outInfo
.
getOutLatest
();
String
latest
=
outInfo
.
getOutLatest
();
QisdaApiController
.
OutFinished
(
task
,
barcode
,
latest
);
QisdaApiController
.
OutFinished
(
task
,
barcode
,
latest
);
if
(
task
.
isLessSendReel
()){
if
(
task
.
isLessSendReel
()){
outInfo
=
outInfoCache
.
incTaskFinishNum
(
outItem
.
gethSerial
(),
outItem
.
getSlotlocation
(),
task
.
getNum
());
outInfo
=
outInfoCache
.
incTaskFinishNum
(
outItem
.
gethSerial
(),
outItem
.
getSlotlocation
(),
task
.
getNum
());
if
(
outInfo
!=
null
)
{
if
(
outInfo
!=
null
)
{
...
@@ -1916,6 +1945,9 @@ public class TaskService implements ITaskService {
...
@@ -1916,6 +1945,9 @@ public class TaskService implements ITaskService {
boolean
lessBind
=
false
;
boolean
lessBind
=
false
;
QisdaApi
.
VMILocationOutFeedback
(
outItemList
,
lessBind
);
QisdaApi
.
VMILocationOutFeedback
(
outItemList
,
lessBind
);
}
}
}
else
{
log
.
info
(
task
.
getBarcode
()+
"的出库任务["
+
task
.
getId
()+
"]无需求单信息,清除Qisda库存"
);
QisdaApi
.
ClearStockBy
(
task
.
getPosName
());
}
}
}
}
}
}
...
...
myproject/src/main/webapp/WEB-INF/pages/storage/storageUpdate.jsp
查看文件 @
f97ca24
...
@@ -315,11 +315,11 @@
...
@@ -315,11 +315,11 @@
<td class="posInfo${slot.id}">
<td class="posInfo${slot.id}">
<c:if test="${not empty slot.barcode.plateSize}">
<c:if test="${not empty slot.barcode.plateSize}">
${slot.barcode.plateSize} x ${slot.barcode.height}
${slot.barcode.plateSize} x ${slot.barcode.height}
[
<a onclick="clearPos('${slot.id}');">
<fmt:message key="storage.clearPos"/>
</a>]
</c:if>
</c:if>
[
<a onclick="clearPos('${slot.id}');">
<fmt:message key="storage.clearPos"/>
</a>]
</td>
</td>
<td class="posInfo${slot.id}">
<td class="posInfo${slot.id}">
<c:out value="${slot.barcode.partNumber}"/>
<c:out value="${slot.barcode.partNumber}"/>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论