| | |
| | | |
| | | VUE_APP_SCREEN_URL_PREFIX = 'http://192.168.0.7/screen/#/' |
| | | |
| | | #VUE_APP_API_URL = 'http://localhost:10010' |
| | | VUE_APP_API_URL = 'http://192.168.0.7/system_gateway' |
| | | VUE_APP_API_URL = 'http://localhost:10010' |
| | | #VUE_APP_API_URL = 'http://192.168.0.7/system_gateway' |
| | | |
| | | VUE_APP_AMAP_KEY='045542fc5f436b75e6c911c5c84ff8cd' |
| | |
| | | export function create (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/device/create', data) |
| | | } |
| | | export function dianbiaoData(data) { |
| | | return request.post('/visitsAdmin/cloudService/business/device/dianbiaoData', data) |
| | | } |
| | | |
| | | // ä¿®æ¹æ¯å¦é¨ç¦å
¥å£ |
| | | export function updateEntranceById (data) { |
| | |
| | | export function duanluqiCmd (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/device/duanluqiCmd', data) |
| | | } |
| | | export function dianbaoCmd (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/device/dianbaoCmd', data) |
| | | } |
| | | // åçledå±å
容 |
| | | export function setLedContent (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/hksync/setLedContent', data) |
| | |
| | | <div style="flex: 1"><span class="label">æ§å¶å¼å
³ï¼</span>{{model.channelInfo ||'-'}}</div> |
| | | </div> |
| | | <div style="display: flex;margin-top: 20px;"> |
| | | <div style="flex: 1"><span class="label">MQTT IPï¼</span>{{model.doorNameObj.mqttIp ||''}}</div> |
| | | <div style="flex: 1"><span class="label">MQTT端å£ï¼</span>{{model.doorNameObj.mqttPort||''}}</div> |
| | | <div style="flex: 1"><span class="label">MQTT IPï¼</span>{{model.doorNameObj?(model.doorNameObj.mqttIp ||''):''}}</div> |
| | | <div style="flex: 1"><span class="label">MQTT端å£ï¼</span>{{model.doorNameObj?(model.doorNameObj.mqttPort ||''):''}}</div> |
| | | <div style="flex: 3"> |
| | | <span class="label">æè¿æ§å¶æä½ï¼</span> |
| | | <span class="orange" >{{model.remark||''}}</span> |
| | |
| | | visible: false, |
| | | title: '', |
| | | activeGroup:0, |
| | | model:{}, |
| | | model:{doorNameObj:{}}, |
| | | groupList: [{ id: 0, name: 'æ°æ®ä¸æ¥è®°å½', type: 0 }, { id: 1, name: 'è¿ç¨æ§å¶è®°å½', type: 1 }], |
| | | searchForm: { |
| | | deviceId: null, |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | width="65%" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <p class="tip-header" >åºæ¬ä¿¡æ¯</p> |
| | | <el-form-item label="设å¤åç§°" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥åç§°" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤å°åå" prop="no"> |
| | | <el-input v-model="form.no" placeholder="请è¾å
¥è®¾å¤æ è¯ç¬¦" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤å·" prop="doorNo"> |
| | | <el-input v-model="form.doorNo" placeholder="请è¾å
¥åºåå·" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="åå" prop="manufature"> |
| | | <el-input v-model="form.manufature" placeholder="请è¾å
¥åå" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="å®è£
ä½ç½®" prop="regionPathName"> |
| | | <el-input v-model="form.regionPathName" placeholder="请è¾å
¥è®¾å¤ä½ç½®" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="è¿æ¥IP" prop="ip"> |
| | | <el-input v-model="form.ip" placeholder="请è¾å
¥è®¾å¤è¿æ¥IPå°å" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="è¿æ¥ç«¯å£" prop="port"> |
| | | <el-input v-model="form.port" placeholder="请è¾å
¥è¿æ¥ç«¯å£" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="çµæµæ¯" prop="channelNo"> |
| | | <el-input v-model="form.channelNo" type="number" placeholder="请è¾å
¥çµæµæ¯" v-trim> |
| | | <template slot="append">/5A</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ç ç级" prop="pwdLevel"> |
| | | <el-input v-model="form.doorNameObj.pwdLevel" placeholder="请è¾å
¥å¯ç ç级" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ç " prop="pwd"> |
| | | <el-input v-model="form.doorNameObj.pwd" placeholder="请è¾å
¥è¿æ¥å¯ç " v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="æä½è
代ç " prop="userCode"> |
| | | <el-input v-model="form.doorNameObj.userCode" placeholder="请è¾å
¥è®¾å¤æä½è
代ç " v-trim/> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalWindow> |
| | | </template> |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | export default { |
| | | name: 'OperaDeviceDuanluqiWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | form: { |
| | | id: null, |
| | | name: '', |
| | | regionPathName: '', |
| | | doorNo: '', |
| | | no: '', |
| | | type: 6, |
| | | ip: '', |
| | | port: '', |
| | | level: '', |
| | | doorName: '', |
| | | doorId: '', |
| | | doorNameObj: { |
| | | pwdLevel: '', |
| | | pwd: '', |
| | | userCode: '' |
| | | }, |
| | | channelInfo: '', |
| | | manufature: '', |
| | | channelNo: '' |
| | | }, |
| | | // éªè¯è§å |
| | | rules: { |
| | | name: [ |
| | | { required: true, message: '请è¾å
¥è®¾å¤åç§°' } |
| | | ], |
| | | doorName: [ |
| | | { required: true, message: '请è¾å
¥è®¾å¤è¿æ¥å¯ç ' } |
| | | ], |
| | | channelNo: [ |
| | | { required: true, message: '请è¾å
¥å¼å
³åºå·' } |
| | | ], |
| | | doorNo: [ |
| | | { required: true, message: '请è¾å
¥è®¾å¤å·' } |
| | | ], |
| | | no: [ |
| | | { required: true, message: '请è¾å
¥è®¾å¤æ è¯ç¬¦' } |
| | | ] |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/business/device', |
| | | 'field.id': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.form.doorName = '' |
| | | this.form.doorNameObj = { |
| | | userCode: '', |
| | | pwd: '', |
| | | pwdLevel: '' |
| | | } |
| | | // debugger |
| | | // æ°å»º |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | | this.$refs.form.resetFields() |
| | | this.form[this.configData['field.id']] = null |
| | | }) |
| | | if(!this.form.doorNameObj){ |
| | | this.form.doorNameObj = { |
| | | pwdLevel: '', |
| | | pwd: '', |
| | | userCode: '' |
| | | } |
| | | } |
| | | return |
| | | } |
| | | // ç¼è¾ |
| | | this.$nextTick(async () => { |
| | | if(!target.doorNameObj){ |
| | | target.doorNameObj={ |
| | | pwdLevel: '', |
| | | pwd: '', |
| | | userCode: ''} |
| | | } |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <el-input v-model="form.doorNo" placeholder="请è¾å
¥åºåå·" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="åå" prop="manufature"> |
| | | <el-input v-model="form.manufature" placeholder="请è¾å
¥æå¨ä½ç½®" v-trim/> |
| | | <el-input v-model="form.manufature" placeholder="请è¾å
¥åå" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="å®è£
ä½ç½®" prop="regionPathName"> |
| | | <el-input v-model="form.regionPathName" placeholder="请è¾å
¥è®¾å¤ä½ç½®" v-trim/> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="100%" |
| | | :visible.sync="visible" |
| | | > |
| | | <TableLayout > |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <div style="display: block;margin-bottom: 60px;padding: 20px; border: 1px solid #f2f2f2;"> |
| | | <div style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 20px;">设å¤ä¿¡æ¯</div> |
| | | <div style="display: flex;"> |
| | | <div style="flex: 1"><span class="label">åç§°ï¼</span>{{model.name ||''}}</div> |
| | | <div style="flex: 1"><span class="label">å°ååï¼</span>{{model.no ||''}}</div> |
| | | <div style="flex: 1"><span class="label">设å¤å·ï¼</span>{{model.doorNo ||'-'}}</div> |
| | | </div> |
| | | <div style="display: flex;margin-top: 20px;"> |
| | | <div style="flex: 1"><span class="label">IPï¼</span>{{ model.ip ||'' }}</div> |
| | | <div style="flex: 1"><span class="label">端å£ï¼</span>{{ model.port ||''}}</div> |
| | | <div style="flex: 3"> |
| | | <span class="label">æè¿æ§å¶æä½ï¼</span> |
| | | <span class="orange" >{{model.remark||''}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="platgroup_tabs"> |
| | | <div class="tab" :class="{ active: activeGroup === item.id }" @click="groupClick(item)" |
| | | v-for="(item, i) in groupList" :key="i"> |
| | | {{ item.name }} |
| | | </div> |
| | | </div> |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <el-table |
| | | v-if="activeGroup===0" |
| | | :height="tableHeightNew" |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe> |
| | | <el-table-column prop="happenTime" label="è¯»åæ¶é´" min-width="150px"></el-table-column> |
| | | <el-table-column prop="val1" label="çµè½ï¼KWHï¼" min-width="120px"></el-table-column> |
| | | <el-table-column prop="val2" label="ç¶æ" min-width="120px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if=" row.val2 === '0000'" class="green">åé¸</span> |
| | | <span v-else-if=" row.val2 === '0050'" class="red">åé¸</span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="val3" label="çµè¡¨æ¶é´" min-width="120px"></el-table-column> |
| | | </el-table> |
| | | <el-table |
| | | v-if="activeGroup===1" |
| | | :height="tableHeightNew" |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe> |
| | | <el-table-column prop="createDate" label="æä½æ¶é´" min-width="150px"></el-table-column> |
| | | <el-table-column prop="val4" label="æä½äºº" min-width="100px" ></el-table-column> |
| | | <el-table-column prop="val3" label="æä½å
容" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if=" row.val3 === 'ãåé¸ã'" class="green">{{row.val3||''}}</span> |
| | | <span v-else-if=" row.val3 === 'ãåé¸ã'" class="red">{{row.val3||''}}</span> |
| | | <span v-else>{{row.val3||''}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="val2" label="å
容" min-width="300px" show-overflow-tooltip></el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | > |
| | | </pagination> |
| | | </template> |
| | | </TableLayout> |
| | | <template v-slot:footer> |
| | | <el-button @click="visible=false">è¿å</el-button> |
| | | </template> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | export default { |
| | | name: 'OperaJkSketchCustomerWindow', |
| | | extends: BaseTable, |
| | | components: { GlobalWindow, TableLayout, Pagination }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | visible: false, |
| | | title: '', |
| | | activeGroup:0, |
| | | model:{doorNameObj:{}}, |
| | | groupList: [{ id: 0, name: 'æ°æ®ä¸æ¥è®°å½', type: 0 }, { id: 1, name: 'è¿ç¨æ§å¶è®°å½', type: 1 }], |
| | | searchForm: { |
| | | deviceId: null, |
| | | val1: '', |
| | | dataType:0 |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: 'è®¾å¤æ°æ®ä¿¡æ¯è¡¨', |
| | | api: '/business/deviceData', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | groupClick (item) { |
| | | this.activeGroup = item.id |
| | | this.searchForm.val1 = '' |
| | | this.searchForm.dataType = item.type |
| | | this.search() |
| | | }, |
| | | open (title, row) { |
| | | this.title = title +' ã'+ (row.name)+'ã' |
| | | this.searchForm.deviceId = row.id |
| | | if(!row.doorNameObj) { |
| | | row.doorNameObj = {} |
| | | } |
| | | this.model=row |
| | | this.visible = true |
| | | this.tableData = { |
| | | // å·²éä¸çæ°æ® |
| | | selectedRows: [], |
| | | // æåºçåæ®µ |
| | | sorts: [], |
| | | // å½åé¡µæ°æ® |
| | | list: [], |
| | | // å页 |
| | | pagination: { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | total: 0 |
| | | } |
| | | } |
| | | this.groupClick(this.groupList[0]) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style> |
| | | .platgroup_tabs { |
| | | flex: 1; |
| | | display: flex; |
| | | border-bottom: 1px solid #dfe2e8; |
| | | margin-bottom:30px; |
| | | |
| | | .tab { |
| | | color: #666666; |
| | | margin-right: 40px; |
| | | cursor: pointer; |
| | | padding-bottom: 18px; |
| | | border-bottom: 2px solid #fff; |
| | | } |
| | | |
| | | .active { |
| | | font-weight: 500; |
| | | font-size: 15px; |
| | | color: #2080f7; |
| | | border-bottom: 2px solid $primary-color; |
| | | } |
| | | } |
| | | .label{ |
| | | /* width: 80px; |
| | | text-align: right;*/ |
| | | color: rgb(102, 102, 102); |
| | | display: inline-block; |
| | | |
| | | } |
| | | </style> |
| | |
| | | |
| | | .main_table { |
| | | display: flex; |
| | | align-items: start; |
| | | align-items: flex-start; |
| | | justify-content: space-between; |
| | | margin-top: 10px; |
| | | .main_table_list { |
| | |
| | | |
| | | .main_table { |
| | | display: flex; |
| | | align-items: start; |
| | | align-items: flex-start; |
| | | justify-content: space-between; |
| | | margin-top: 10px; |
| | | .main_table_list { |
| | |
| | | <el-table-column prop="name" label="åç§°" fixed min-width="150" align="center"></el-table-column> |
| | | <el-table-column prop="no" label="çµè¡¨å°åå" min-width="100" align="center" ></el-table-column> |
| | | <el-table-column prop="doorNo" label="设å¤å·" min-width="120" align="center" show-overflow-tooltip></el-table-column> |
| | | <!-- |
| | | <el-table-column prop="channelNo" label="å¼å
³åºå·" align="center" min-width="100"></el-table-column> |
| | | --> |
| | | <el-table-column prop="manufature" label="åå" align="center" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="regionPathName" align="center" min-width="100" label="æå¨ä½ç½®"></el-table-column> |
| | | <el-table-column prop="ip" label="IP" min-width="150" align="center" show-overflow-tooltip ></el-table-column> |
| | |
| | | </el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="doorNameObj.pwdLevel" label="å¯ç ç级" align="center" min-width="150"></el-table-column> |
| | | <el-table-column prop="doorNameObj.pwd" label="å¯ç " align="center"> |
| | | <template slot-scope="{row}"> |
| | | <span :class=" 'blue'">{{row.showPwd?row.doorNameObj.pwd:'******'}}</span> |
| | | <el-button style="margin-left: 10px" v-if="row.doorNameObj.pwd!=null" |
| | | @click.native.p.prevent="showPassward(row)" type="text"> |
| | | <i class="el-icon-view" :class="row.showPwd?'red':'blue'" :title="row.showPwd?'éè':'æ¾ç¤º'"></i> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="doorNameObj.userCode" label="æä½è
代ç " align="center" min-width="150"></el-table-column> |
| | | <el-table-column prop="editDate" label="æè¿æ´æ°æ¶é´" align="center" min-width="150"></el-table-column> |
| | | <el-table-column |
| | | label="æä½" |
| | |
| | | <el-button type="text" @click="$refs.operaDeviceDataWindow.open('æ¥ççµè¡¨æ°æ®', row)" icon="el-icon-view" v-permissions="['business:device:update']">æ°æ®</el-button> |
| | | <el-button type="text" @click="send(row,1)" icon="el-icon-circle-check" v-permissions="['business:device:update']">å¼é¸</el-button> |
| | | <el-button type="text" class="red" @click="send(row,0)" icon="el-icon-circle-close" v-permissions="['business:device:update']">å
³é¸</el-button> |
| | | <el-button type="text" class="red" @click="readData(row)" icon="el-icon-circle-close" v-permissions="['business:device:update']">è¯»åæ°æ®</el-button> |
| | | <el-button type="text" class="red" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:device:delete']">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <b class="green" v-if="form.status ===1">å¼é¸</b> |
| | | <b class="red" v-else>å
³é¸</b> |
| | | </el-form-item> |
| | | <el-form-item label="å¼å
³åºå·" prop="channelNo"> |
| | | <el-input v-model="form.channelNo" type="text" placeholder="请è¾å
¥å¼å
³åºå· ï¼å¤ä¸ªç¨è±æéå·éå¼ï¼å¦ 1,2,3" v-trim/> |
| | | <el-form-item label="æææ¶é´" prop="cmdDate"> |
| | | <el-date-picker type="datetime" v-model="form.cmdDate" value-format="yyyy-MM-dd HH:mm:ss" |
| | | placeholder="è¯·éæ©æææ¶é´" /> |
| | | </el-form-item> |
| | | <p class="tip-warn" style="width: 100%;"><i class="el-icon-warning"></i>设å¤åå§å¼å
³åºå·ä¿¡æ¯ï¼{{form.channelNo1}}ï¼æ§å¶å¤ä¸ªå¼å
³ï¼è¯·ç¨è±æéå·éå¼ï¼å¦ 1,2;</p> |
| | | <p class="tip-warn" style="width: 100%;"><i class="el-icon-warning"></i></p> |
| | | </el-form> |
| | | <template v-slot:footer > |
| | | <el-button @click="sendAction()" type="primary" v-if="form.status === 1" :loading="isWorkSending">确认å¼é¸</el-button> |
| | | <el-button @click="sendAction()" type="danger" v-if="form.status !== 1" :loading="isWorkSending">确认å
³é¸</el-button> |
| | | <el-button @click="sendAction(0)" type="primary" v-if="form.status === 1" :loading="isWorkSending">确认å¼é¸</el-button> |
| | | <el-button @click="sendAction(1)" type="danger" v-if="form.status !== 1" :loading="isWorkSending">确认å
³é¸</el-button> |
| | | <el-button @click="sendClose()">è¿å</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- æ°å»º/ä¿®æ¹ --> |
| | | <OperaDeviceDuanluqiWindow ref="operaDeviceWindow" @success="handlePageChange"/> |
| | | <OperaDeviceDianbiaoWindow ref="operaDeviceWindow" @success="handlePageChange"/> |
| | | <OperaDeviceDataListWindow ref="operaDeviceDataWindow" @success="handlePageChange"/> |
| | | </TableLayout> |
| | | </template> |
| | |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaDeviceDataListWindow from '@/components/business/OperaDeviceDataListWindow' |
| | | import OperaDeviceDuanluqiWindow from '@/components/business/OperaDeviceDuanluqiWindow' |
| | | import OperaDeviceDataListWindow from '@/components/business/OperaDianbiaoDataListWindow' |
| | | import OperaDeviceDianbiaoWindow from '@/components/business/OperaDeviceDianbiaoWindow' |
| | | export default { |
| | | name: 'DeviceDuanluqi', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaDeviceDuanluqiWindow ,OperaDeviceDataListWindow}, |
| | | components: { TableLayout, Pagination, OperaDeviceDianbiaoWindow, OperaDeviceDataListWindow }, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | |
| | | isWorkSending: false, |
| | | form: { |
| | | id: '', |
| | | name: '', |
| | | channelNo: '', |
| | | channelNo1: '', |
| | | status: null |
| | | status: null, |
| | | name:null, |
| | | cmdDate: null |
| | | }, |
| | | visibleSend: false, |
| | | options: [], |
| | | rules: { |
| | | channelNo: [{ required: true, message: '请è¾å
¥éè¦æä½çå¼å
³åºå·', trigger: 'blur' }], |
| | | cmdDate: [{ required: true, message: 'è¯·éæ©æä½æææ¶é´' }] |
| | | } |
| | | } |
| | | }, |
| | |
| | | this.$set(row, 'showPwd', false) |
| | | } |
| | | }, |
| | | sendAction () { |
| | | if (!this.form.channelNo) { |
| | | return |
| | | } |
| | | sendAction (status) { |
| | | this.form.status = status |
| | | this.$dialog.actionConfirm('确认è¿è¡çµè¡¨ã' + (this.form.status === 1 ? 'å¼é¸' : 'å
³é¸') + 'ãæä½åï¼', 'æä½ç¡®è®¤æé') |
| | | .then(() => { |
| | | console.log(this.form) |
| | | this.isWorkSending = true |
| | | this.api.duanluqiCmd(this.form) |
| | | this.api.dianbaoCmd(this.form) |
| | | .then(res => { |
| | | this.$tip.apiSuccess(res || 'è¯·æ±æå') |
| | | this.sendClose() |
| | | this.handlePageChange() |
| | | }) |
| | | .catch(e => { |
| | | }) |
| | |
| | | }) |
| | | .catch(() => {}) |
| | | }, |
| | | readData (row) { |
| | | this.api.dianbiaoData({ id: row.id }) |
| | | .then(res => { |
| | | this.$tip.apiSuccess(res || 'è¯·æ±æå') |
| | | this.handlePageChange() |
| | | }) |
| | | .catch(e => { |
| | | }) |
| | | .finally(() => { |
| | | this.isWorkSending = false |
| | | }) |
| | | }, |
| | | send (row, type) { |
| | | this.visibleSend = true |
| | | this.form = { id: row.id, name: row.name, channelNo: row.channelNo, status: type ,channelNo1:row.channelNo} |
| | | this.form = { id: row.id, name: row.name, cmdDate: null, status: type} |
| | | }, |
| | | sendClose () { |
| | | this.visibleSend = false |
| | | this.isWorkSending = false |
| | | this.form = { id: '', name: '', channelNo: '', status: '',channelNo1:'' } |
| | | this.form = { id: '', name: '', status: '', cmdDate: '' } |
| | | } |
| | | |
| | | } |
| | | } |
| | | </script> |
| | |
| | | spring: |
| | | # æ°æ®æºé
ç½® |
| | | datasource: |
| | | url: jdbc:mysql://localhost:3306/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | url: jdbc:mysql://localhost:3306/dmvisits?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | username: root |
| | | password: Titi@168.com |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | |
| | | discovery: |
| | | server-addr: http://192.168.0.7:8848 #é
ç½®Nacoså°å |
| | | # namespace: dmvisit |
| | | namespace: wuhu_visit_dev |
| | | namespace: dm_visits_test |
| | | username: nacos |
| | | password: nacos |
| | | gateway: |
| | |
| | | public static final int broadcaset = 3; |
| | | public static final int broadcasetChannel = 4; |
| | | public static final int duanluqi = 5; |
| | | public static final int dianbiao = 6; |
| | | } |
| | | |
| | | /** |
| | |
| | | return (byte) (sum & 0xFF); |
| | | } |
| | | |
| | | |
| | | public static byte[] getRequestParam(int feCount, byte[] address, byte control, byte[] data) throws IOException { |
| | | |
| | | ///FEFEFE 68 999999999999 68 01 02 65 F3C1 16 |
| | |
| | | return hexResult; |
| | | |
| | | } |
| | | private static String addByte(String value, byte add) { |
| | | byte b = (byte) Integer.parseInt(value, 16); |
| | | int result = (b & 0xFF) + (add & 0xFF); |
| | | // ç¡®ä¿ç»æå¨0-255èå´å
ï¼å¤çè´æ°ï¼ |
| | | if (result < 0) { |
| | | result += 256; |
| | | } |
| | | String hexResult = String.format("%02X", result & 0xFF); |
| | | return hexResult; |
| | | |
| | | } |
| | | |
| | | |
| | | private static String[] parseSub33Reverse(String msg, int n) { |
| | |
| | | map.put("total", total); |
| | | } |
| | | |
| | | /** |
| | | * çµè¡¨è·³é¸ãåé¸ |
| | | * @param ip |
| | | * @param port |
| | | * @param addressBuf |
| | | * @param type ï¼0è·³é¸ 1åé¸ï¼ |
| | | * @param date æææªæ¢æ¶é´ |
| | | * @throws IOException |
| | | */ |
| | | private static boolean electricityControl(String ip, int port, byte[] addressBuf,int type, String date) { |
| | | /** |
| | | * N1为æ§å¶å½ä»¤ç±»åï¼N1=1AH代表跳é¸4Dï¼N1=1BH代表åé¸4Få
许N2ä¿ç |
| | | * æéå¯ç æä½ä»£ç ï¼PAP2P1P0C3C2C1C0(02/223203/111111H) |
| | | * 4F |
| | | * TCP/IPç´æ¥å鏿令[2026å¹´03æ09æ¥ 10:57:39] |
| | | * Tx ->FEFEFEFE68615121010000681C1035366555776655444F33568843433659E016 |
| | | * TCP/IPç´æ¥å鏿令[2026å¹´03æ09æ¥ 10:57:40] |
| | | * Rx <-FEFEFEFE68615121010000689C004016 |
| | | * ç´æ¥å鏿§è¡æåï¼ 9C |
| | | */ |
| | | try { |
| | | byte control = 0x1C; |
| | | byte n1 = 0x4D; |
| | | if(type==1){ |
| | | n1 = 0x4F; |
| | | } |
| | | // byte[] data0 = {0x02, 0x03, 0x32, 0x22,0x44,0x33,0x22,0x11}; |
| | | byte[] data = {0x35, 0x36, 0x65, 0x55,0x77,0x66,0x55,0x44,n1,0x33,0,0,0,0,0,0}; |
| | | byte[] data2 = getDateBytes(date); |
| | | for (int i = 0; i < data2.length; i++) { |
| | | data[10+i]=data2[i]; |
| | | } |
| | | byte[] bufReq = getRequestParam(4, addressBuf, control, data); |
| | | String reqt = bytesToHex(bufReq); |
| | | System.out.println(reqt); |
| | | byte[] respBuf = readDeviceData(ip, port, bufReq); |
| | | String resp = bytesToHex(respBuf); |
| | | System.out.println(resp); |
| | | //FEFEFEFE68379707010000689C004216 |
| | | String msg = resp.substring(24, 26); |
| | | return msg.equals("9C"); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private static byte[] getDateBytes(String dateStr) { |
| | | // String dateStr = new SimpleDateFormat("yyyyMMddHHmmss").format(date); |
| | | dateStr = dateStr.substring(2); |
| | | // 1. éªè¯è¾å
¥ |
| | | if (dateStr == null || dateStr.length() != 12) { |
| | | throw new IllegalArgumentException("æ¶é´å¿
é¡»æ¯12ä½åè¿å¶æ°"); |
| | | } |
| | | if (!dateStr.matches("\\d{12}")) { |
| | | throw new IllegalArgumentException("æ¶é´å¿
é¡»å
¨é¨æ¯æ°å"); |
| | | } |
| | | // 2. åå¤ç»ææ°ç»ï¼6åèï¼ |
| | | byte[] result = new byte[6]; |
| | | // 3. ä»å³åå·¦æ¯2ä½ä¸ç»å¤çï¼å°ç«¯åºï¼ |
| | | byte add = 0x33; |
| | | for (int i = 0; i < 6; i++) { |
| | | // 计ç®å¨å符串ä¸çä½ç½®ï¼ä»å³åå·¦ï¼ |
| | | int strIndex = 10 - (i * 2); // å 为è¦å两ä½ï¼æä»¥æ¯10,8,6,4,2,0 |
| | | String twoDigits = dateStr.substring(strIndex, strIndex + 2); |
| | | // å°ä¸¤ä½åè¿å¶æ°è½¬æ¢ä¸ºBCDåè |
| | | // ä¾å¦ï¼"25" -> 0x25 |
| | | int t = Integer.parseInt(twoDigits, 16); |
| | | int t1 = ( t& 0xFF) + (add & 0xFF); |
| | | System.out.println(t1+":"); |
| | | result[i] =(byte) t1 ; |
| | | } |
| | | // 注æï¼ä¸é¢ç循ç¯é¡ºåºå·²ç»æ¯å°ç«¯åºï¼result[0]åçæ¯æä½ä¸¤ä½ |
| | | return result; |
| | | } |
| | | |
| | | |
| | | private static void electricityStatus(String ip, int port, byte[] addressBuf, Map<String, Object> map) throws IOException { |
| | | byte control = 0x11; |
| | | byte[] data = {0x36, 0x38, 0x33, 0x37}; |
| | |
| | | String ts = hexToBinary1(nArr); |
| | | String time = "20"+ts.substring(0,6)+ts.substring(8); |
| | | Date date = getDateByStr(time); |
| | | System.out.println( formatData(date)); |
| | | // String resp = "FEFEFEFE 68 615121010000 68 91 06 36383337 3333 7916"; |
| | | map.put("currentTime", formatData(date)); |
| | | map.put("time", date); |
| | | // map.put("currentTime", formatData(date)); |
| | | } |
| | | public static Date getDateByStr(String date) { |
| | | TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); |
| | |
| | | return null; |
| | | } |
| | | |
| | | public static Map<String, Object> electricity(String ip, int port, String address) throws IOException { |
| | | public static Map<String, Object> electricityData(String ip, int port, String address) throws IOException { |
| | | Map<String, Object> r = new HashMap<>(); |
| | | byte[] addressBuf = convertToBCDAddress(address); |
| | | electricityTotal(ip, port, addressBuf, r); |
| | |
| | | electricityTime(ip, port, addressBuf, r); |
| | | return r; |
| | | } |
| | | |
| | | public static boolean electricityAct(String ip, int port, String address,int type,String dateStr) { |
| | | Map<String, Object> r = new HashMap<>(); |
| | | byte[] addressBuf = convertToBCDAddress(address); |
| | | return electricityControl(ip,port,addressBuf,type,dateStr); |
| | | } |
| | | private static String hexToBinary(String hex) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (char c : hex.toCharArray()) { |
| | |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | |
| | | private static String addHex(String hex1, String hex2) { |
| | | int num1 = Integer.parseInt(hex1.replace("0x", ""), 16); |
| | |
| | | public static void main(String[] args) throws IOException { |
| | | // testWater(); |
| | | // electricityTest(); |
| | | water("192.168.1.78",1030,"000152462599"); |
| | | Map<String, Object> map = electricity("192.168.1.78", 1030, "000001215161"); |
| | | System.out.println(JSONObject.toJSONString(map)); |
| | | // water("192.168.1.78",1030,"000152462599"); |
| | | // Map<String, Object> map = electricityData("192.168.1.78", 1030, "000001215161"); |
| | | // System.out.println(JSONObject.toJSONString(map)); |
| | | electricityAct("192.168.1.78", 1030, "000001215161",0,"20260309162655"); |
| | | // FEFEFE6899254652010068810 843C3333433333333 E9 16 |
| | | // FEFEFE6899254652010068810 84 3C3333433333333E916 |
| | | |
| | |
| | | } |
| | | @ApiOperation("ä¿®æ¹æ¯å¦é¨ç¦å
¥å£") |
| | | @PostMapping("/updateEntranceById") |
| | | @CloudRequiredPermission("business:company:update") |
| | | @CloudRequiredPermission("business:device:update") |
| | | public ApiResponse updateStatusById(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | Device d = new Device(); |
| | | d.setId(param.getId()); |
| | |
| | | } |
| | | @ApiOperation("ä¿®æ¹æ¯å¦ç³»ç»ä½¿ç¨") |
| | | @PostMapping("/updateUsedById") |
| | | @CloudRequiredPermission("business:company:update") |
| | | @CloudRequiredPermission("business:device:update") |
| | | public ApiResponse updateUsedById(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | Device d = new Device(); |
| | | d.setId(param.getId()); |
| | |
| | | } |
| | | @ApiOperation("æ§è¡æè·¯å¨å¼å
³é¸æä½") |
| | | @PostMapping("/duanluqiCmd") |
| | | @CloudRequiredPermission("business:company:update") |
| | | @CloudRequiredPermission("business:device:update") |
| | | public ApiResponse duanluqiCmd(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | param.setLoginUserInfo(this.getLoginUser(token)); |
| | | deviceService.duanluqiCmd(param); |
| | | return ApiResponse.success(null); |
| | | } |
| | | @ApiOperation("æ§è¡çµè¡¨å¼å
³é¸æä½") |
| | | @PostMapping("/dianbaoCmd") |
| | | @CloudRequiredPermission("business:device:update") |
| | | public ApiResponse dianbaoCmd(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | param.setLoginUserInfo(this.getLoginUser(token)); |
| | | deviceService.dianbaoCmd(param); |
| | | return ApiResponse.success(null); |
| | | } |
| | | @ApiOperation("读åçµè¡¨æ°æ®ï¼çµè½ãæ¶é´åç¶æï¼") |
| | | @PostMapping("/dianbiaoData") |
| | | @CloudRequiredPermission("business:device:update") |
| | | public ApiResponse dianbiaoData(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | param.setLoginUserInfo(this.getLoginUser(token)); |
| | | deviceService.dianbiaoData(param); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ¹éå é¤") |
| | | @GetMapping("/delete/batch") |
| | |
| | | @ApiModelProperty(value = "ææ¥å
容") |
| | | @TableField(exist = false) |
| | | private String sendInfo; |
| | | @ApiModelProperty(value = "è¿ç¨æä½æ¶é´åæ°") |
| | | @TableField(exist = false) |
| | | private Date cmdDate; |
| | | @ApiModelProperty(value = "é
ç½®åæ°") |
| | | @TableField(exist = false) |
| | | private JSONObject doorNameObj; |
| | |
| | | @ExcelColumn(name="屿§å¼7") |
| | | private String val7; |
| | | |
| | | @ApiModelProperty(value = "æ°æ®æ¥æº 0mqtt䏿¥ç»¼åç¶æ 1è¿ç¨æ§å¶ ", example = "1") |
| | | @ExcelColumn(name="æ°æ®æ¥æº 0mqtt䏿¥ç»¼åç¶æ 1è¿ç¨æ§å¶") |
| | | @ApiModelProperty(value = "æ°æ®æ¥æº 0mqtt䏿¥ç»¼åç¶æ 1è¿ç¨æ§å¶ 2TCPè¯»åæ°æ® ", example = "1") |
| | | @ExcelColumn(name="æ°æ®æ¥æº 0mqtt䏿¥ç»¼åç¶æ 1è¿ç¨æ§å¶ 2TCPè¯»åæ°æ®") |
| | | private Integer dataType; |
| | | |
| | | } |
| | |
| | | |
| | | void autoCloseCmdTimer(); |
| | | void startCheckDuanluqiSubjob(); |
| | | |
| | | void dianbaoCmd(Device param); |
| | | void dianbiaoData(Device param); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl; |
| | | import com.doumee.tcp.WaterElectricityUtil; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | import org.eclipse.paho.client.mqttv3.MqttMessage; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.*; |
| | |
| | | model.setIsdeleted(Constants.ZERO); |
| | | model.setEditDate(new Date()); |
| | | model.setCreateDate(model.getEditDate()); |
| | | if(model.getDoorNameObj()!=null && Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.duanluqi)){ |
| | | if(model.getDoorNameObj()!=null && |
| | | (Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.duanluqi) |
| | | ||Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.dianbiao))){ |
| | | model.setDoorName(JSONObject.toJSONString(model.getDoorNameObj())); |
| | | if(StringUtils.isNotBlank(model.getLevel())){ |
| | | if(getNumberByStr(model.getLevel()) <300){ |
| | |
| | | public void updateById(Device device) { |
| | | device.setEdirot(device.getLoginUserInfo().getId()+""); |
| | | device.setEditDate(new Date()); |
| | | if(device.getDoorNameObj()!=null && Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.duanluqi)){ |
| | | if(device.getDoorNameObj()!=null && |
| | | (Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.duanluqi) |
| | | ||Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.dianbiao))){ |
| | | device.setDoorName(JSONObject.toJSONString(device.getDoorNameObj())); |
| | | } |
| | | Device model = deviceMapper.selectById(device.getId()); |
| | |
| | | IPage<Device> result = deviceMapper.selectPage(page, queryWrapper); |
| | | if(result!=null){ |
| | | for(Device d : result.getRecords()){ |
| | | if(StringUtils.isNotBlank(d.getDoorName()) &&Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)){ |
| | | if(StringUtils.isNotBlank(d.getDoorName()) |
| | | && (Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)|| |
| | | Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.dianbiao))){ |
| | | try { |
| | | //æè·¯å¨è®¾å¤åæ° |
| | | d.setDoorNameObj(JSONObject.parseObject(d.getDoorName())); |
| | |
| | | dealDuanluqiCmd(model,param,"device_"); |
| | | |
| | | } |
| | | @Override |
| | | public void dianbaoCmd(Device param){ |
| | | Device model = deviceMapper.selectById(param.getId()); |
| | | if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.dianbiao)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | if (param.getStatus() == null || param.getCmdDate() == null |
| | | ||param.getCmdDate().getTime() <= System.currentTimeMillis()) { |
| | | //妿æ¯å¼é¸ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | |
| | | boolean r ; |
| | | String date = DateUtil.formatDate(new Date(),"yyyyMMddHHmmss"); |
| | | if(Constants.equalsInteger(param.getStatus(),Constants.ONE)) { |
| | | //妿æ¯å¼é¸ |
| | | r = WaterElectricityUtil.electricityAct(param.getIp(),Integer.parseInt(param.getPort()),param.getNo(),0,date); |
| | | }else { |
| | | //妿æ¯åé¸ |
| | | r = WaterElectricityUtil.electricityAct(param.getIp(),Integer.parseInt(param.getPort()),param.getNo(),1,date); |
| | | } |
| | | if(!r){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"è¿ç¨æ§å¶çµè¡¨å¤±è´¥ï¼è¯·ç¨åéè¯ï¼"); |
| | | } |
| | | String curremak = "ã"+param.getLoginUserInfo().getRealname() |
| | | +"ãäº"+ DateUtil.getPlusTime2(new Date()) +"è¿è¡äº"+(Constants.equalsInteger(param.getStatus(),Constants.ONE)?"ãåé¸ã":"ãåé¸ã")+"æä½,å¼å
³ã"+param.getChannelNo()+"ãï¼"; |
| | | deviceMapper.update(null,new UpdateWrapper<Device>().lambda() |
| | | .set(Device::getRemark,curremak) |
| | | .set(Device::getEditDate,new Date()) |
| | | .set(Device::getEdirot,param.getLoginUserInfo().getId()) |
| | | .eq(Device::getId,param.getId())); |
| | | DeviceData data = new DeviceData(); |
| | | data.setCreateDate(new Date()); |
| | | data.setEditDate(new Date()); |
| | | data.setCreator(param.getLoginUserInfo().getId()); |
| | | data.setEditor(param.getLoginUserInfo().getId()); |
| | | data.setDeviceId(param.getId()+""); |
| | | data.setDataType(Constants.ONE);// |
| | | data.setVal1("è¿ç¨æ§å¶"); |
| | | data.setVal2(curremak); |
| | | data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate())); |
| | | data.setVal3((Constants.equalsInteger(param.getStatus(),Constants.ONE)?"ãåé¸ã":"ãåé¸ã")); |
| | | data.setVal4(param.getLoginUserInfo().getRealname()); |
| | | data.setVal5(param.getChannelNo()); |
| | | deviceDataMapper.insert(data); |
| | | |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void dianbiaoData(Device param){ |
| | | Device model = deviceMapper.selectById(param.getId()); |
| | | if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.dianbiao)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | try { |
| | | Map<String, Object> readData= WaterElectricityUtil.electricityData(model.getIp(),Integer.parseInt(model.getPort()),model.getNo()); |
| | | if(readData!=null){ |
| | | String curremak = "ã"+param.getLoginUserInfo().getRealname() |
| | | +"ãäº"+ DateUtil.getPlusTime2(new Date()) +"è¿è¡äºæ°æ®è¯»åæä½"; |
| | | Date time =(Date) readData.get("time"); |
| | | String total = (Double) readData.get("total")+""; |
| | | String status = (String) readData.get("status"); |
| | | model.setHkDate(new Date());//æè¿åæ¥æ¶é´ |
| | | model.setOnline(Constants.ONE);//æ è¯è®¾å¤å¨çº¿ |
| | | model.setRemark(curremak); |
| | | |
| | | DeviceData data = new DeviceData(); |
| | | data.setCreateDate(new Date()); |
| | | data.setEditDate(new Date()); |
| | | data.setCreator(param.getLoginUserInfo().getId()); |
| | | data.setEditor(param.getLoginUserInfo().getId()); |
| | | data.setDeviceId(param.getId()+""); |
| | | data.setDataType(Constants.ZERO);// |
| | | data.setVal1(total); |
| | | data.setVal2(status); |
| | | data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate())); |
| | | data.setVal3(DateUtil.getPlusTime2(time)); |
| | | data.setVal4(param.getLoginUserInfo().getRealname()); |
| | | data.setVal5(param.getNo());//å°åå |
| | | deviceDataMapper.insert(data); |
| | | deviceMapper.updateById(model); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | log.error("çµè¡¨æ°æ®è¯»å失败ï¼"+e.getMessage()); |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"读åçµè¡¨æ°æ®å¤±è´¥ï¼"); |
| | | } |
| | | } |
| | | |
| | | private void dealDuanluqiCmd(Device model, Device param,String clientIndex) { |
| | | MqttConfig config = getMqttConfigByParam(model,clientIndex); |