Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
QisdaNew
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit e4bcab5d
由
sunke
编写于
2020-08-27 10:29:51 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
报警看板页面增加吞吐量报表
吞吐量统计修正 补料与缺料重发同一盘料会有两个任务BUG 包装仓返回同一个料架还有几个任务
1 个父辈
d4259566
显示空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
101 行增加
和
43 行删除
README.md
myproject/src/main/java/com/myproject/dao/mongo/impl/DataLogDaoImpl.java
myproject/src/main/java/com/myproject/dao/mongo/qisda/impl/OutItemDaoImpl.java
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.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/webapp/WEB-INF/pages/qisda/alarmMsg.jsp
myproject/src/main/webapp/WEB-INF/pages/system/runStatus.jsp
myproject/src/main/webapp/WEB-INF/pages/updateHistory.jsp
myproject/src/main/webapp/decorators/metro.jsp
README.md
查看文件 @
e4bcab5
...
...
@@ -24,6 +24,16 @@ C:\Windows\system32>mongod --storageEngine=mmapv1 --logappend --directoryperdb -
--disable-print-preview
#添加索引
db.barcode.ensureIndex({"barcode":1},{"unique":true})
db.outItem.ensureIndex({"soseq":1})
db.outItem.createIndex({hSerial:-1,slotlocation:1})
###安装Mongodb服务
1、创建 D:
\M
ongoDB 及 D:
\M
ongoDB
\d
ata 和 D:
\M
ongoDB
\l
ogs 目录
...
...
myproject/src/main/java/com/myproject/dao/mongo/impl/DataLogDaoImpl.java
查看文件 @
e4bcab5
...
...
@@ -71,7 +71,7 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
Date
addOneDayToTime
=
DateUtil
.
addOneDayNoTime
(
toTime
);
Criteria
c
=
new
Criteria
().
andOperator
(
Criteria
.
where
(
"updateDate"
).
gte
(
fromTime
),
Criteria
.
where
(
"updateDate"
).
lt
(
addOneDayToTime
)).
and
(
"type"
).
is
(
type
);
c
.
and
(
"status"
).
in
(
StorageConstants
.
OP_STATUS
.
END
.
name
(),
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
c
.
and
(
"status"
).
nin
(
StorageConstants
.
OP_STATUS
.
EXECUTING
.
name
(),
StorageConstants
.
OP_STATUS
.
WAIT
.
name
(),
StorageConstants
.
OP_STATUS
.
CANCEL
.
name
());
if
(
Strings
.
isNotBlank
(
partNumber
)){
c
.
and
(
"partNumber"
).
is
(
partNumber
);
}
...
...
myproject/src/main/java/com/myproject/dao/mongo/qisda/impl/OutItemDaoImpl.java
查看文件 @
e4bcab5
...
...
@@ -27,9 +27,9 @@ public class OutItemDaoImpl extends AbstractMongoDao implements IOutItemDao {
public
List
<
OutItem
>
findCutItemList
(
List
<
String
>
soseqList
,
String
pn
,
String
facility
){
Criteria
c
=
new
Criteria
();
c
.
and
(
"soseq"
).
in
(
soseqList
);
c
.
and
(
"action"
).
is
(
"分盘"
);
c
.
and
(
"pn"
).
is
(
pn
);
c
.
and
(
"facility"
).
is
(
facility
);
c
.
and
(
"action"
).
is
(
"分盘"
);
Query
query
=
new
Query
(
c
);
query
.
with
(
new
Sort
(
Sort
.
Direction
.
ASC
,
"createDate"
));
return
findByQuery
(
query
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
查看文件 @
e4bcab5
...
...
@@ -882,11 +882,18 @@ public class OutInfoCache {
//没有顺序
int
sendQty
=
outItem
.
getSendQty
();
int
fixQty
=
outItem
.
getFixedQty
();
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
for
(
StoragePos
pos
:
bindPosList
)
{
if
(
sendQty
>=
fixQty
){
break
;
}
if
(
excludePosIds
.
contains
(
pos
.
getId
())){
log
.
info
(
"任务列表中已有库位["
+
pos
.
getPosName
()+
"]的任务,忽略当前库位,继续查找下一个"
);
continue
;
}
if
(
maxQtyReelPos
!=
null
&&
maxQtyReelPos
.
getId
().
equals
(
pos
.
getId
())){
if
(
totalOutInfo
.
getFixedQty
()
==
totalOutInfo
.
getQty
()){
//未修正过
...
...
@@ -929,7 +936,13 @@ public class OutInfoCache {
List
<
StoragePos
>
bindPosList
=
storagePosDao
.
findBindList
(
outItem
.
getSoseq
(),
outItem
.
getSlotlocation
());
//首盘料,出到双层线上,按站位顺序,只出最大的一盘
StoragePos
maxQtyPos
=
null
;
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
for
(
StoragePos
pos
:
bindPosList
)
{
if
(
excludePosIds
.
contains
(
pos
.
getId
())){
log
.
info
(
"任务列表中已有库位["
+
pos
.
getPosName
()+
"]的任务,忽略当前库位,继续查找下一个"
);
continue
;
}
//不是需要分盘但未分盘的料
Barcode
posBarcode
=
pos
.
getBarcode
();
if
(!
posBarcode
.
hasCutInfo
()){
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaBindService.java
查看文件 @
e4bcab5
...
...
@@ -522,42 +522,42 @@ public class QisdaBindService {
}
private
OutItem
updateRealLockQty
(
OutItem
outItem
){
//查找真实绑定
List
<
StoragePos
>
bindPosList
=
storagePosDao
.
findBindList
(
outItem
.
getSoseq
(),
outItem
.
getSlotlocation
());
int
realBindQty
=
0
;
for
(
StoragePos
bindPos
:
bindPosList
)
{
realBindQty
=
realBindQty
+
bindPos
.
getBarcode
().
getAmount
();
}
outItem
.
setRealLockQty
(
realBindQty
);
int
lockQty
=
outItem
.
getLockQty
();
if
(
lockQty
<
realBindQty
){
lockQty
=
realBindQty
;
outItem
.
setLockQty
(
lockQty
);
}
if
(
outItem
.
isCutMaterial
()){
//分盘料,需要将已绑定未出库的物料也计算进去
List
<
StoragePos
>
cutReels
=
storagePosDao
.
findCutList
(
outItem
.
getSo
(),
outItem
.
getSlotlocation
(),
outItem
.
getSoseq
());
for
(
StoragePos
cutReel
:
cutReels
)
{
List
<
Map
<
String
,
Object
>>
cutItems
=
cutReel
.
getBarcode
().
getCutItems
();
for
(
Map
<
String
,
Object
>
cutItem
:
cutItems
)
{
String
so
=
cutItem
.
get
(
"so"
).
toString
();
String
soseqStr
=
cutItem
.
get
(
"soseq"
).
toString
();
String
slotlocation
=
cutItem
.
get
(
"slotlocation"
).
toString
();
if
(
outItem
.
getSo
().
equals
(
so
)
&&
outItem
.
getSoseq
().
equals
(
soseqStr
)
&&
outItem
.
getSlotlocation
()
==
Integer
.
valueOf
(
slotlocation
)){
log
.
info
(
"查找到未出库的分盘料信息["
+
cutItem
+
"],更新预绑定数量"
);
String
qty
=
cutItem
.
get
(
"qty"
).
toString
();
lockQty
=
outItem
.
getLockQty
()
+
Integer
.
valueOf
(
qty
);
outItem
.
setLockQty
(
lockQty
);
}
}
}
}
outItem
=
outItemDao
.
save
(
outItem
);
log
.
info
(
"更新["
+
outItem
.
getSlotlocation
()+
"]"
+
outItem
.
getPn
()+
"真实绑定数量为["
+
realBindQty
+
"/"
+
outItem
.
getQty
()+
"]"
);
return
outItem
;
}
//
private OutItem updateRealLockQty(OutItem outItem){
//
//查找真实绑定
//
List<StoragePos> bindPosList = storagePosDao.findBindList(outItem.getSoseq(), outItem.getSlotlocation());
//
int realBindQty = 0;
//
for (StoragePos bindPos : bindPosList) {
//
realBindQty = realBindQty + bindPos.getBarcode().getAmount();
//
}
//
outItem.setRealLockQty(realBindQty);
//
int lockQty = outItem.getLockQty();
//
if(lockQty < realBindQty){
//
lockQty = realBindQty;
//
outItem.setLockQty(lockQty);
//
}
//
if(outItem.isCutMaterial()){
//
//分盘料,需要将已绑定未出库的物料也计算进去
//
List<StoragePos> cutReels = storagePosDao.findCutList(outItem.getSo(), outItem.getSlotlocation(), outItem.getSoseq());
//
//
for (StoragePos cutReel : cutReels) {
//
List<Map<String, Object>> cutItems = cutReel.getBarcode().getCutItems();
//
for (Map<String, Object> cutItem : cutItems) {
//
String so = cutItem.get("so").toString();
//
String soseqStr = cutItem.get("soseq").toString();
//
String slotlocation = cutItem.get("slotlocation").toString();
//
if(outItem.getSo().equals(so) && outItem.getSoseq().equals(soseqStr) && outItem.getSlotlocation() == Integer.valueOf(slotlocation)){
//
log.info("查找到未出库的分盘料信息["+cutItem+"],更新预绑定数量");
//
String qty = cutItem.get("qty").toString();
//
lockQty = outItem.getLockQty() + Integer.valueOf(qty);
//
outItem.setLockQty(lockQty);
//
}
//
}
//
}
//
}
//
outItem = outItemDao.save(outItem);
//
log.info("更新["+outItem.getSlotlocation()+"]"+outItem.getPn()+"真实绑定数量为["+realBindQty+"/"+outItem.getQty()+"]");
//
return outItem;
//
}
/**
* 检查首盘料中不同Slot上相同的PN, 如果缺料,出首盘时要保证每一个Slot上都有料
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
查看文件 @
e4bcab5
...
...
@@ -609,6 +609,7 @@ public class QisdaDeviceController extends BaseController {
String
rfidLoc
=
request
.
getParameter
(
"rfidLoc"
);
log
.
debug
(
"收到["
+
cid
+
"]紧急/分盘料["
+
barcode
+
"]放入"
+
rfid
+
"["
+
rfidLoc
+
"]指令"
);
DataLog
task
=
findFinishedTask
(
barcode
);
String
tempRfid
=
""
;
if
(
task
!=
null
&&
!
task
.
isCancel
()){
ShelfLoc
shelfLoc
=
InquiryShelfBean
.
putInCutReel
(
task
,
rfid
,
Integer
.
valueOf
(
rfidLoc
));
if
(
shelfLoc
!=
null
){
...
...
@@ -637,7 +638,7 @@ public class QisdaDeviceController extends BaseController {
task
.
setAppendInfo
(
appendInfo
);
task
=
dataLogDao
.
save
(
task
);
taskService
.
updateFinishedTask
(
task
);
tempRfid
=
task
.
getTempRfid
();
}
...
...
@@ -660,9 +661,11 @@ public class QisdaDeviceController extends BaseController {
if
(
unFinishedTask
.
isPackageReel
()){
totalPackageCutTask
=
totalPackageCutTask
+
1
;
if
(
unFinishedTask
.
getCid
().
equals
(
cid
)){
//当前包装料仓的分盘任务
//当前包装料仓中当前料架的分盘任务
if
(
tempRfid
.
equals
(
unFinishedTask
.
getTempRfid
())){
cutPackageTask
=
cutPackageTask
+
1
;
}
}
}
else
{
cutTask
=
cutTask
+
1
;
}
...
...
@@ -672,8 +675,10 @@ public class QisdaDeviceController extends BaseController {
if
(
unFinishedTask
.
isPackageReel
())
{
totalPackageUrgentTask
=
totalPackageUrgentTask
+
1
;
if
(
unFinishedTask
.
getCid
().
equals
(
cid
))
{
if
(
tempRfid
.
equals
(
unFinishedTask
.
getTempRfid
())){
urgentPackageTask
=
urgentPackageTask
+
1
;
}
}
}
else
{
urgentTask
=
urgentTask
+
1
;
}
...
...
myproject/src/main/webapp/WEB-INF/pages/qisda/alarmMsg.jsp
查看文件 @
e4bcab5
...
...
@@ -362,7 +362,7 @@
flushInOutChart();
setInterval(function(){
flushInOutChart();
}, 60000);
},
5 *
60000);
});
</script>
</c:set>
\ No newline at end of file
myproject/src/main/webapp/WEB-INF/pages/system/runStatus.jsp
查看文件 @
e4bcab5
...
...
@@ -222,6 +222,7 @@
},
toolbox: {
feature: {
magicType: {show: true, type: ['stack', 'tiled']},
dataView: {show: true, readOnly: true},
saveAsImage: {show: true}
}
...
...
myproject/src/main/webapp/WEB-INF/pages/updateHistory.jsp
查看文件 @
e4bcab5
...
...
@@ -12,6 +12,35 @@
<div class="row">
<div class="col-md-12">
<ul class="timeline">
<li class="timeline-yellow">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">08-26 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020082610</h2>
<div class="timeline-content">
<ul>
<li>移远料号两种规格处理</li>
<li>料仓温湿度单独页面展示</li>
<li>确认尺寸有误时,重新获取刷新</li>
<li>需求单中包装料架清理</li>
<li>3天前工单自动关闭</li>
<li>发送Qisda时,状态为0和-1都进行重发</li>
<li>大于7寸的盘使用完全兼容,7寸盘使用同尺寸兼容</li>
<li>包装料仓优先放入当前仓中</li>
<li>包装料出库按生成时间顺序</li>
报警看板页面增加吞吐量报表
吞吐量统计修正
补料与缺料重发同一盘料会有两个任务BUG
包装仓返回同一个料架还有几个任务
</ul>
</div>
</div>
</li>
<li class="timeline-grey">
<div class="timeline-time">
<span class="date">2020 </span>
...
...
@@ -21,7 +50,7 @@
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V202008
0824
</h2>
<h2>版本: V202008
2410
</h2>
<div class="timeline-content">
<ul>
<li>移远料号两种规格处理</li>
...
...
myproject/src/main/webapp/decorators/metro.jsp
查看文件 @
e4bcab5
...
...
@@ -239,7 +239,7 @@
<div
class=
"page-footer-inner"
>
2016
©
<a
href=
"${ctx}/updateHistory.html"
>
SMD BOX
</a>
</div>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2020.08.2
4
</span>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2020.08.2
6
</span>
<div
class=
"scroll-to-top"
>
<i
class=
"icon-arrow-up"
></i>
</div>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论