Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
SmdBox
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 17b6c565
由
sunke
编写于
2020-04-23 18:49:20 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
阳光电源看板
1 个父辈
b1cd5c35
显示空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
374 行增加
和
520 行删除
myproject/src/main/java/com/myproject/bean/json/ChartItem.java
myproject/src/main/java/com/myproject/dao/mongo/IDataLogDao.java
myproject/src/main/java/com/myproject/dao/mongo/ILiteOrderDao.java
myproject/src/main/java/com/myproject/dao/mongo/impl/DataLogDaoImpl.java
myproject/src/main/java/com/myproject/dao/mongo/impl/LiteOrderDaoImpl.java
myproject/src/main/java/com/myproject/manager/IStorageManager.java
myproject/src/main/java/com/myproject/manager/impl/StorageManagerImpl.java
myproject/src/main/java/com/myproject/util/DateUtil.java
myproject/src/main/java/com/myproject/webapp/controller/storage/ChartController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/MesApiController.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/webapp/WEB-INF/pages/storage/chart.jsp
myproject/src/main/webapp/common/metroTopMenu.jsp
myproject/src/main/java/com/myproject/bean/json/ChartItem.java
查看文件 @
17b6c56
...
...
@@ -17,6 +17,8 @@ public class ChartItem {
private
int
value4
;
private
int
value5
;
public
String
getLabel
()
{
return
label
;
}
...
...
@@ -53,6 +55,14 @@ public class ChartItem {
return
value4
;
}
public
int
getValue5
()
{
return
value5
;
}
public
void
setValue5
(
int
value5
)
{
this
.
value5
=
value5
;
}
public
void
setValue4
(
int
value4
)
{
this
.
value4
=
value4
;
}
...
...
myproject/src/main/java/com/myproject/dao/mongo/IDataLogDao.java
查看文件 @
17b6c56
...
...
@@ -24,7 +24,11 @@ public interface IDataLogDao extends IMongoDao {
List
<
ChartItem
>
putInChart
(
Date
fromTime
,
Date
toTime
,
String
partNumber
);
List
<
ChartItem
>
checkOutChart
(
Date
fromTime
,
Date
toTime
,
String
partNumber
);
int
countCheckOut
(
Date
fromTime
,
Date
toTime
);
int
countPutIn
(
Date
fromTime
,
Date
toTime
);
List
<
ChartItem
>
checkOutChart
(
Date
fromTime
,
Date
toTime
,
String
partNumber
);
DataLog
findLastOut
(
String
areaId
,
String
barcode
);
...
...
@@ -46,5 +50,5 @@ public interface IDataLogDao extends IMongoDao {
*/
List
<
DataLog
>
findByFeedPosId
(
String
feederPosId
);
List
<
DataLog
>
findHistory
(
String
barcode
,
Date
startDate
,
Date
endDate
);
List
<
DataLog
>
findHistory
(
String
barcode
,
int
num
);
}
myproject/src/main/java/com/myproject/dao/mongo/ILiteOrderDao.java
查看文件 @
17b6c56
package
com
.
myproject
.
dao
.
mongo
;
import
com.myproject.bean.json.ChartItem
;
import
com.myproject.bean.json.LiteOrder
;
import
java.util.Date
;
import
java.util.List
;
public
interface
ILiteOrderDao
extends
IMongoDao
{
...
...
@@ -12,6 +14,10 @@ public interface ILiteOrderDao extends IMongoDao {
LiteOrder
findWithItemsByOrderNo
(
String
orderNo
);
int
countFinishOrder
(
Date
fromTime
,
Date
toTime
);
List
<
ChartItem
>
orderChart
(
Date
fromTime
,
Date
toTime
);
LiteOrder
findBySource
(
String
source
);
List
<
LiteOrder
>
findUnCloseOrders
();
...
...
myproject/src/main/java/com/myproject/dao/mongo/impl/DataLogDaoImpl.java
查看文件 @
17b6c56
...
...
@@ -52,6 +52,24 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
}
@Override
public
int
countCheckOut
(
Date
fromTime
,
Date
toTime
){
return
count
(
fromTime
,
toTime
,
StorageConstants
.
OP
.
CHECKOUT
);
}
@Override
public
int
countPutIn
(
Date
fromTime
,
Date
toTime
){
return
count
(
fromTime
,
toTime
,
StorageConstants
.
OP
.
PUT_IN
);
}
private
int
count
(
Date
fromTime
,
Date
toTime
,
int
type
){
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
());
return
countByQuery
(
Query
.
query
(
c
));
}
@Override
public
List
<
ChartItem
>
checkOutChart
(
Date
fromTime
,
Date
toTime
,
String
partNumber
){
return
chart
(
fromTime
,
toTime
,
StorageConstants
.
OP
.
CHECKOUT
,
partNumber
);
}
...
...
@@ -151,19 +169,15 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
}
@Override
public
List
<
DataLog
>
findHistory
(
String
barcode
,
Date
startDate
,
Date
endDate
)
{
public
List
<
DataLog
>
findHistory
(
String
barcode
,
int
num
)
{
Criteria
c
=
new
Criteria
();
if
(
barcode
!=
null
&&
!
barcode
.
isEmpty
()){
c
.
and
(
"barcode"
).
is
(
barcode
);
}
if
(
startDate
!=
null
){
c
.
and
(
"createDate"
).
gte
(
startDate
);
}
if
(
endDate
!=
null
){
c
.
and
(
"updateDate"
).
lte
(
endDate
);
}
return
findByQuery
(
Query
.
query
(
c
));
Query
q
=
Query
.
query
(
c
);
q
.
limit
(
num
);
q
.
with
(
new
Sort
(
Sort
.
Direction
.
DESC
,
"updateDate"
));
return
findByQuery
(
q
);
}
}
myproject/src/main/java/com/myproject/dao/mongo/impl/LiteOrderDaoImpl.java
查看文件 @
17b6c56
package
com
.
myproject
.
dao
.
mongo
.
impl
;
import
com.google.common.collect.Lists
;
import
com.myproject.bean.json.ChartItem
;
import
com.myproject.bean.json.LiteOrder
;
import
com.myproject.bean.json.LiteOrderItem
;
import
com.myproject.dao.mongo.AbstractMongoDao
;
import
com.myproject.dao.mongo.ILiteOrderDao
;
import
com.myproject.dao.mongo.ILiteOrderItemDao
;
import
com.myproject.util.DateUtil
;
import
com.myproject.util.StorageConstants
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.aggregation.Aggregation
;
import
org.springframework.data.mongodb.core.aggregation.AggregationResults
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Repository
;
...
...
@@ -56,6 +61,29 @@ public class LiteOrderDaoImpl extends AbstractMongoDao implements ILiteOrderDao
}
@Override
public
int
countFinishOrder
(
Date
fromTime
,
Date
toTime
){
Date
addOneDayToTime
=
DateUtil
.
addOneDayNoTime
(
toTime
);
Criteria
c
=
new
Criteria
().
andOperator
(
Criteria
.
where
(
"updateDate"
).
gte
(
fromTime
),
Criteria
.
where
(
"updateDate"
).
lt
(
addOneDayToTime
));
return
countByQuery
(
Query
.
query
(
c
));
}
@Override
public
List
<
ChartItem
>
orderChart
(
Date
fromTime
,
Date
toTime
){
Date
addOneDayToTime
=
DateUtil
.
addOneDayNoTime
(
toTime
);
Criteria
c
=
new
Criteria
().
andOperator
(
Criteria
.
where
(
"updateDate"
).
gte
(
fromTime
),
Criteria
.
where
(
"updateDate"
).
lt
(
addOneDayToTime
));
Aggregation
agg
=
Aggregation
.
newAggregation
(
Aggregation
.
match
(
c
),
Aggregation
.
project
().
and
(
"updateDate"
).
extractDayOfYear
().
as
(
"label"
),
Aggregation
.
group
(
"label"
).
count
().
as
(
"value"
),
Aggregation
.
project
(
"value"
).
and
(
"label"
).
previousOperation
()
);
AggregationResults
<
ChartItem
>
results
=
getMongoTemplate
().
aggregate
(
agg
,
getEntityClass
(),
ChartItem
.
class
);
return
results
.
getMappedResults
();
}
@Override
public
LiteOrder
findBySource
(
String
source
)
{
if
(
StringUtils
.
isEmpty
(
source
))
return
null
;
...
...
myproject/src/main/java/com/myproject/manager/IStorageManager.java
查看文件 @
17b6c56
...
...
@@ -17,6 +17,8 @@ public interface IStorageManager extends IManager<Storage> {
public
Storage
findEmptyStorage
();
ChartItem
getWeekData
();
Collection
<
ChartItem
>
getRunStatusData
(
Date
fromDate
,
Date
toDate
,
String
partNumber
);
List
<
Storage
>
findByArea
(
String
areaId
);
...
...
myproject/src/main/java/com/myproject/manager/impl/StorageManagerImpl.java
查看文件 @
17b6c56
...
...
@@ -6,6 +6,7 @@ import com.myproject.bean.search.PageList;
import
com.myproject.bean.update.Storage
;
import
com.myproject.dao.mongo.IAlarmInfoDao
;
import
com.myproject.dao.mongo.IDataLogDao
;
import
com.myproject.dao.mongo.ILiteOrderDao
;
import
com.myproject.dao.mongo.IStorageDao
;
import
com.myproject.exception.ValidateException
;
import
com.myproject.manager.IStorageManager
;
...
...
@@ -27,6 +28,9 @@ public class StorageManagerImpl implements IStorageManager {
IDataLogDao
dataLogDao
;
@Autowired
IAlarmInfoDao
alarmInfoDao
;
@Autowired
ILiteOrderDao
liteOrderDao
;
protected
final
transient
Logger
log
=
LogManager
.
getLogger
(
getClass
());
...
...
@@ -59,6 +63,20 @@ public class StorageManagerImpl implements IStorageManager {
return
storage
;
}
@Override
public
ChartItem
getWeekData
(){
Date
startDay
=
DateUtil
.
getFirstDayOfThisWeek
();
Date
endDay
=
new
Date
();
int
putInCount
=
dataLogDao
.
countPutIn
(
startDay
,
endDay
);
int
checkOutCount
=
dataLogDao
.
countCheckOut
(
startDay
,
endDay
);
int
orderCount
=
liteOrderDao
.
countFinishOrder
(
startDay
,
endDay
);
ChartItem
item
=
new
ChartItem
();
item
.
setValue
(
putInCount
);
item
.
setValue2
(
checkOutCount
);
item
.
setValue3
(
orderCount
);
return
item
;
}
/**
* 获取某个时间段的统计信息ChartItem 的 value 为入库量,value2为出库量,value3为报警次数,value4为报警持续时间
*/
...
...
@@ -115,6 +133,15 @@ public class StorageManagerImpl implements IStorageManager {
item
.
setValue4
(
alarmItem
.
getValue2
());
}
}
List
<
ChartItem
>
orderData
=
liteOrderDao
.
orderChart
(
startDay
,
endDay
);
for
(
ChartItem
orderItem
:
orderData
){
String
dayOfYear
=
orderItem
.
getLabel
();
ChartItem
item
=
inOutDataMap
.
get
(
dayOfYear
);
if
(
item
!=
null
){
item
.
setValue5
(
orderItem
.
getValue
());
}
}
//alarmInfoDao.alarmChartByType(startDay,endDay);
//alarmInfoDao.alarmChartByBox(startDay,endDay);
return
inOutDataMap
.
values
();
...
...
myproject/src/main/java/com/myproject/util/DateUtil.java
查看文件 @
17b6c56
...
...
@@ -126,6 +126,15 @@ public final class DateUtil {
}
/**
* 获取本周的第一天
*/
public
static
Date
getFirstDayOfThisWeek
(){
Calendar
c
=
noTimeCalendar
();
c
.
set
(
Calendar
.
DAY_OF_WEEK
,
Calendar
.
MONDAY
);
return
c
.
getTime
();
}
/**
* 将日期添加一天,时间设置为00:00:00
*/
public
static
Date
addOneDayNoTime
(
Date
date
){
...
...
myproject/src/main/java/com/myproject/webapp/controller/storage/ChartController.java
查看文件 @
17b6c56
...
...
@@ -75,6 +75,12 @@ public class ChartController extends BaseController{
return
storageManager
.
getRunStatusData
(
startDay
,
today
,
null
);
}
@RequestMapping
(
"/rest/api/weekData"
)
@ResponseBody
public
ChartItem
weekData
(
HttpServletRequest
request
){
return
storageManager
.
getWeekData
();
}
@RequestMapping
(
"/rest/api/humiture"
)
@ResponseBody
public
HumitureData
humitureData
(
HttpServletRequest
request
){
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/MesApiController.java
查看文件 @
17b6c56
...
...
@@ -6,6 +6,8 @@ import com.google.common.collect.Maps;
import
com.google.common.collect.Sets
;
import
com.myproject.bean.CodeBean
;
import
com.myproject.bean.update.*
;
import
com.myproject.bean.utils.BoxStatusBean
;
import
com.myproject.bean.utils.StatusBean
;
import
com.myproject.dao.mongo.IDataLogDao
;
import
com.myproject.exception.ValidateException
;
import
com.myproject.manager.IBarcodeManager
;
...
...
@@ -306,22 +308,34 @@ public class MesApiController extends BaseController {
}
@RequestMapping
(
value
=
"/history"
)
@ResponseBody
public
List
<
Map
<
String
,
Object
>>
history
(
HttpServletRequest
request
)
{
String
bid
=
request
.
getParameter
(
"bid"
);
String
start
=
request
.
getParameter
(
"start"
);
String
end
=
request
.
getParameter
(
"end"
);
Date
startDate
=
toDate
(
start
);
Date
endDate
=
toDate
(
end
);
// String start = request.getParameter("start");
// String end = request.getParameter("end");
// Date startDate = toDate(start);
// Date endDate = toDate(end);
String
numStr
=
request
.
getParameter
(
"num"
);
int
num
=
20
;
if
(!
Strings
.
isNullOrEmpty
(
numStr
)){
try
{
num
=
Integer
.
valueOf
(
numStr
);
}
catch
(
Exception
e
){
}
}
List
<
Map
<
String
,
Object
>>
results
=
Lists
.
newArrayList
();
List
<
DataLog
>
datas
=
dataLogDao
.
findHistory
(
bid
,
startDate
,
endDate
);
List
<
DataLog
>
datas
=
dataLogDao
.
findHistory
(
bid
,
num
);
datas
.
sort
(
new
Comparator
<
DataLog
>()
{
@Override
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
return
o1
.
getCreateDate
().
compareTo
(
o2
.
getCreateDate
());
}
});
for
(
DataLog
dataItem
:
datas
){
Map
<
String
,
Object
>
item
=
Maps
.
newHashMap
();
item
.
put
(
"barcode"
,
dataItem
.
getBarcode
());
...
...
@@ -329,15 +343,41 @@ public class MesApiController extends BaseController {
item
.
put
(
"qty"
,
dataItem
.
getNum
());
item
.
put
(
"type"
,
dataItem
.
getType
());
item
.
put
(
"opor"
,
dataItem
.
getOperator
());
item
.
put
(
"pos"
,
dataItem
.
getPosStr
());
item
.
put
(
"boxName"
,
dataItem
.
getStorageName
());
item
.
put
(
"posName"
,
dataItem
.
getPosName
());
item
.
put
(
"source"
,
dataItem
.
getSourceId
());
item
.
put
(
"status"
,
dataItem
.
getStatus
());
item
.
put
(
"memo"
,
dataItem
.
getMemo
());
item
.
put
(
"date"
,
DateUtil
.
toDateTimeString
(
dataItem
.
getCreateDate
()));
results
.
add
(
item
);
}
return
results
;
}
@RequestMapping
(
value
=
"/status"
)
@ResponseBody
public
Map
<
String
,
Object
>
status
(
HttpServletRequest
request
)
{
Map
<
String
,
Object
>
results
=
Maps
.
newHashMap
();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
()){
StatusBean
statusBean
=
taskService
.
getStatus
(
storage
.
getCid
());
Map
<
Integer
,
BoxStatusBean
>
boxStatusMap
=
statusBean
.
getBoxStatus
();
int
status
=
-
1
;
if
(
boxStatusMap
!=
null
){
BoxStatusBean
boxStatusBean
=
boxStatusMap
.
get
(
1
);
if
(
boxStatusBean
!=
null
){
status
=
boxStatusBean
.
getStatus
();
}
}
int
storageStatus
=
status
;
if
(
status
==
StorageConstants
.
STATUS
.
OFFLINE
||
statusBean
.
timeOut
()){
//离线
storageStatus
=
-
1
;
}
results
.
put
(
storage
.
getName
(),
storageStatus
);
}
return
results
;
}
private
Date
toDate
(
String
dateStr
){
try
{
return
DateUtil
.
toDate
(
dateStr
,
"yyyyMMddHHmmss"
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/StorageDataController.java
查看文件 @
17b6c56
...
...
@@ -541,7 +541,7 @@ public class StorageDataController extends BaseController {
@RequestMapping
(
value
=
"/getLineMsg"
)
@ResponseBody
public
String
getLineMsg
(
HttpServletRequest
request
)
{
if
(
lineMsgParams
!
=
null
){
if
(
lineMsgParams
=
=
null
){
return
""
;
}
return
getText
(
lineMsgParams
.
getMessage
(),
lineMsgParams
.
getParams
(),
request
.
getLocale
(),
lineMsgParams
.
getDefaultMsg
());
...
...
@@ -600,7 +600,7 @@ public class StorageDataController extends BaseController {
Storage
theStorage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
resultMap
.
put
(
"cid"
,
theStorage
.
getCid
());
String
lineMsg
=
"["
+
barcode
.
getBarcode
()+
"]准备入库到["
+
pos
.
getPosName
()+
"]"
;
lineMsgParams
=
new
ValidateException
(
"msg.line.putIn"
,
new
String
[]{
code
},
lineMsg
);
lineMsgParams
=
new
ValidateException
(
"msg.line.putIn"
,
new
String
[]{
code
,
pos
.
getPosName
()
},
lineMsg
);
}
else
{
resultMap
.
put
(
"result"
,
"104"
);
lineMsgParams
=
new
ValidateException
(
"error.storage.noPosFind"
,
new
String
[]{
code
},
"未找到可用的仓位"
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
查看文件 @
17b6c56
...
...
@@ -1690,7 +1690,7 @@ public class TaskService implements ITaskService {
items
.
add
(
liteOrderItem
);
}
order
.
setOrderItems
(
items
);
if
(
order
.
isClosed
()){
if
(
!
order
.
isClosed
()){
//工单未关闭的话,检查状态,全部都出完进行关闭
boolean
closed
=
true
;
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
...
...
myproject/src/main/webapp/WEB-INF/pages/storage/chart.jsp
查看文件 @
17b6c56
...
...
@@ -11,24 +11,19 @@
<div class="clearfix">
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<!-- BEGIN PORTLET-->
<div class="portlet solid
bordered grey-cararra
">
<div class="portlet solid
grey-cararra bordered
">
<div class="portlet-title">
<div class="caption">
<
a href="${ctx}/system/dataReport.html"><i class="fa fa-bar-chart-o"></i><fmt:message key="chart.solder.used"/></a
>
<
i class="fa fa-bullhorn"></i><fmt:message key="料仓利用率"/
>
</div>
<%--<div class="actions">
<div class="btn-group" data-toggle="buttons">
<label class="btn grey-steel btn-sm active" id="inOutShow" >
<input type="radio" class="toggle">吞吐量</label>
<label class="btn grey-steel btn-sm" id="alarmShow" >
<input type="radio" class="toggle">报警</label>
</div>
</div>--%>
</div>
<div class="portlet-body">
<div id="inOutChart" style="height: 330px;">
<div id="storageUsedChart" style="height: 330px;">
</div>
</div>
...
...
@@ -37,16 +32,14 @@
</div>
<div class="col-md-6 col-sm-6">
<!-- BEGIN PORTLET-->
<div class="portlet solid
grey-cararra bordered
">
<div class="portlet solid
bordered grey-cararra
">
<div class="portlet-title">
<div class="caption">
<
i class="fa fa-bullhorn"></i><fmt:message key="chart.solder.stock"/
>
<
a href="${ctx}/system/dataReport.html"><i class="fa fa-bar-chart-o"></i><fmt:message key="物料分布"/></a
>
</div>
</div>
<div class="portlet-body">
<div id="storageUsedChart" style="height: 330px;">
<div id="sizeUsageChart" style="height: 330px;">
</div>
</div>
...
...
@@ -63,11 +56,11 @@
<div class="portlet box purple-wisteria">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-calendar"></i><fmt:message key="
chart.temperature
"/>
<i class="fa fa-calendar"></i><fmt:message key="
最近7日数据
"/>
</div>
</div>
<div class="portlet-body">
<div id="
temperature
Chart" style="height:300px">
<div id="
inOut
Chart" style="height:300px">
</div>
...
...
@@ -80,11 +73,11 @@
<div class="portlet box red-sunglo">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-calendar"></i><fmt:message key="
chart.humidity
"/>
<i class="fa fa-calendar"></i><fmt:message key="
本周数据
"/>
</div>
</div>
<div class="portlet-body">
<div id="
humidity
Chart" style="height:300px">
<div id="
week
Chart" style="height:300px">
</div>
...
...
@@ -94,99 +87,6 @@
</div>
<%-- <div class="clearfix">
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<div class="portlet box green-haze tasks-widget">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-check"></i>任务列表
</div>
</div>
<div class="portlet-body">
<div class="task-content">
<div class="slimScrollDiv"
style="position: relative; overflow: hidden; width: auto; height: 305px;">
<div class="scroller" style="height: 305px; overflow: hidden; width: auto;"
data-always-visible="1" data-rail-visible1="1" data-initialized="1">
<!-- START TASK LIST -->
<ul class="task-list" id="task">
<c:forEach items="${feeders}" var="feeder">
<li>
<div class='task-title'>
<span class='task-title-sp'>
<a href="${ctx}/workOrder/feederView.html?fid=${feeder.id}">${feeder.name}</a>
</span>
<span class='label label-sm label-${fn:toLowerCase(feeder.status)}'>[<fmt:message key="op.status.${fn:toLowerCase(feeder.status)}"/> ]</span>
</div>
</li>
</c:forEach>
</ul>
<!-- END START TASK LIST -->
</div>
</div>
</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-6 col-sm-6">
<div class="portlet box blue-steel">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-bell-o"></i>任务
</div>
</div>
<div class="portlet-body">
<div class="scroller" style="height: 300px;" data-always-visible="1" data-rail-visible="0">
<ul class="feeds" id="logs">
<c:forEach items="${dataLogs}" var="dataLog">
<c:set var="typeIcon" value="fa-sign-in"/>
<c:if test="${dataLog.type == 2}">
<c:set var="typeIcon" value="fa-sign-out"/>
</c:if>
<li>
<div class='col1'><div class='cont'>
<div class='cont-col1'>
<div class='label label-sm label-${fn:toLowerCase(dataLog.status)}'><i class='fa ${typeIcon}'></i></div>
</div>
<div class='cont-col2'><div class='desc'>${dataLog.showStr}</div></div>
</div></div>
<div class='col2'><div class='date'>
<span class='label label-sm label-${fn:toLowerCase(dataLog.status)}'><fmt:message key="op.status.${fn:toLowerCase(dataLog.status)}"/> </span>
</div></div>
</li>
</c:forEach>
</ul>
</div>
<div class="scroller-footer">
<div class="btn-arrow-link pull-right">
<a href="${ctx}/dataLog/search.html">more</a>
<i class="icon-arrow-right"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="clearfix">
</div>
</div>
</div>
--%>
<fmt:message key="home.chart.storage.total" scope="page" var="storageTotal"/>
<fmt:message key="home.chart.storage.useage" scope="page" var="storageUsage"/>
...
...
@@ -204,12 +104,14 @@
<script type="text/javascript">
setCtx('${ctx}');
//-----------利用率-----------
/*var dom = document.getElementById("storageUsedChart");
//-----------料仓利用率-----------
function showStorageUsageBar(storageList){
var dom = document.getElementById("storageUsedChart");
var usedChart = echarts.init(dom);
usedChart.clear();
usedChart.showLoading();
loadUsedData = function(){
$.post('${ctx}/rest/api/allStorages', function(data) {
var data = storageList;
usedChart.hideLoading();
var usedCounts = new Array();
var emptyCounts = new Array();
...
...
@@ -222,6 +124,7 @@
}
usedOption = {
color: ['#c23531','#308014'],
tooltip : {
trigger: 'axis',
axisPointer : { // 坐标轴指示器,坐标轴触发有效
...
...
@@ -247,7 +150,7 @@
type: 'category',
data: names,
axisTick: {
//
alignWithLabel: true
alignWithLabel: true
}
},
yAxis: {
...
...
@@ -258,42 +161,31 @@
name: '${storageUsage}',
type: 'bar',
stack: '${storageTotal}',
barMaxWidth : 35,
itemStyle:{
normal: {
color: '#c23531'
}
},
label: {
normal: {
show: true,
position: 'insideRight'
}
},
// label: {
// normal: {
// show: true,
// position: 'insideRight'
// }
// },
data: usedCounts
},
{
name: '${storageEmpty}',
type: 'bar',
stack: '${storageTotal}',
itemStyle:{
normal: {
color: '#308014'
}
},
label: {
normal: {
show: true,
position: 'insideRight'
}
},
// label: {
// normal: {
// show: true,
// position: 'insideRight'
// }
// },
data: emptyCounts
},
{
name: '${storageTotal} : ${usedPosData.value}',
type: 'pie',
radius : '15%',
center: ['28%', '28
%'],
center: ['20%', '20
%'],
tooltip : {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
...
...
@@ -306,28 +198,132 @@
]
};
usedChart.setOption(usedOption);
});
}*/
}
function showSizeUsageBar(storageList){
var dom = document.getElementById("sizeUsageChart");
var usedChart = echarts.init(dom);
usedChart.clear();
usedChart.showLoading();
var data = storageList;
usedChart.hideLoading();
var sizeData = {};
for(var i in data){
var usageMap = data[i].usageMap;
for(var sizeStr in usageMap){
var usageData = usageMap[sizeStr];
var sizeItem = sizeData[sizeStr];
if(sizeItem){
sizeItem.totalCount = sizeItem.totalCount + usageData.totalCount;
sizeItem.usedCount = sizeItem.usedCount + usageData.usedCount;
}else{
sizeItem = usageData;
}
sizeData[sizeStr] = sizeItem;
}
}
var usedCounts = new Array();
var emptyCounts = new Array();
var names = new Array();
for(var sizeStr in sizeData){
var sizeItem = sizeData[sizeStr];
names.push(sizeStr);
usedCounts.push(sizeItem.usedCount);
emptyCounts.push(sizeItem.totalCount - sizeItem.usedCount);
}
usedOption = {
color: ['#3398DB'],
tooltip : {
trigger: 'axis',
axisPointer : { // 坐标轴指示器,坐标轴触发有效
type : 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
toolbox: {
feature: {
dataView: {show: true, readOnly: true},
saveAsImage: {show: true}
}
},
legend: {
//data: ['${storageUsage}', '${storageEmpty}']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
data: names,
axisTick: {
alignWithLabel: true
}
},
yAxis: {
type: 'value'
},
series: [
{
name: '${storageUsage}',
type: 'bar',
stack: '${storageTotal}',
//barMaxWidth : 35,
itemStyle:{
normal: {
//color: '#c23531'
}
},
// label: {
// normal: {
// show: true,
// position: 'insideRight'
// }
// },
data: usedCounts
},
<%--{--%>
<%--name: '${storageEmpty}',--%>
<%--type: 'bar',--%>
<%--stack: '${storageTotal}',--%>
<%--itemStyle:{--%>
<%--normal: {--%>
<%--color: '#308014'--%>
<%--}--%>
<%--},--%>
<%--// label: {--%>
<%--// normal: {--%>
<%--// show: true,--%>
<%--// position: 'insideRight'--%>
<%--// }--%>
<%--// },--%>
<%--data: emptyCounts--%>
<%--},--%>
]
};
usedChart.setOption(usedOption);
}
//-------------出入库-------------
/*var inOutDom = document.getElementById("inOutChart");
function showInOutChart(days){
var inOutDom = document.getElementById("inOutChart");
var inOutChart = echarts.init(inOutDom);
var inOutOption;
var alarmOption;
inOutChart.showLoading();
loadInOutData = function(days){
$.post('${ctx}/rest/api/inOutData?days='+days, function(data) {
var days = new Array();
var putIns = new Array();
var checkOuts = new Array();
var
alarm
s = new Array();
var
order
s = new Array();
var lastTimes = new Array();
for(i in data){
...
...
@@ -335,7 +331,7 @@
days.push(inOutItem.label);
putIns.push(inOutItem.value);
checkOuts.push(inOutItem.value2);
alarms.push(inOutItem.value3
);
orders.push(inOutItem.value5
);
lastTimes.push(inOutItem.value4);
}
inOutChart.hideLoading();
...
...
@@ -357,7 +353,7 @@
}
},
legend: {
data:['入库量','出库量']
data:['入库量','出库量'
,"工单数"
]
},
grid: {
left: '3%',
...
...
@@ -390,7 +386,7 @@
series: [
{
name:'入库量',
type:'
bar
',
type:'
line
',
itemStyle:{
normal: {
color: '#9b59b6'
...
...
@@ -400,398 +396,105 @@
},
{
name:'出库量',
type:'
bar
',
type:'
line
',
itemStyle:{
normal: {
color: '#dfba49'
}
},
data:checkOuts
}
]
};
alarmOption = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
crossStyle: {
color: '#999'
}
}
},
toolbox: {
feature: {
dataView: {show: true, readOnly: true},
saveAsImage: {show: true}
}
},
legend: {
data:['报警次数','报警持续时间']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: days,
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
name: '报警次数',
min: 0,
max: 500,
//interval: 5,
minInterval: 1,
axisLabel: {
formatter: '{value} 次'
}
},
{
type: 'value',
name: '持续时间(分钟)',
min: 0,
max: 1000,
//interval: 50,
minInterval: 1,
axisLabel: {
formatter: '{value} 分钟'
}
}
],
series: [
{
name:'报警次数',
name:'工单数',
type:'line',
symbol: 'emptyCircle',
symbolSize: 10,
itemStyle:{
normal: {
color: '#F3565D'
}
},
data:alarms
}
,
{
name:'报警持续时间',
type:'line',
symbol: 'emptyCircle',
stack: '总量',
symbolSize: 10,
itemStyle:{
normal: {
color: '#4b77be'
}
},
areaStyle: {normal: {}},
smooth:true,
symbol: 'none',
sampling: 'average',
yAxisIndex: 1,
data:lastTimes
// itemStyle:{
// normal: {
// color: '#dfba49'
// }
// },
data:orders
}
]
};
inOutChart.setOption(inOutOption);
});
}
*/
/* $("#inOutShow").click(function (){
inOutChart.setOption(inOutOption,true);
//showSolderInventoryChart('inOutChart','${show}',false);
//showOutSolderChart("inOutChart","DAY");
})*/
showOutSolderChart("inOutChart","DAY");
solderInventoryChart('storageUsedChart','${show}',false);
/*$("#alarmShow").click(function (){
inOutChart.setOption(alarmOption,true);
})*/
//-----------温湿度-----------
var temperaturetDom = document.getElementById("temperatureChart");
var temperatureChart = echarts.init(temperaturetDom);
var humidityDom = document.getElementById("humidityChart");
var humidityChart = echarts.init(humidityDom);
humidityChart.showLoading();
temperatureChart.showLoading();
//---------本周数据------------
function showWeekDataChart(){
var dom = document.getElementById("weekChart");
var usedChart = echarts.init(dom);
usedChart.clear();
usedChart.showLoading();
$.post('${ctx}/rest/api/weekData', function(data) {
usedChart.hideLoading();
var names = ["入库盘数","出库盘数","工单数"];
var dataArray = new Array();
dataArray.push(data.value);
dataArray.push(data.value1);
dataArray.push(data.value2);
loadHumidityData = function(days){
// 异步加载数据
$.post('${ctx}/rest/api/humiture?hours='+days, function(data) {
humidityChart.hideLoading();
temperatureChart.hideLoading();
// 填入数据
temperatureChart.setOption({
tooltip: {
trigger: 'axis'
},
legend: {
data:data.boxNames
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
usedOption = {
color: ['#91c7ae'],
tooltip : {
trigger: 'axis',
axisPointer : { // 坐标轴指示器,坐标轴触发有效
type : 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
toolbox: {
show: true,
feature: {
//dataView: {readOnly: false},
//magicType: {type: ['line', 'bar']},
//restore: {},
//saveAsImage: {}
}
},
xAxis: {type: 'category',
boundaryGap: false,
data: data.times
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value} °C'
dataView: {show: true, readOnly: true},
saveAsImage: {show: true}
}
},
series: data.temperatureData
});
humidityChart.setOption({
tooltip: {
trigger: 'axis'
},
legend: {
data:data.boxNames
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
show: true,
feature: {
//dataView: {readOnly: false},
//magicType: {type: ['line', 'bar']},
//restore: {},
//saveAsImage: {}
}
},
xAxis: {type: 'category',
boundaryGap: false,
data: data.times
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value} '
}
},
series: data.humidityData
});
});
}
/**
* 锡膏实时库存
* @param elementId
* @param cid
* @reload 是否重新加载
*/
function solderInventoryChart(elementId,cid, reload){
var inventoryDom = document.getElementById(elementId);
var inventoryChart = echarts.init(inventoryDom);
var lengend = {
height:10,
itemWidth: 23,
data: ['${label_warming}','${label_warmed}','${label_soonToExpire}', '${label_invalid}',{name:'max', icon: 'image://'+ctx+'/assets/global/img/maxIcon.png'}, {name:'min', icon: 'image://'+ctx+'/assets/global/img/minIcon.png'}],
};
if(reload){
inventoryChart.clear();
inventoryChart.showLoading();
lengend.width = 350;
}
$.get(ctx + '/service/store/solderInventory?cid='+cid).done(function (data) {
inventoryChart.hideLoading();
var xAxisLabel = new Array();
var finishWarmData = new Array();//回温完成
var inWarmData = new Array();//正在回温
var willExpireData = new Array();//即将过期
var expireData = new Array();//失效
var maxAlarm = new Array();//
var minAlarm = new Array();
for(i in data){
var item = data[i];
pushToArr(xAxisLabel, item.partNumber);
pushToArr(finishWarmData,item.stockNum - item.inWarmNum - item.expireNum - item.willExpireNum);
pushToArr(inWarmData,item.inWarmNum);
pushToArr(willExpireData,item.willExpireNum);
pushToArr(expireData,item.expireNum);
pushToArr(minAlarm,item.minStoreNum);
pushToArr(maxAlarm,item.maxStoreNum);
}
//alert(xAxisLabel);
inventoryChart.setOption({
tooltip : {
trigger: 'axis',
axisPointer : { // 坐标轴指示器,坐标轴触发有效
type : 'shadow' // 默认为直线,可选为:'line' | 'shadow'
xAxis: {
type: 'category',
data: names,
axisTick: {
alignWithLabel: true
}
},
legend:lengend,
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
yAxis: {
type: 'value'
},
xAxis: {
type: 'category',
data: xAxisLabel
},
series: [
{
name: '${label_warmed}',
type: 'bar',
stack: '回温数量',
label: {
normal: {
show: true,
position:'insideTop'
}
},
itemStyle:{
normal: {
color: '#35aa47',
position:'insideTop'
}
},
data: finishWarmData
},
{
name: '${label_warming}',
type: 'bar',
stack: '回温数量',
label: {
normal: {
show: true,
position:'insideTop'
}
},
itemStyle:{
normal: {
color: '#ffb848'
}
data: dataArray
},
data: inWarmData
},
{
name: '${label_soonToExpire}',
type: 'bar',
stack: '回温数量',
label: {
normal: {
show: true,
position:'insideTop'
}
},
itemStyle:{
normal: {
color: '#e08283'
}
},
data: willExpireData
},
{
name: '${label_invalid}',
type: 'bar',
stack: '回温数量',
label: {
normal: {
show: true,
position:'insideTop'
}
},
itemStyle:{
normal: {
color: '#d91e18'
}
},
data: expireData
},
{
name: 'max',
type: 'scatter',
symbol:'rect',
symbolSize:[30, 1],
label: {
normal: {
show: true,
position:'top'
}
},
itemStyle:{
normal: {
color: '#f64501'
}
},
data: maxAlarm,
},
{
name: 'min',
type: 'scatter',
symbol:'rect',
symbolSize:[30, 1],
itemStyle:{
normal:{
color:'#9d00ff',
]
};
usedChart.setOption(usedOption);
});
}
},
label: {
normal: {
show: true,
position:'bottom'
}
},
data: minAlarm
}
]
});
loadUsedData = function(){
$.post('${ctx}/service/store/storageList', function(data) {
showStorageUsageBar(data);
showSizeUsageBar(data);
});
}
loadUsedData();
showInOutChart(7);
showWeekDataChart();
//setTimeout(function(){
//loadInOutData(6);
//loadUsedData();
loadHumidityData(7);
//
loadHumidityData(7);
//},1000);
</script>
...
...
myproject/src/main/webapp/common/metroTopMenu.jsp
查看文件 @
17b6c56
...
...
@@ -101,6 +101,11 @@
<fmt:message key="menu.bigdata.runStatus" /><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/storage/chart.html" name="data">
<fmt:message key="数据看板" /><span class="selected"></span>
</a>
</li>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/system/dataReport.html" name="data">--%>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论