課程說明
▍ 1.1 課程實現功能
本課程爲物聯網應用平臺設計一個儀表盤首頁,包括以下內容:
-
卡片展示設備總數;
-
卡片展示網關總數;
-
卡片展示產品總數;
-
卡片展示產品分組總數;
-
圖表展示各運營商的產品統計數量;
-
圖表展示各雲端協議的統計數量。
▍ 1.2 課程知識點
▍ 1.3 卡片顯示實現思路
-
創建包括4個屬性的非存儲數據庫業務對象;
-
編寫JavaAction來彙總業務對象的相關數量;
-
在數據源定義中調用JavaAction生成的邏輯流,自動執行查詢獲得彙總數量;
-
編寫組件渲染器,將邏輯流返回的彙總數量信息顯示爲卡片的樣式。
課程內容
01 創建業務對象
-
名稱:數量統計
-
編碼:QTY_STATS
-
存儲數據庫:否
02 編寫JavaAction獲取統計數量
儀表盤中設備、網關、產品和產品組的數量需要實時統計出來,通過在邏輯流中的JavaAction統計得出各數量。
-
名稱:彙總設備網關產品設備組數量
-
編碼:AllProductsCount
-
返回值類型:List
-
業務對象:數量統計
-
暴露爲邏輯流:是
-
邏輯流類型:DataSet
-
DataSet業務對象類型:數量統計
2. JavaAction彙總設備網關產品設備組數量的參數如下:
-
參數名稱:dataSetConfig
-
類型:DataSetConfig
-
業務對象:數量統計
保存之後可以看到生成了邏輯流彙總設備網關產品設備組數量。
代碼庫中打開io/buildrun/engine/briotsrv/action/AllProductsCount.java(可以使用在線的Web IDE,也可以克隆到本地使用其他IDE工具完成),修改executeAction()方法爲:
// BEGIN USER CODE
ArrayList<QtyStats> qtyArrayList = new ArrayList<QtyStats>();
JavaActionHelper javaActionHelper = context.getCore().getRuntimeManager().getPersistenceManager().getJavaActionHelper();
Long groupQty = (long)javaActionHelper.selectCountByExample(context,new DeviceGroups());
Long productQty = (long)javaActionHelper.selectCountByExample(context,new Products());
Products deviceProduct = new Products();
deviceProduct.setProductType("DEVICE");
Long deviceQty = (long)javaActionHelper.selectCountByExample(context,deviceProduct);
Products gatewayProduct = new Products();
gatewayProduct.setProductType("GATEWAY");
Long gatewayQty = (long)javaActionHelper.selectCountByExample(context,gatewayProduct);
QtyStats currentQtyStats = new QtyStats();
currentQtyStats.setDeviceQty(deviceQty);
currentQtyStats.setGroupQty(groupQty);
currentQtyStats.setProductQty(productQty);
currentQtyStats.setGatewayQty(gatewayQty);
qtyArrayList.add(currentQtyStats);
return qtyArrayList;
// END USER CODE
03 編寫渲染器
首頁中儀表盤顯示,我們希望將各數量的統計顯示爲卡片風格,通過編寫一個渲染器來實現卡片式顯示。選擇應用設計器左側的渲染器圖標進入界面列表窗口:
1. 選擇右上角的創建鏈接進入創建渲染器窗口,錄入如下信息:
-
名稱:卡片風格顯示統計數據組件
-
編碼:CARD_VIEW_COMPONENT
-
類型:通用組件渲染器
2. 生成代碼後,代碼庫中打開 react/render/CARD_VIEW_COMPONENT/index.js(可以使用在線的Web IDE,也可以克隆到本地使用其他IDE工具完成)修改 observer(props)方法爲:
// BEGIN USER CODE AREA
const qtyStatsDataset = useDataSet('QTY_STATS');
const { name: cardName, code } = designProps.toData();
const iconMap = {
device_qty: 'memory',
gateway_qty: 'router',
product_qty: 'widgets',
group_qty: 'view_week',
};
return(
<div className="el-card__body">
<div className="count-card el-row">
<div className="el-col">
<Icon className ="iconfont icon-devices-dashboard" type={iconMap[code] || 'important_devices'} />
</div>
<div className="count-desc el-col">
<li>{cardName}</li>
<li className="count-text">
<span id="device-count-text2">{qtyStatsDataset.current?.get(code?.toUpperCase())??0}</span>
</li>
</div>
</div>
</div>
);
// END USER CODE AREA 請把你的邏輯代碼寫在這個註釋之間
3. 新增react/render/CARD_VIEW_COMPONENT/index.less,添加如下的樣式代碼:
.el-card__body {
width: 100%;
height: 100%;
padding: 20px 28px;
.el-row {
display: flex;
height: 100%;
.el-col {
flex: 1;
}
}
.count-card {
text-align: center;
.iconfont {
display: inline-block;
float: left;
width: 60px;
height: 60px;
line-height: 60px;
font-size: 28px;
font-weight: 600;
color: #34c388;
background-color: #f6f7fb;
border-radius: 50%;
}
.count-desc {
text-align: right;
color: #b6bac5;
font-size: 16px;
li {
line-height: 30px;
list-style-type: none;
}
.count-text {
font-size: 24px;
color: #646775;
}
}
}
}
4 創建頁面
▍ 4.1 定義頁面
-
名稱:首頁
-
編碼:homePage
-
標題:物聯網平臺首頁
▍ 4.2 定義數據源
▍ 4.3 定義卡片表格
在section下添加2行,設置行的“列間隔=20”,盒模型的上margin=20。 第一行中添加4列,列的屬性設置欄格數=6 , 高度=100, 邊框樣式=陰影,拖動4個自定義組件分別到第一行的4列中:
▍ 4.4 定義圖表
-
組件名稱:圖表1
-
標題:產品數量
-
副標題:分運營商顯示
-
圖標樣式:柱狀圖
-
分類:運營商
-
左值軸:產品
-
名稱:圖表2
-
標題:雲端協議
-
副標題:分類統計
-
圖標樣式:餅圖
-
分類:雲端協議
-
指標:設備數量
05 發佈和運行應用
這一節介紹了非存儲數據庫對象的應用和圖表定義開發,下一節將介紹格式化報表的定義開發。本系列開發教程持續更新,歡迎關注。
遇到問題怎麼辦?
在Buildrun使用過程中,任何關於平臺的問題和建議,都可以點擊頁面右下角用戶反饋按鈕,實時向開發團隊提交反饋,我們會在第一時間處理。
關於BuildRun
BuildRun
帶來了多雲架構環境下基於視覺的企業級應用創建、集成、部署、生命週期管理和分發的能力,由開源Choerodon豬齒魚核心團隊創立的BuildRun公司(上海翹騰科技有限公司)的使命是以雲原生的現代化軟件架構來幫助企業提升軟件開發生產力和業務敏捷性,它提供企業級DevOps平臺和企業級低代碼開發平臺,幫助隱藏應用所依賴的基礎環境的複雜性,讓每個人都只需要專注在業務邏輯上,以新的方式讓團隊能夠快速、持續地將他們的想法轉化爲真正的商業價值。