Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
QisdaNew
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit e8801c52
由
sunke
编写于
2021-03-16 10:42:52 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加点料机解析条码获取尺寸信息接口
增加AGV锁定VMI线入库包装料架接口 出入库统计信息优化
1 个父辈
aae06944
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
251 行增加
和
110 行删除
README.md
myproject/src/main/java/com/myproject/bean/json/ChartItem.java
myproject/src/main/java/com/myproject/dao/mongo/impl/DataLogDaoImpl.java
myproject/src/main/java/com/myproject/manager/impl/StorageManagerImpl.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.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
查看文件 @
e8801c5
...
@@ -240,7 +240,7 @@
...
@@ -240,7 +240,7 @@
>>rfid : RFID
>>rfid : RFID
>
>
> 返回:
> 返回:
>>` {"code":0,"msg":"ok","data":[{"barcode":"S20052301213","cid":"packing-20","rfid":"A12","rfidLoc":"3","lockPos":"4D2001AA0006","lockPosId":"1231"}]} `
>>` {"code":0,"msg":"ok","data":[{"barcode":"S20052301213","cid":"packing-20","rfid":"A12","rfidLoc":"3","lockPos
Name
":"4D2001AA0006","lockPosId":"1231"}]} `
>>
>>
>> - code: 0为正常,其他为异常,
>> - code: 0为正常,其他为异常,
>> - msg:消息,
>> - msg:消息,
...
@@ -249,7 +249,8 @@
...
@@ -249,7 +249,8 @@
>> - rfidLoc: 料架的库位
>> - rfidLoc: 料架的库位
>> - barcode: 库位中料盘的条码
>> - barcode: 库位中料盘的条码
>> - cid: 库位中料盘的锁定库位对应的料仓编号
>> - cid: 库位中料盘的锁定库位对应的料仓编号
>> - lockPos: 库位中料盘的锁定库位
>> - lockPosName: 库位中料盘的锁定库位
>> - lockPosId: 库位中料盘的锁定库位的ID,
12.
包装线AGV获取料架中的任务数,如果当前料架的任务数不为0,需要用当前料架去其他包装仓继续放料
12.
包装线AGV获取料架中的任务数,如果当前料架的任务数不为0,需要用当前料架去其他包装仓继续放料
...
@@ -414,4 +415,39 @@
...
@@ -414,4 +415,39 @@
>>
>>
>> - code: 0为正常,其他为异常,
>> - code: 0为正常,其他为异常,
>> - msg:消息,
>> - msg:消息,
>> - data:
\ No newline at end of file
\ No newline at end of file
>> - data:
22.
AGV锁定包装仓入库料架, AGV从VMI拉上包装料架准备入库时,调用此接口,用于包装仓判断料架是否是入库料架
>地址:
>>/rest/api/qisda/device/lockPutInAShelf
>
>参数:
>>rfid : 包装料架的RFID
>
> 返回:
>>` {"code":0,"msg":"ok","data":""}`
>>
>> - code: 0为正常,其他为异常,
>> - msg:消息,
>> - data:
23.
点料机解析条码,获取料盘尺寸
>地址:
>>/rest/api/qisda/device/resolveCode
>
>参数:
>>code: 扫描到的条码信息,多个条码用##分割,条码前带尺寸信息会自动创建
>
> 返回:
>>` {"code":0,"msg":"ok","data":{"barcode":"xxxx","pn":"xxxx","qty":1000,"w":7,"h":8}}`
>>
>> - code: 0为正常,其他为异常,(未传参数, 未找到有效条码,多个有效条码)
>> - msg:消息,
>> - data:
>> - barcode: 需求单号
>> - pn: 物料编号
>> - qty: 数量
>> - w: 料盘直径(未配置尺寸信息时使用传入尺寸,否则使用配置尺寸)
>> - h: 厚度(未配置尺寸信息时使用传入尺寸,否则使用配置尺寸)
myproject/src/main/java/com/myproject/bean/json/ChartItem.java
查看文件 @
e8801c5
...
@@ -7,6 +7,8 @@ package com.myproject.bean.json;
...
@@ -7,6 +7,8 @@ package com.myproject.bean.json;
*/
*/
public
class
ChartItem
{
public
class
ChartItem
{
private
DateBean
dateBean
;
private
String
label
;
private
String
label
;
private
int
value
;
private
int
value
;
...
@@ -56,4 +58,12 @@ public class ChartItem {
...
@@ -56,4 +58,12 @@ public class ChartItem {
public
void
setValue4
(
int
value4
)
{
public
void
setValue4
(
int
value4
)
{
this
.
value4
=
value4
;
this
.
value4
=
value4
;
}
}
public
DateBean
getDateBean
()
{
return
dateBean
;
}
public
void
setDateBean
(
DateBean
dateBean
)
{
this
.
dateBean
=
dateBean
;
}
}
}
myproject/src/main/java/com/myproject/dao/mongo/impl/DataLogDaoImpl.java
查看文件 @
e8801c5
...
@@ -77,9 +77,9 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
...
@@ -77,9 +77,9 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
}
}
Aggregation
agg
=
Aggregation
.
newAggregation
(
Aggregation
agg
=
Aggregation
.
newAggregation
(
Aggregation
.
match
(
c
),
Aggregation
.
match
(
c
),
Aggregation
.
project
().
and
(
"updateDate"
).
extractDayOfYear
().
as
(
"
label
"
),
Aggregation
.
project
().
and
(
"updateDate"
).
extractDayOfYear
().
as
(
"
dayOfYear"
).
and
(
"updateDate"
).
extractYear
().
as
(
"year
"
),
Aggregation
.
group
(
"
label
"
).
count
().
as
(
"value"
),
Aggregation
.
group
(
"
dayOfYear"
,
"year
"
).
count
().
as
(
"value"
),
Aggregation
.
project
(
"value"
).
and
(
"
label
"
).
previousOperation
()
Aggregation
.
project
(
"value"
).
and
(
"
dateBean
"
).
previousOperation
()
);
);
AggregationResults
<
ChartItem
>
results
=
getMongoTemplate
().
aggregate
(
agg
,
getEntityClass
(),
ChartItem
.
class
);
AggregationResults
<
ChartItem
>
results
=
getMongoTemplate
().
aggregate
(
agg
,
getEntityClass
(),
ChartItem
.
class
);
return
results
.
getMappedResults
();
return
results
.
getMappedResults
();
...
...
myproject/src/main/java/com/myproject/manager/impl/StorageManagerImpl.java
查看文件 @
e8801c5
package
com
.
myproject
.
manager
.
impl
;
package
com
.
myproject
.
manager
.
impl
;
import
com.myproject.bean.json.ChartItem
;
import
com.myproject.bean.json.ChartItem
;
import
com.myproject.bean.json.DateBean
;
import
com.myproject.bean.search.PageList
;
import
com.myproject.bean.search.PageList
;
import
com.myproject.bean.update.Storage
;
import
com.myproject.bean.update.Storage
;
...
@@ -79,18 +80,20 @@ public class StorageManagerImpl implements IStorageManager {
...
@@ -79,18 +80,20 @@ public class StorageManagerImpl implements IStorageManager {
c
.
setTime
(
startDay
);
c
.
setTime
(
startDay
);
do
{
do
{
int
dayOfYear
=
c
.
get
(
Calendar
.
DAY_OF_YEAR
);
int
dayOfYear
=
c
.
get
(
Calendar
.
DAY_OF_YEAR
);
int
year
=
c
.
get
(
Calendar
.
YEAR
);
String
dayStr
=
DateUtil
.
toDateString
(
c
.
getTime
());
String
dayStr
=
DateUtil
.
toDateString
(
c
.
getTime
());
ChartItem
item
=
new
ChartItem
();
ChartItem
item
=
new
ChartItem
();
item
.
setLabel
(
dayStr
);
item
.
setLabel
(
dayStr
);
inOutDataMap
.
put
(
String
.
valueOf
(
dayOfYear
),
item
);
String
yearAndDay
=
year
+
"-"
+
dayOfYear
;
inOutDataMap
.
put
(
yearAndDay
,
item
);
c
.
add
(
Calendar
.
DAY_OF_YEAR
,
1
);
c
.
add
(
Calendar
.
DAY_OF_YEAR
,
1
);
}
while
(
c
.
getTimeInMillis
()
<=
endTime
);
}
while
(
c
.
getTimeInMillis
()
<=
endTime
);
List
<
ChartItem
>
putInData
=
dataLogDao
.
putInChart
(
startDay
,
endDay
,
partNumber
);
List
<
ChartItem
>
putInData
=
dataLogDao
.
putInChart
(
startDay
,
endDay
,
partNumber
);
for
(
ChartItem
putInItem
:
putInData
){
for
(
ChartItem
putInItem
:
putInData
){
String
dayOfYear
=
putInItem
.
getLabel
();
DateBean
dateBean
=
putInItem
.
getDateBean
();
ChartItem
item
=
inOutDataMap
.
get
(
da
yOfYear
);
ChartItem
item
=
inOutDataMap
.
get
(
da
teBean
.
getYear
()
+
"-"
+
dateBean
.
getDayOfYear
()
);
if
(
item
!=
null
){
if
(
item
!=
null
){
item
.
setValue
(
putInItem
.
getValue
());
item
.
setValue
(
putInItem
.
getValue
());
}
}
...
@@ -99,22 +102,22 @@ public class StorageManagerImpl implements IStorageManager {
...
@@ -99,22 +102,22 @@ public class StorageManagerImpl implements IStorageManager {
List
<
ChartItem
>
checkOutData
=
dataLogDao
.
checkOutChart
(
startDay
,
endDay
,
partNumber
);
List
<
ChartItem
>
checkOutData
=
dataLogDao
.
checkOutChart
(
startDay
,
endDay
,
partNumber
);
for
(
ChartItem
checkOutItem
:
checkOutData
){
for
(
ChartItem
checkOutItem
:
checkOutData
){
String
dayOfYear
=
checkOutItem
.
getLabel
();
DateBean
dateBean
=
checkOutItem
.
getDateBean
();
ChartItem
item
=
inOutDataMap
.
get
(
da
yOfYear
);
ChartItem
item
=
inOutDataMap
.
get
(
da
teBean
.
getYear
()
+
"-"
+
dateBean
.
getDayOfYear
()
);
if
(
item
!=
null
){
if
(
item
!=
null
){
item
.
setValue2
(
checkOutItem
.
getValue
());
item
.
setValue2
(
checkOutItem
.
getValue
());
}
}
}
}
List
<
ChartItem
>
alarmData
=
alarmInfoDao
.
alarmChart
(
startDay
,
endDay
);
//
List<ChartItem> alarmData = alarmInfoDao.alarmChart(startDay, endDay);
for
(
ChartItem
alarmItem
:
alarmData
){
//
for (ChartItem alarmItem : alarmData){
String
dayOfYear
=
alarmItem
.
getLabel
();
// DateBean dateBean = alarmItem.getDateBean
();
ChartItem
item
=
inOutDataMap
.
get
(
dayOfYear
);
// ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear()
);
if
(
item
!=
null
){
//
if(item != null){
item
.
setValue3
(
alarmItem
.
getValue
());
//
item.setValue3(alarmItem.getValue());
item
.
setValue4
(
alarmItem
.
getValue2
());
//
item.setValue4(alarmItem.getValue2());
}
//
}
}
//
}
//alarmInfoDao.alarmChartByType(startDay,endDay);
//alarmInfoDao.alarmChartByType(startDay,endDay);
//alarmInfoDao.alarmChartByBox(startDay,endDay);
//alarmInfoDao.alarmChartByBox(startDay,endDay);
return
inOutDataMap
.
values
();
return
inOutDataMap
.
values
();
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/QisdaDeviceController.java
查看文件 @
e8801c5
...
@@ -1432,4 +1432,76 @@ public class QisdaDeviceController extends BaseController {
...
@@ -1432,4 +1432,76 @@ public class QisdaDeviceController extends BaseController {
}
}
}
}
/**
* AGV锁定包装仓入库料架, AGV从VMI拉上包装料架准备入库时,调用此接口,用于包装仓判断料架是否是入库料架
*/
@RequestMapping
(
"/lockPutInAShelf"
)
@ResponseBody
public
ResultBean
lockPutInAShelf
(
HttpServletRequest
request
)
{
String
rfid
=
request
.
getParameter
(
"rfid"
);
try
{
log
.
info
(
"AGV锁定料架["
+
rfid
+
"]为入库料架"
);
ReelLockPosInfo
reelLocInfo
=
new
ReelLockPosInfo
();
reelLocInfo
.
setBarcode
(
rfid
);
reelLocInfo
.
setCid
(
rfid
);
reelLocInfo
.
setLockPosName
(
rfid
);
reelLocInfo
.
setLockPosId
(
rfid
);
reelLocInfo
.
setRfid
(
rfid
);
reelLocInfo
.
setRfidLoc
(
"0"
);
reelLocInfo
=
QisdaCache
.
addReelLockPosInfo
(
reelLocInfo
);
if
(
reelLocInfo
==
null
){
return
ResultBean
.
newErrorResult
(
5201
,
"库位锁定失败"
);
}
else
{
ResultBean
.
newOkResult
(
""
);
}
return
ResultBean
.
newOkResult
(
""
);
}
catch
(
Exception
e
){
log
.
error
(
"锁定包装仓入库料架出错"
,
e
);
return
ResultBean
.
newErrorResult
(
5202
,
"锁定包装仓入库料架出错:"
+
e
.
getMessage
());
}
}
/**
* 点料机解析条码,用于获取料盘尺寸
*/
@RequestMapping
(
"/resolveCode"
)
@ResponseBody
public
ResultBean
resolveCode
(
HttpServletRequest
request
)
{
try
{
String
code
=
request
.
getParameter
(
"code"
);
log
.
info
(
"点料机解析获取条码["
+
code
+
"]尺寸"
);
if
(
Strings
.
isNotBlank
(
code
)){
Collection
<
CodeBean
>
codeBeans
=
dataCache
.
resolveCodeStr
(
code
);
Barcode
barcode
=
null
;
for
(
CodeBean
codeBean
:
codeBeans
)
{
if
(
codeBean
.
isValid
()){
if
(
barcode
!=
null
){
String
msg
=
"找到多个有效条码"
;
return
ResultBean
.
newErrorResult
(
5100
,
msg
);
}
else
{
barcode
=
codeBean
.
getBarcode
();
}
}
}
if
(
barcode
==
null
){
String
msg
=
"未找到有效条码"
;
return
ResultBean
.
newErrorResult
(
5101
,
msg
);
}
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"barcode"
,
barcode
.
getBarcode
());
resultMap
.
put
(
"pn"
,
barcode
.
getPartNumber
());
resultMap
.
put
(
"qty"
,
barcode
.
getAmount
());
resultMap
.
put
(
"w"
,
barcode
.
getPlateSize
());
resultMap
.
put
(
"h"
,
barcode
.
getHeight
());
return
ResultBean
.
newOkResult
(
resultMap
);
}
return
ResultBean
.
newErrorResult
(
5102
,
"未找到code参数"
);
}
catch
(
Exception
e
){
log
.
error
(
"点料机获取料盘尺寸出错"
,
e
);
return
ResultBean
.
newErrorResult
(
5103
,
"点料机获取料盘尺寸出错:"
+
e
.
getMessage
());
}
}
}
}
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
查看文件 @
e8801c5
...
@@ -177,8 +177,8 @@
...
@@ -177,8 +177,8 @@
</display:column>
</display:column>
<display:column property="barcode.appendInfo.facility" titleKey="Facility" sortProperty="barcode.appendInfo.facility" sortable="true"/>
<display:column property="barcode.appendInfo.facility" titleKey="Facility" sortProperty="barcode.appendInfo.facility" sortable="true"/>
<display:column titleKey="时间" sortProperty="barcode.
update
Date" sortable="true">
<display:column titleKey="时间" sortProperty="barcode.
putIn
Date" sortable="true">
<fmt:formatDate value="${pos.barcode.
update
Date}" pattern="yyyy-MM-dd HH:mm"/>
<fmt:formatDate value="${pos.barcode.
putIn
Date}" pattern="yyyy-MM-dd HH:mm"/>
</display:column>
</display:column>
<display:column titleKey="barcode.amount" sortProperty="barcode.amount" sortable="true">
<display:column titleKey="barcode.amount" sortProperty="barcode.amount" sortable="true">
...
...
myproject/src/main/webapp/WEB-INF/pages/system/runStatus.jsp
查看文件 @
e8801c5
...
@@ -72,39 +72,39 @@
...
@@ -72,39 +72,39 @@
</div>
</div>
<
div class="row"
>
<
%--<div class="row">--%
>
<
div class="col-md-12"
>
<
%--<div class="col-md-12">--%
>
<
!-- BEGIN CHART PORTLET--
>
<
%--<!-- BEGIN CHART PORTLET-->--%
>
<
div class="portlet light bordered"
>
<
%--<div class="portlet light bordered">--%
>
<
div class="portlet-title"
>
<
%--<div class="portlet-title">--%
>
<
div class="caption"
>
<
%--<div class="caption">--%
>
<
i class="icon-bar-chart font-green-haze"></i
>
<
%--<i class="icon-bar-chart font-green-haze"></i>--%
>
<
span class="caption-subject bold uppercase font-green-haze"><fmt:message key="runStatus.alarmInfo"/></span
>
<
%--<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="runStatus.alarmInfo"/></span>--%
>
<
/div
>
<
%--</div>--%
>
<
div class="tools"
>
<
%--<div class="tools">--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
div class="portlet-body"
>
<
%--<div class="portlet-body">--%
>
<
div class="row"
>
<
%--<div class="row">--%
>
<
div class="col-md-12"
>
<
%--<div class="col-md-12">--%
>
<
div id="alarmChart" class="chart" style="height: 350px; overflow: hidden;"
>
<
%--<div id="alarmChart" class="chart" style="height: 350px; overflow: hidden;">--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
div class="col-md-6"
>
<
%--<div class="col-md-6">--%
>
<
div id="alarmTypeChart" class="chart col-md-6" style="height: 250px; overflow: hidden;"
>
<
%--<div id="alarmTypeChart" class="chart col-md-6" style="height: 250px; overflow: hidden;">--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
div class="col-md-6"
>
<
%--<div class="col-md-6">--%
>
<
div id="alarmBoxChart" class="chart col-md-6" style="height: 250px; overflow: hidden;"
>
<
%--<div id="alarmBoxChart" class="chart col-md-6" style="height: 250px; overflow: hidden;">--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<
!-- END CHART PORTLET--
>
<
%--<!-- END CHART PORTLET-->--%
>
<
/div
>
<
%--</div>--%
>
<
/div
>
<
%--</div>--%
>
<fmt:message key="runStatus.throughput" var="label_throughput"/>
<fmt:message key="runStatus.throughput" var="label_throughput"/>
<fmt:message key="runStatus.stockOut" var="label_stockOut"/>
<fmt:message key="runStatus.stockOut" var="label_stockOut"/>
...
@@ -439,60 +439,60 @@
...
@@ -439,60 +439,60 @@
};
};
var alarmTypeChart = echarts.init(document.getElementById("alarmTypeChart"));
<%--var alarmTypeChart = echarts.init(document.getElementById("alarmTypeChart"));--%>
alarmTypeChart.setOption(alarmTypeOption);
<%--alarmTypeChart.setOption(alarmTypeOption);--%>
//报警BOX
<%--//报警BOX--%>
var boxs = new Array();
<%--var boxs = new Array();--%>
var boxCount = new Array();
<%--var boxCount = new Array();--%>
var boxLastTimes = new Array();
<%--var boxLastTimes = new Array();--%>
<
c:forEach items="${alarmBoxData}" var="alarmBoxItem"
>
<
%--<c:forEach items="${alarmBoxData}" var="alarmBoxItem">--%
>
boxs.push("${alarmBoxItem.label}");
<%--boxs.push("${alarmBoxItem.label}");--%>
boxCount.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value}});
<%--boxCount.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value}});--%>
boxLastTimes.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value2}});
<%--boxLastTimes.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value2}});--%>
<
/c:forEach
>
<
%--</c:forEach>--%
>
alarmBoxOption = {
<%--alarmBoxOption = {--%>
tooltip: {
<%--tooltip: {--%>
trigger: 'item',
<%--trigger: 'item',--%>
formatter: "{b} <br/>{a}: {c} ({d}%)"
<%--formatter: "{b} <br/>{a}: {c} ({d}%)"--%>
},
<%--},--%>
legend: {
<%--legend: {--%>
orient: 'vertical',
<%--orient: 'vertical',--%>
x: 'left',
<%--x: 'left',--%>
data:boxs
<%--data:boxs--%>
},
<%--},--%>
series: [
<%--series: [--%>
{
<%--{--%>
name:'报警次数',
<%--name:'报警次数',--%>
type:'pie',
<%--type:'pie',--%>
selectedMode: 'single',
<%--selectedMode: 'single',--%>
radius: [0, '40%'],
<%--radius: [0, '40%'],--%>
label: {
<%--label: {--%>
normal: {
<%--normal: {--%>
show: false
<%--show: false--%>
}
<%--}--%>
},
<%--},--%>
data:boxCount
<%--data:boxCount--%>
},
<%--},--%>
{
<%--{--%>
name:'报警持续时间',
<%--name:'报警持续时间',--%>
type:'pie',
<%--type:'pie',--%>
radius: ['55%', '75%'],
<%--radius: ['55%', '75%'],--%>
label: {
<%--label: {--%>
normal: {
<%--normal: {--%>
show: false
<%--show: false--%>
}
<%--}--%>
},
<%--},--%>
data:boxLastTimes
<%--data:boxLastTimes--%>
}
<%--}--%>
]
<%--]--%>
};
<%--};--%>
var alarmBoxChart = echarts.init(document.getElementById("alarmBoxChart"));
<%--var alarmBoxChart = echarts.init(document.getElementById("alarmBoxChart"));--%>
alarmBoxChart.setOption(alarmBoxOption);
<%--alarmBoxChart.setOption(alarmBoxOption);--%>
...
...
myproject/src/main/webapp/WEB-INF/pages/updateHistory.jsp
查看文件 @
e8801c5
...
@@ -12,6 +12,26 @@
...
@@ -12,6 +12,26 @@
<div class="row">
<div class="row">
<div class="col-md-12">
<div class="col-md-12">
<ul class="timeline">
<ul class="timeline">
<li class="timeline-purple">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">03-15</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021031516</h2>
<div class="timeline-content">
<ul>
<li>增加点料机解析条码获取尺寸信息接口</li>
<li>增加AGV锁定VMI线入库包装料架接口</li>
<li>出入库统计信息优化</li>
</ul>
</div>
</div>
</li>
<li class="timeline-green">
<li class="timeline-green">
<div class="timeline-time">
<div class="timeline-time">
<span class="date">2021</span>
<span class="date">2021</span>
...
...
myproject/src/main/webapp/decorators/metro.jsp
查看文件 @
e8801c5
...
@@ -239,7 +239,7 @@
...
@@ -239,7 +239,7 @@
<div
class=
"page-footer-inner"
>
<div
class=
"page-footer-inner"
>
2016
©
<a
href=
"${ctx}/updateHistory.html"
>
SMD BOX
</a>
2016
©
<a
href=
"${ctx}/updateHistory.html"
>
SMD BOX
</a>
</div>
</div>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2021.03.1
0
</span>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2021.03.1
5
</span>
<div
class=
"scroll-to-top"
>
<div
class=
"scroll-to-top"
>
<i
class=
"icon-arrow-up"
></i>
<i
class=
"icon-arrow-up"
></i>
</div>
</div>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论