Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
QisdaNew
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 69eb8af4
由
sunke
编写于
2020-09-04 09:47:41 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
线外发料
精简日志 报警看板修改
1 个父辈
613d64a2
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
194 行增加
和
66 行删除
README.md
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/SoseqCache.java
myproject/src/main/java/com/myproject/webapp/controller/storage/StoragePosUpdateController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaApiController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
myproject/src/main/webapp/WEB-INF/pages/qisda/alarmMsg.jsp
myproject/src/main/webapp/WEB-INF/pages/updateHistory.jsp
myproject/src/main/webapp/decorators/metro.jsp
myproject/storageManager.iml
README.md
查看文件 @
69eb8af
To get started, please complete the following steps:
1.
Download and install a MySQL 5.x database from
http://dev.mysql.com/downloads/mysql/5.0.html#downloads.
2.
Install maven 3.x, and configure it.
3.
Modify the jdbc property in the pom.xml of myproject, make sure the
jdbc url, username and password is correct.
4.
Run "mvn install" to install the parent pom.xml to your local repository.
5.
Run "mvn jetty:run" under myproject, and view the application at http://localhost:8080.
It takes long time to download jars at the first time, so be patient.
By the way, there wasn't data in your database, so you need run "mvn dbunit:operation"
to insert the basic data to your DB. Use admin/admin to login the system.
6.
If you want to make a war file, just run "mvn package -DskipTests" under myproject,
it will generate a war file under myproject/target.
C:
\W
indows
\s
ystem32>mongod --storageEngine=mmapv1 --logappend --directoryperdb --serviceName MongoDB --install
...
...
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/OutInfoCache.java
查看文件 @
69eb8af
...
...
@@ -736,7 +736,7 @@ public class OutInfoCache {
}
}
String
msg
=
""
;
int
outReelNum
=
tasks
.
size
();
if
(
outReelNum
>
0
){
log
.
info
(
"需求单"
+
outInfo
.
gethSerial
()+
"已出("
+
outInfo
.
getOutReelNum
()+
")/已发("
+
outInfo
.
getTaskFinishNum
()+
") 本次出库料盘数量:"
+
outReelNum
);
...
...
@@ -759,9 +759,11 @@ public class OutInfoCache {
taskService
.
addTaskToExecute
(
task
);
}
}
msg
=
"需求单"
+
hSerial
+
"任务分配完成,共["
+
outReelNum
+
"]盘任务"
;
log
.
info
(
msg
);
}
else
{
log
.
info
(
"需求单"
+
outInfo
.
gethSerial
()+
"本次出库料盘数量为0"
)
;
msg
=
"需求单"
+
outInfo
.
gethSerial
()+
"本次出库料盘数量为0"
;
}
if
(
outInfo
.
isReelCutAction
()
||
outInfo
.
isFirstReelAction
()){
...
...
@@ -771,8 +773,6 @@ public class OutInfoCache {
QisdaApi
.
VMILocationOutFeedback
(
outItemList
,
lessBind
);
}
}
String
msg
=
"需求单"
+
hSerial
+
"任务分配完成,共["
+
outReelNum
+
"]盘任务"
;
log
.
info
(
msg
);
return
ResultBean
.
newOkResult
(
msg
,
"ok"
);
}
...
...
myproject/src/main/java/com/myproject/webapp/controller/qisda/util/SoseqCache.java
查看文件 @
69eb8af
...
...
@@ -86,7 +86,7 @@ public class SoseqCache {
}
}
public
void
addToTotalSendQty
(
OutItem
outItem
,
int
sendQty
){
public
synchronized
void
addToTotalSendQty
(
OutItem
outItem
,
int
sendQty
){
OutInfo
outInfo
=
getCutActionInfoFromCache
(
outItem
.
getSoseq
());
if
(
outInfo
!=
null
){
OutItem
cutOutItem
=
getCutOutItem
(
outItem
.
getSoseq
(),
outItem
.
getSlotlocation
());
...
...
myproject/src/main/java/com/myproject/webapp/controller/storage/StoragePosUpdateController.java
查看文件 @
69eb8af
...
...
@@ -76,6 +76,7 @@ public class StoragePosUpdateController extends BaseUpdateController {
storagePos
.
setBarcode
(
null
);
storagePos
.
setUsed
(
false
);
storagePosManager
.
save
(
storagePos
);
dataCache
.
updateInventory
(
storagePos
,
barcode
);
}
return
""
;
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaApiController.java
查看文件 @
69eb8af
...
...
@@ -8,10 +8,13 @@ import com.myproject.bean.update.*;
import
com.myproject.bean.update.qisda.DNInfo
;
import
com.myproject.bean.update.qisda.OutInfo
;
import
com.myproject.bean.update.qisda.OutItem
;
import
com.myproject.dao.mongo.IDataLogDao
;
import
com.myproject.dao.mongo.IStoragePosDao
;
import
com.myproject.dao.mongo.qisda.IOutInfoDao
;
import
com.myproject.dao.mongo.qisda.IOutItemDao
;
import
com.myproject.exception.ValidateException
;
import
com.myproject.manager.IBarcodeManager
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.util.*
;
import
com.myproject.webapp.controller.qisda.util.OutInfoCache
;
import
com.myproject.webapp.controller.qisda.util.SoseqCache
;
...
...
@@ -52,10 +55,20 @@ public class QisdaApiController extends BaseController {
@Autowired
private
SoseqCache
soseqCache
;
@Autowired
private
QisdaBindService
qisdaBindService
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
IBarcodeManager
barcodeManager
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
IDataLogDao
dataLogDao
;
protected
final
static
Logger
log
=
LogManager
.
getLogger
(
QisdaApiController
.
class
);
/**
* 基础数据同步
...
...
@@ -268,6 +281,45 @@ public class QisdaApiController extends BaseController {
}
/**
* 线外发料接口
*/
@RequestMapping
(
value
=
"/outLineSend"
)
@ResponseBody
public
ResultBean
outLineSend
(
HttpServletRequest
request
){
try
{
String
soseq
=
receiveParamInfo
(
request
,
"soseq"
);
String
slotserial
=
receiveParamInfo
(
request
,
"slotserial"
);
String
reelid
=
receiveParamInfo
(
request
,
"reelid"
);
String
pn
=
receiveParamInfo
(
request
,
"pn"
);
String
amount
=
receiveParamInfo
(
request
,
"amount"
);
log
.
info
(
"收到线外发料请求soseq="
+
soseq
+
" slotserial="
+
slotserial
+
" reelid="
+
reelid
+
" pn="
+
pn
+
" amount="
+
amount
);
if
(
soseq
==
null
||
slotserial
==
null
||
amount
==
null
){
return
ResultBean
.
newErrorResult
(-
1
,
"参数错误:soseq,slotserial,amount为必须参数"
);
}
int
outSendQty
=
Integer
.
valueOf
(
amount
);
OutItem
cutOutItem
=
soseqCache
.
getCutOutItem
(
soseq
,
Integer
.
valueOf
(
slotserial
));
if
(
cutOutItem
!=
null
){
//更新发料数量,更新真实绑定数量
soseqCache
.
addToTotalSendQty
(
cutOutItem
,
outSendQty
);
int
realBindQty
=
cutOutItem
.
getRealLockQty
()
+
outSendQty
;
soseqCache
.
updateTotalRealLockQty
(
cutOutItem
,
realBindQty
);
//记录出入库日志
saveOutLineTask
(
cutOutItem
,
reelid
,
pn
,
outSendQty
);
ResultBean
resultBean
=
ResultBean
.
newOkResult
(
""
);
return
resultBean
;
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"未找到soseq="
+
soseq
+
" slotserial="
+
slotserial
+
"的需求单"
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"需求单请求处理出错"
,
e
);
return
ResultBean
.
newErrorResult
(
1001
,
"内部错误:"
+
e
.
getMessage
());
}
}
/**
* 出库
*/
@RequestMapping
(
value
=
"/out"
,
method
=
RequestMethod
.
POST
)
...
...
@@ -488,6 +540,64 @@ public class QisdaApiController extends BaseController {
return
paramMap
;
}
private
void
saveOutLineTask
(
OutItem
outItem
,
String
reelId
,
String
pn
,
int
outSendQty
){
try
{
DataLog
task
=
new
DataLog
();
task
.
setType
(
StorageConstants
.
OP
.
CHECKOUT
);
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
task
.
setSourceName
(
"线外_"
+
outItem
.
getSo
()
+
"_"
+
outItem
.
getSlotlocation
());
StoragePos
pos
=
storagePosDao
.
findByBarcode
(
reelId
);
AppendInfo
appendInfo
=
new
AppendInfo
();
if
(
pos
!=
null
){
task
.
setCid
(
""
);
task
.
setStorageId
(
pos
.
getStorageId
());
task
.
setStorageName
(
""
);
task
.
setPosId
(
pos
.
getId
());
task
.
setPosName
(
pos
.
getPosName
());
Barcode
barcode
=
pos
.
getBarcode
();
if
(
barcode
!=
null
){
task
.
setPartNumber
(
barcode
.
getPartNumber
());
task
.
setBarcode
(
barcode
.
getBarcode
());
task
.
setNum
(
barcode
.
getInitialAmount
());
task
.
setW
(
barcode
.
getPlateSize
());
task
.
setH
(
barcode
.
getHeight
());
appendInfo
=
barcode
.
getAppendInfo
();
log
.
info
(
"线外发料["
+
outItem
.
getSoseq
()+
"]时,清理库位["
+
pos
.
getPosName
()+
"]中的库存"
+
barcode
.
getBarcode
());
barcode
.
setPosName
(
""
);
barcodeManager
.
save
(
barcode
);
pos
.
setBarcode
(
null
);
pos
.
setUsed
(
false
);
storagePosManager
.
save
(
pos
);
dataCache
.
updateInventory
(
pos
,
barcode
);
}
}
else
{
task
.
setPartNumber
(
pn
);
task
.
setBarcode
(
reelId
);
task
.
setNum
(
outSendQty
);
}
appendInfo
.
setSo
(
outItem
.
getSo
());
appendInfo
.
setSoseq
(
outItem
.
getSoseq
());
appendInfo
.
setRefno
(
outItem
.
getRefno
());
appendInfo
.
sethSerial
(
outItem
.
gethSerial
());
appendInfo
.
setSlotStr
(
outItem
.
getSlotStr
());
appendInfo
.
setSlotIndex
(
outItem
.
getSlotlocation
());
appendInfo
.
setAction
(
outItem
.
getAction
());
appendInfo
.
setOutItemId
(
outItem
.
getId
());
task
.
setAppendInfo
(
appendInfo
);
dataLogDao
.
save
(
task
);
}
catch
(
Exception
ex
){
log
.
info
(
"线外发料出错"
,
ex
);
}
}
}
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
查看文件 @
69eb8af
...
...
@@ -581,7 +581,7 @@ public class TaskService implements ITaskService {
Collection
<
String
>
operatingPosIds
=
excludePosIds
();
for
(
Storage
storage
:
availbleStorageList
)
{
try
{
log
.
info
(
"尝试从["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位"
);
log
.
debug
(
"尝试从["
+
storage
.
getCid
()+
"]中为["
+
barcode
.
getBarcode
()+
"]查找空位"
);
StoragePos
pos
=
storagePosManager
.
getEmptyPosByStorage
(
storage
,
barcode
,
operatingPosIds
);
if
(
pos
!=
null
){
return
pos
;
...
...
myproject/src/main/webapp/WEB-INF/pages/qisda/alarmMsg.jsp
查看文件 @
69eb8af
...
...
@@ -10,22 +10,28 @@
height: 360px;
overflow-y: scroll;
}
.label{
color: #000000;
}
.label-alarm{
color:
white
;
background-color: #df4441 !important;
border-color: #df6821 !important;
color:
#FF0000 !important
;
/*background-color: #df4441 !important;*/
/*border-color: #df6821 !important;*/
}
.task-content{
/*width: 800px;*/
}
.feeds li {
background-color: white;
}
</style>
<!-- BEGIN PAGE HEADER-->
<%--<h3 class="page-title">--%>
<%--<fmt:message key="异常看板"/>--%>
<%--<fmt:message key="异常看板"/>--%>
<%--</h3>--%>
...
...
@@ -45,113 +51,116 @@
</div>
</div>
<div class="portlet-body">
<div id="inOutChart" class="chart" style="height: 3
5
0px; overflow: hidden;">
<div id="inOutChart" class="chart" style="height: 3
0
0px; overflow: hidden;">
</div>
</div>
</div>
<!-- END CHART PORTLET-->
</div>
<!--任务 -->
<!--AGV-->
<div class="col-md-4 col-sm-4">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list"></i>
任务
<i class="fa fa-list"></i>
料仓AGV
</div>
</div>
<div class="portlet-body" style="height:300px;overflow: auto;">
<div class="portlet-body" style="height:200px;overflow: auto;">
<div class="task-content">
<ul class="feeds" id="
task
">
<ul class="feeds" id="
agv
">
</ul>
</div>
<%--<div class="task-footer">--%>
<%--<div class="btn-arrow-link pull-right">--%>
<%--<a href="${ctx}/workOrder/feederSearch.html">more</a>--%>
<%--<i class="icon-arrow-right"></i>--%>
<%--</div>--%>
<%--</div>--%>
</div>
</div>
</div>
<!--
温度
-->
<!--
双层线
-->
<div class="col-md-4 col-sm-4">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list"></i>
料仓
<i class="fa fa-list"></i>
双层线
</div>
</div>
<div class="portlet-body" style="height:300px;overflow: auto;">
<div class="portlet-body" style="height:200px;overflow: auto;">
<div class="task-content">
<ul class="feeds" id="
box
">
<ul class="feeds" id="
doubleLine
">
</ul>
</div>
</div>
</div>
</div>
<!--流水线-->
<!--产线 AGV-->
<div class="col-md-4 col-sm-4">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list"></i>
流水线
<i class="fa fa-list"></i>
产线 AGV
</div>
</div>
<div class="portlet-body" style="height:
3
00px;overflow: auto;">
<div class="portlet-body" style="height:
2
00px;overflow: auto;">
<div class="task-content">
<ul class="feeds" id="line">
<ul class="feeds" id="line
Agv
">
</ul>
</div>
</div>
</div>
</div>
<!--双层线-->
<!--任务 -->
<div class="col-md-4 col-sm-4">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list"></i>
双层线
<i class="fa fa-list"></i>
任务
</div>
</div>
<div class="portlet-body" style="height:300px;overflow: auto;">
<div class="portlet-body" style="height:200px;overflow: auto;">
<div class="task-content">
<ul class="feeds" id="
doubleLine
">
<ul class="feeds" id="
task
">
</ul>
</div>
<%--<div class="task-footer">--%>
<%--<div class="btn-arrow-link pull-right">--%>
<%--<a href="${ctx}/workOrder/feederSearch.html">more</a>--%>
<%--<i class="icon-arrow-right"></i>--%>
<%--</div>--%>
<%--</div>--%>
</div>
</div>
</div>
<!--
AGV
-->
<!--
温度
-->
<div class="col-md-4 col-sm-4">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list"></i>
AGV
<i class="fa fa-list"></i>
料仓
</div>
</div>
<div class="portlet-body" style="height:300px;overflow: auto;">
<div class="portlet-body" style="height:200px;overflow: auto;">
<div class="task-content">
<ul class="feeds" id="
agv
">
<ul class="feeds" id="
box
">
</ul>
</div>
</div>
</div>
</div>
<!--
产线 AGV
-->
<!--
流水线
-->
<div class="col-md-4 col-sm-4">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list"></i>
产线 AGV
<i class="fa fa-list"></i>
流水线
</div>
</div>
<div class="portlet-body" style="height:
3
00px;overflow: auto;">
<div class="portlet-body" style="height:
2
00px;overflow: auto;">
<div class="task-content">
<ul class="feeds" id="line
Agv
">
<ul class="feeds" id="line">
</ul>
</div>
</div>
...
...
@@ -187,10 +196,14 @@
for(var i in list){
var msgBean = list[i];
var msgKey = msgBean.msgKey;
var alarmClass = "label-alarm";
if(msgBean.type == 1){
alarmClass = "";
}
var documentId = msgKey.split(".")[0];
var msgItem = "<li>" +
"<span class='task-title-sp'>["+msgBean.name+"]</span>" +
"<span class='label label-sm
label-alarm
'>" +
"<span class='task-title-sp
'>["+msgBean.name+"]</span>" +
"<span class='label label-sm
"+alarmClass+"
'>" +
msgBean.msgValue +"</span>" +
"</li>";
var html = msgMap[documentId];
...
...
@@ -222,7 +235,7 @@
$.post("${ctx}/service/store/tasks", {}, function (data) {
var html = "";
for(var item in data){
if(!data[item].timeout){
if(!data[item].timeout
|| !data[item].executing
){
continue;
}
var partNumber = data[item].partNumber;
...
...
myproject/src/main/webapp/WEB-INF/pages/updateHistory.jsp
查看文件 @
69eb8af
...
...
@@ -12,6 +12,24 @@
<div class="row">
<div class="col-md-12">
<ul class="timeline">
<li class="timeline-green">
<div class="timeline-time">
<span class="date">2020</span>
<span class="time">09-02</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020090218</h2>
<div class="timeline-content">
<ul>
<li>线外发料接口</li>
<li>精简一些日志</li>
</ul>
</div>
</div>
</li>
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">2020 </span>
...
...
myproject/src/main/webapp/decorators/metro.jsp
查看文件 @
69eb8af
...
...
@@ -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.0
8.28
</span>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2020.0
9.02
</span>
<div
class=
"scroll-to-top"
>
<i
class=
"icon-arrow-up"
></i>
</div>
...
...
myproject/storageManager.iml
查看文件 @
69eb8af
...
...
@@ -29,6 +29,10 @@
</content>
<orderEntry
type=
"inheritedJdk"
/>
<orderEntry
type=
"sourceFolder"
forTests=
"false"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework.data:spring-data-mongodb:1.8.0.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.mongodb:mongo-java-driver:2.12.5"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.slf4j:jcl-over-slf4j:1.7.11"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework.data:spring-data-commons:1.10.2.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-lang:commons-lang:2.6"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework:spring-orm:4.1.6.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework:spring-beans:4.1.6.RELEASE"
level=
"project"
/>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论