doum
2025-12-08 ecc1f1f70da17f9672d4fd5b830ca7f5c18a3aa1
最新版本541200007
已修改6个文件
164 ■■■■ 文件已修改
admin/.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWarningRuleWindow.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/warningRule.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -5,7 +5,7 @@
# VUE_APP_API_URL  = 'http://192.168.1.45:10010'
VUE_APP_API_URL  = 'http://192.168.0.7/system_gateway'
#VUE_APP_API_URL  = 'http://192.168.0.7/system_gateway'
# VUE_APP_API_URL  = 'http://localhost:10010'
admin/src/components/business/OperaWarningRuleWindow.vue
@@ -11,7 +11,7 @@
      2.发生区域非必填,不填则表示该规则下所有区域的相应报警类型均通知;<br>
    </p>
    <el-form :model="form" ref="form" :rules="rules">
      <div style="display: flex;" v-for="(item,index) in form.detailList" :key="'warning_'+index" >
      <div style="display: flex;" v-for="(item,index) in form.detailList" :key="'region_'+item.random" >
        <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'规则'+(index +1)}}</span>
        <el-form-item label=""   style="display: inline-block;margin-left: 10px; " >
          <el-select v-model="item.warningId" filterable      placeholder="请选择报警类型"    >
@@ -35,23 +35,9 @@
              noOptionsText="没有可选项"
              noResultsText="没有匹配的结果" />
        </el-form-item>
        <el-form-item label=""   style="display: inline-block;margin-left: 10px;width: 120px; " >
          <el-select  v-model="item.deviceType" filterable placeholder="请选择设备类型" clearable  @change="changeDeviceType(item)" >
            <el-option label="监控点" :value="0" ></el-option>
            <el-option label="消防设备" :value="1" ></el-option>
            <el-option label="消防传感器" :value="2" ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label=""  v-if="item.deviceType>=0 || item.deviceType <=2" style="display: inline-block;margin-left: 10px; " >
          <el-select v-model="item.deviceId" filterable placeholder="请选择监控点" clearable   @change="changeCamera(item)" >
            <el-option v-for="item1 in item.carmeraList"   :label="item1.name" :value="item1.indexCode" ></el-option>
          </el-select>
        </el-form-item>
        <el-button type="danger" style="margin-left: 10px;height: 32px; " @click="delDo(index)" v-if="index>0 || form.detailList.length>1">删除</el-button>
      </div>
      <el-form-item label="" prop="detailList" style="width: 150px">
       <el-button type="primary" style="margin-left: 10px;margin-bottom: 20px;" @click="addDo">增加规则</el-button>
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-radio-group v-model="form.status">
          <el-radio :label="0" :value="0">禁用</el-radio>
@@ -61,7 +47,7 @@
      <el-form-item label="发生间隔时间(秒)" prop="intervalSec">
        <el-input type="number" v-model="form.intervalSec" placeholder="请输入多规则间隔时间(秒)" v-trim/>
      </el-form-item>
      <el-form-item label="钉钉通知" prop="memberNotice"   >
      <el-form-item label="钉钉通知" prop="memberNotice"  style="display:inline-block;width: 50%;">
        <el-switch    style="margin-right:30px;width:100px"    v-model="form.memberNotice" :active-value="1"  :inactive-value="0" active-text="开" inactive-text="关"></el-switch>
      </el-form-item>
      <el-form-item label="选择钉钉通知人员" v-if="form.memberNotice ==1" prop="memberIds" style="margin-bottom: 30px" >
@@ -70,7 +56,7 @@
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="广播通知" prop="deviceNotice"    >
      <el-form-item label="广播通知" prop="deviceNotice"  style="display:inline-block;width: 50%;" >
        <el-switch    style="margin-right:30px;width: 100px"    v-model="form.deviceNotice" :active-value="1"  :inactive-value="0" active-text="开" inactive-text="关">></el-switch>
      </el-form-item>
      <el-form-item label="选择播报广播" v-if="form.deviceNotice ==1"  prop="deviceIds" style="margin-bottom: 30px" >
@@ -97,20 +83,6 @@
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    var validIdDetals = (rule, value, callback) => {
      if (this.form.detailList == null || this.form.detailList.length == 0) {
        callback(new Error('请配置规则'))
        return
      }
      for (let i = 0; i < this.form.detailList.length; i++) {
        var item = this.form.detailList[i]
        if (!item || item.warningId === undefined || !item.warningId || item.warningId == null) {
          callback(new Error('请正确配置规则'))
          return
        }
      }
      callback()
    }
    return {
      // 表单数据
      form: {
@@ -123,7 +95,7 @@
        intervalSec: '',
        sortnum: '',
        status: 0,
        detailList: [{ random: Math.random(), regionId: null, regionName: null, deviceId: null, deviceName: null, regionCode: null, warningId: null }]
        detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
      },
      deviceSelect: [],
      memberSelect: [],
@@ -133,11 +105,10 @@
      regionList: [],
      // 验证规则
      rules: {
        detailList: [{ required: true, validator: validIdDetals, message: '请正确配置规则', tigger: 'blur' }],
        memberNotice: [{ required: true, message: '请选择钉钉通知' }],
        deviceNotice: [{ required: true, message: '请选择是否广播通知' }],
        deviceIds: [{ required: true, message: '请选择播报广播' }],
        memberIds: [{ required: true, message: '请选择通知人员' }],
        deviceIds: [{ required: true, message: '请选择播报广播', tigger: 'blur' }],
        memberIds: [{ required: true, message: '请选择通知人员', tigger: 'blur' }],
        status: [{ required: true, message: '请选择状态' }]
      }
    }
@@ -147,7 +118,6 @@
      api: '/business/warningRule',
      'field.id': 'id'
    })
    this.loadRegions()
  },
  methods: {
    normalizeOptions (node) {
@@ -161,77 +131,18 @@
        children: node.childList
      }
    },
    changeDeviceType (item) {
      if (item.regionId) {
        var reg = this.getSelectedObject(item.regionId)
        if (reg) {
          item.carmeraList = []
          if (item.deviceType === 1) {
            item.carmeraList = reg.deviceList
          } else if (item.deviceType === 2) {
            item.carmeraList = reg.sensorList
          }else if (item.deviceType === 0){
            item.carmeraList = reg.carmeraList
          }
        }
      }else{
        item.carmeraList = []
      }
      this.$nextTick(() => {
        if (!item.deviceType || this.notInCarmeraList(item.carmeraList, item.deviceId)) {
          item.deviceId = null
          item.deviceName = null
        }
      })
    },
    changeCamera (curitem) {
      var list = curitem.carmeraList
      if (list && list.length) {
        list.forEach(item => {
          if (curitem.deviceId === item.indexCode) {
            curitem.deviceName = item.name
          }
        })
      }
    },
    changeSel (opt) {
      console.log('=================changeSel', opt, this.form.detailList)
      var item = this.form.detailList[opt]
      this.form.detailList[opt].regionCode = null
      this.form.detailList[opt].regionName = null
      this.form.detailList[opt].carmeraList = []
      if (item.regionId) {
        var reg = this.getSelectedObject(item.regionId)
        if (reg) {
          this.form.detailList[opt].regionCode = reg.indexCode
          this.form.detailList[opt].regionName = reg.name
          if (item.deviceType === 1) {
            this.form.detailList[opt].carmeraList = reg.deviceList
          } else if (item.deviceType === 2) {
            this.form.detailList[opt].carmeraList = reg.sensorList
          }else{
            this.form.detailList[opt].carmeraList = reg.carmeraList
          }
        }
      }
      this.$nextTick(() => {
        console.log('=================changeSel1', this.form.detailList[opt].carmeraList, this.form.detailList[opt].deviceId)
        if (this.notInCarmeraList(this.form.detailList[opt].carmeraList, this.form.detailList[opt].deviceId)) {
          this.form.detailList[opt].deviceId = null
          this.form.detailList[opt].deviceName = null
        }
      })
    },
    notInCarmeraList (list, id) {
      var r = true
      if (list && list.length) {
        for (const item of list) {
          if (item.indexCode === id) {
            r = false
          }
        }
      }
      return r
      console.log(' this.form.detailList[opt]', reg, this.form.detailList[opt])
    },
    getSelectedObject (id) {
      if (!id) {
@@ -251,7 +162,7 @@
      return findSelected(this.regionList) // 开始搜索并返回结果
    },
    addDo () {
      this.form.detailList.push({ random: Math.random(), deviceId: null, deviceName: null, regionId: null, regionName: null, regionCode: null, warningId: null })
      this.form.detailList.push({ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null })
    },
    delDo (index) {
      if (this.form.detailList.length > 1 && this.form.detailList.length > index) {
@@ -293,7 +204,7 @@
        deviceNoticeContent: '',
        memberNotice: 1,
        status: 0,
        detailList: [{ random: Math.random(), deviceId: null, deviceName: null, regionId: null, regionName: null, regionCode: null, warningId: null }]
        detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
      }
      // 新建
      if (target == null) {
@@ -305,30 +216,11 @@
      }
      // 编辑
      this.$nextTick(() => {
        this.form.detailList = target.detailList
        for (const key in this.form) {
          this.form[key] = target[key]
          this.form.memberNotice = this.form.memberNotice || 0
          this.form.deviceNotice = this.form.deviceNotice || 0
          this.form.status = this.form.status || 0
        }
        console.log('===========================', this.form.detailList, target.detailList)
        if (!this.form.detailList || !this.form.detailList.length) {
          this.form.detailList = [{ random: Math.random(), deviceId: null, deviceName: null, regionId: null, regionName: null, regionCode: null, warningId: null }]
        } else {
          this.form.detailList.forEach((item, index) => {
            if (item.regionId != null) {
              var region = this.getSelectedObject(item.regionId)
              if (region) {
                item.carmeraList = region.carmeraList || []
                if(item.deviceType === 1){
                  item.carmeraList = region.deviceList || []
                }else if(item.deviceType === 2){
                  item.carmeraList = region.sensorList || []
                }
              }
            }
          })
          this.form.detailList = [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
        }
        if (this.form.memberIds) {
          this.memberSelect = this.form.memberIds.split(',')
admin/src/views/business/warningRule.vue
@@ -37,13 +37,6 @@
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="title" label="报警规则" min-width="200px" show-tooltip-when-overflow></el-table-column>
        <el-table-column prop="detailList" label="规则明细" min-width="360px" show-tooltip-when-overflow>
          <template slot-scope="{row}">
            <div  v-if="row.detailList && row.detailList.length">
                <div style="display: block;" v-for="item in row.detailList"> {{item.warningName||''}} {{item.regionName||''}} {{item.deviceName||''}};</div>
             </div>
          </template>
        </el-table-column>
        <el-table-column prop="memberNames" label="报警接收人" min-width="200px" show-tooltip-when-overflow>
          <template slot-scope="{row}">
           <span v-if="row.memberNotice === 1">{{row.memberNames}}</span>
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -323,9 +323,9 @@
        param.setWithCameras(0);
        List<PageRegionInfoResponse>  result = new ArrayList<>();
        try {
//            result = boardService.getRegionTree( param);
            result = boardService.getRegionTree( param);
            //------TODO---------测试模拟数据----start-----
            for (int i = 0; i < 5; i++) {
           /* for (int i = 0; i < 5; i++) {
                PageRegionInfoResponse t = new PageRegionInfoResponse();
                t.setName("总区域_"+i);
                t.setIndexCode(i+"_code");
@@ -338,7 +338,7 @@
                    t.getChildList().add(t1);
                }
                result.add(t);
            }
            }*/
            //------TODO---------测试模拟数据----end-----
        }catch (Exception e){
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: pro
    active: dev
  application:
    name: visitsAdmin
    # 安全配置
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -123,6 +123,7 @@
    @Override
    public List<Device> findList(Device device) {
        device.setIsdeleted(Constants.ZERO);
        QueryWrapper<Device> wrapper = new QueryWrapper<>(device);
        return deviceMapper.selectList(wrapper);
    }
@@ -277,22 +278,14 @@
        }
        String input = "";
        model.setSendInfo(param.getSendInfo());
        return  sendBroadcaseBobaoHttpBiz(model);
    }
    public static String sendBroadcaseBobaoHttpBiz(Device model){
        //重新下发计划
        JSONObject jsonObject = new JSONObject();
      /*  {
            "command": "start",
                "TTSContent": "冀G70122,毛重48.68吨,称重结束,请下磅",
                "audioLevel": 6,
                "audioOutID": [
                        1
              ],
            "audioVolume": 100,
                "voiceType": "female",
                "TTSLanguageType": "chinese"
        }*/
        jsonObject.put("command","start");
        jsonObject.put("TTSContent",param.getSendInfo());
        jsonObject.put("TTSContent",model.getSendInfo());
        jsonObject.put("audioLevel",6);
        jsonObject.put("audioVolume",100);
        jsonObject.put("TTSLanguageType","chinese");