doum
19 小时以前 8c73b83777413ce7ed74fb371380be3d353167ff
最新版本541200007
已添加1个文件
已修改7个文件
146 ■■■■ 文件已修改
admin/.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWarningRuleWindow.vue 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/warningRule.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/doc/新增告警规则关联监控点(2025-12-10).sql 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PageRegionInfoResponse.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningRuleServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -3,9 +3,9 @@
# VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
# VUE_APP_API_URL  = 'http://192.168.1.45:10010'
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
@@ -19,7 +19,7 @@
          </el-select>
        </el-form-item>
        <el-form-item label=""  style="display: inline-block;margin-left: 10px">
<!--          <el-select v-model="item.regionId" filterable multiple clearable  placeholder="请选择发生区域" >
<!--      <el-select v-model="item.regionId" filterable multiple clearable  placeholder="请选择发生区域" >
            <el-option v-for="item in regionList" :key="item.id" :label="item.name" :value="item.id">
            </el-option>
          </el-select>-->
@@ -34,6 +34,11 @@
              noChildrenText="没有子选项"
              noOptionsText="没有可选项"
              noResultsText="没有匹配的结果" />
        </el-form-item>
        <el-form-item label=""   style="display: inline-block;margin-left: 10px; " >
          <el-select v-model="item.deviceId" filterable placeholder="请选择监控点"   @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>
@@ -111,7 +116,7 @@
        intervalSec: '',
        sortnum: '',
        status: 0,
        detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
        detailList: [{ random: Math.random(), regionId: null, regionName: null, deviceId: null, deviceName: null, regionCode: null, warningId: null }]
      },
      deviceSelect: [],
      memberSelect: [],
@@ -135,6 +140,7 @@
      api: '/business/warningRule',
      'field.id': 'id'
    })
    this.loadRegions()
  },
  methods: {
    normalizeOptions (node) {
@@ -148,18 +154,50 @@
        children: node.childList
      }
    },
    changeCamera (curitem) {
      var list = curitem.carmeraList
      if (list && list.length) {
        list.forEach(item => {
          if (curitem.deviceId === item.indexCode) {
            curitem.deviceName = item.name
          }
        })
      }
    },
    changeSel (opt) {
      var item = this.form.detailList[opt]
      this.form.detailList[opt].regionCode = null
      this.form.detailList[opt].regionName = null
      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
      this.$nextTick(() => {
        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 = []
        // this.form.detailList[opt].deviceId = null
        // this.form.detailList[opt].deviceName = null
        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
            this.form.detailList[opt].carmeraList = reg.carmeraList
          }
        }
        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
          }
        }
      }
      console.log(' this.form.detailList[opt]', reg, this.form.detailList[opt])
      return r
    },
    getSelectedObject (id) {
      if (!id) {
@@ -179,7 +217,7 @@
      return findSelected(this.regionList) // å¼€å§‹æœç´¢å¹¶è¿”回结果
    },
    addDo () {
      this.form.detailList.push({ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null })
      this.form.detailList.push({ random: Math.random(), deviceId: null, deviceName: null, regionId: null, regionName: null, regionCode: null, warningId: null })
    },
    delDo (index) {
      if (this.form.detailList.length > 1 && this.form.detailList.length > index) {
@@ -221,7 +259,7 @@
        deviceNoticeContent: '',
        memberNotice: 1,
        status: 0,
        detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }]
        detailList: [{ random: Math.random(), deviceId: null, deviceName: null, regionId: null, regionName: null, regionCode: null, warningId: null }]
      }
      // æ–°å»º
      if (target == null) {
@@ -229,19 +267,29 @@
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      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(), regionId: null, regionName: null, regionCode: null, warningId: null }]
          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 (this.form.memberIds) {
          this.memberSelect = this.form.memberIds.split(',')
admin/src/views/business/warningRule.vue
@@ -37,6 +37,13 @@
      >
        <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/doc/ÐÂÔö¸æ¾¯¹æÔò¹ØÁª¼à¿Øµã£¨2025-12-10£©.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
ALTER TABLE `wuhuyancao`.`warning_rule_detail`
ADD COLUMN `DEVICE_NAME` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '监控点名称' AFTER `REGION_ID`,
ADD COLUMN `DEVICE_ID` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '监控点主键' AFTER `DEVICE_NAME`;
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -320,28 +320,49 @@
    @PostMapping("/regionList")
    public ApiResponse<List<PageRegionInfoResponse> > getRegionList(HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token ){
        CarmeraListVO param  =new CarmeraListVO();
        param.setWithCameras(0);
        param.setWithCameras(1);
        List<PageRegionInfoResponse>  result = new ArrayList<>();
        try {
            result = boardService.getRegionTree( param);
        }catch (Exception e){
        }
        if(result.size()==0){
            //------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");
                t.setChildList(new ArrayList<>());
                t.setCarmeraList(new ArrayList<>());
                CarmeraListVO c= new CarmeraListVO();
                c.setName("监控点11"+i);
                c.setIndexCode("jkd11"+i);
                t.getCarmeraList().add(c);
                c= new CarmeraListVO();
                c.setName("监控点12"+i);
                c.setIndexCode("jkd12"+i);
                t.getCarmeraList().add(c);
                for (int j = 0; j < 5; j++) {
                    PageRegionInfoResponse t1 = new PageRegionInfoResponse();
                    t1.setName("子区域_"+i+"_"+j);
                    t1.setIndexCode(i+"_"+j+"_ChildCode");
                    t1.setParentIndexCode(t.getIndexCode());
                    t1.setCarmeraList(new ArrayList<>());
                    CarmeraListVO c1= new CarmeraListVO();
                    c1.setName(i+"监控点111"+j);
                    c1.setIndexCode(i+"jkd111"+j);
                    t1.getCarmeraList().add(c1);
                    c1= new CarmeraListVO();
                    c1.setName(i+"监控点112"+j);
                    c1.setIndexCode(i+"jkd112"+j);
                    t1.getCarmeraList().add(c1);
                    t.getChildList().add(t1);
                }
                result.add(t);
            }*/
            }
            //------TODO---------测试模拟数据----end-----
        }catch (Exception e){
        }
        return ApiResponse.success(result);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PageRegionInfoResponse.java
@@ -1,7 +1,6 @@
package com.doumee.core.haikang.model.param.respose;
import com.doumee.dao.web.response.platformReport.CarmeraListVO;
import com.doumee.dao.web.response.platformReport.RegionTreeVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,17 +11,12 @@
     @ApiModelProperty(value = "区域唯一标识码")
     private String indexCode;//     Body      String      false      åŒºåŸŸå”¯ä¸€æ ‡è¯†ç 
     @ApiModelProperty(value = "区域名称")
     private String name     ;// Body      String      false      åŒºåŸŸåç§°
     @ApiModelProperty(value = "父区域唯一标识码")
     private String parentIndexCode ;//     Body      String      false      çˆ¶åŒºåŸŸå”¯ä¸€æ ‡è¯†ç 
     @ApiModelProperty(value = "树编号")
     private String treeCode ;//     Body      String      false      æ ‘编号
     @ApiModelProperty(value = "下级集合")
     private List<PageRegionInfoResponse> childList;
     @ApiModelProperty(value = "监控点集合")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
@@ -77,11 +77,20 @@
    @ExcelColumn(name="区域主键")
    private String regionId;
    @ApiModelProperty(value = "监控点名称")
    @ExcelColumn(name="监控点名称")
    private String deviceName;
    @ApiModelProperty(value = "监控点主键")
    @ExcelColumn(name="监控点主键")
    private String deviceId;
    @ApiModelProperty(value = "告警类型编码")
    @TableField(exist = false)
    private String code;
    @ApiModelProperty(value = "告警名称")
    @TableField(exist = false)
    private String warningName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningRuleServiceImpl.java
@@ -344,8 +344,12 @@
        queryWrapper.orderByDesc(WarningRule::getCreateDate);
        IPage<WarningRule> result = warningRuleMapper.selectJoinPage(page, WarningRule.class,queryWrapper);
        if(result.getRecords()!=null && result.getRecords().size()>0){
            List<WarningRuleDetail> allList = warningRuleDetailMapper.selectList(new LambdaQueryWrapper<WarningRuleDetail>()
                    .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO));
            List<WarningRuleDetail> allList = warningRuleDetailMapper.selectJoinList(WarningRuleDetail.class,
                    new MPJLambdaWrapper<WarningRuleDetail>()
                            .selectAll(WarningRuleDetail.class)
                            .selectAs(Warning::getName,WarningRuleDetail::getWarningName)
                            .leftJoin(Warning.class,Warning::getId,WarningRuleDetail::getWarningId)
                            .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO));
            for(WarningRule model :result.getRecords()){
                model.setDetailList(getDetailListFromAll(allList,model.getId()));
            }