已添加19个文件
已修改26个文件
803 ■■■■ 文件已修改
admin/.env.development 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_2.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_7.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/ic_8.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/sousuo.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/xl.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_2.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_7.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/icons/菜单图标/__MACOSX/._ic_8.jpg 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/assets/system.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaJkSketchLineListWindow.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWarningRuleWindow.vue 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/CommonHeader.vue 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/login.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/KeyResultEvent.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetActivity.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/HKUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceStatusListResponse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PageRegionInfoResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/Clustering.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -3,11 +3,11 @@
# 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'
# VUE_APP_API_URL  = 'http://localhost:10010'
#key:045542fc5f436b75e6c911c5c84ff8cd
#密钥:8bd38497f9aee2b75e7a888a4dfd1e6c
admin/src/assets/icons/ic_1.jpg
admin/src/assets/icons/ic_2.png
admin/src/assets/icons/ic_3.jpg
admin/src/assets/icons/ic_4.jpg
admin/src/assets/icons/ic_5.jpg
admin/src/assets/icons/ic_6.jpg
admin/src/assets/icons/ic_7.jpg
admin/src/assets/icons/ic_8.jpg
admin/src/assets/icons/sousuo.png
admin/src/assets/icons/xl.png
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_1.jpg
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_2.png
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_3.jpg
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_4.jpg
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_5.jpg
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_6.jpg
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_7.jpg
admin/src/assets/icons/²Ëµ¥Í¼±ê/__MACOSX/._ic_8.jpg
admin/src/assets/system.png
admin/src/components/business/OperaJkSketchLineListWindow.vue
@@ -17,7 +17,8 @@
      <div style="display: flex;margin-top: 20px" class="orange">
        <div style="flex: 1" >线路原始总路程:
          <span  v-if="(model.originDistance ||0) > 0 ||  (model.status||0) != 0" class="red" style="font-weight: bold"> {{((model.originDistance ||0)/1000).toFixed(2)}}</span>
          <span  v-if="(model.originDistance ||0) == 0 && (model.status||0) == 0"  class="blue" style="font-weight: bold;cursor: pointer" @click="initDistance"> ç‚¹å‡»èŽ·å– </span> å…¬é‡Œï¼›
          <span  v-if="(model.originDistance ||0) == 0 && (model.status||0) == 0 && !distancing"  class="blue" style="font-weight: bold;cursor: pointer" @click="initDistance"> ç‚¹å‡»èŽ·å– </span>
          <span  v-if="(model.originDistance ||0) == 0 && (model.status||0) == 0 && distancing"  class="red" style="font-weight: bold;cursor: pointer"> æ­£åœ¨èŽ·å– </span> å…¬é‡Œï¼›
          <span v-if="model.status ==2">优化后总路程:<span class="green" style="font-weight: bold"> {{((model.distance ||0)/1000).toFixed(2)}} </span> å…¬é‡Œ</span>
        </div>
      </div>
@@ -103,6 +104,7 @@
  data () {
    return {
      // è¡¨å•数据
      distancing:false,
      model: {
      },
      dataList: [],
@@ -121,6 +123,7 @@
      this.visible = true
      this.model = target
      this.loadList()
      this.distancing =false
      if(this.model.optStatus === 1){
        this.loadListNew()
      }
@@ -143,6 +146,10 @@
    },
    initDistance () {
      var that = this
      if(this.distancing){
        return
      }
      this.distancing=true
      initOriginDistance({
        id: this.model.id
      }).then(res => {
@@ -151,6 +158,10 @@
          that.model.distance = res.distance
          that.loadList()
        }
      }).catch(e => {
            this.$tip.apiFailed(e)
          }).finally(() => {
        that.distancing = false
      })
    },
    viewCustomer (row) {
admin/src/components/business/OperaWarningRuleWindow.vue
@@ -35,8 +35,15 @@
              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-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>
@@ -154,6 +161,29 @@
        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) {
@@ -165,7 +195,7 @@
      }
    },
    changeSel (opt) {
      console.log('=================changeSel',opt,this.form.detailList)
      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
@@ -175,12 +205,18 @@
        if (reg) {
          this.form.detailList[opt].regionCode = reg.indexCode
          this.form.detailList[opt].regionName = reg.name
          this.form.detailList[opt].carmeraList = reg.carmeraList
          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) ){
        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
        }
@@ -269,7 +305,7 @@
      }
      // ç¼–辑
      this.$nextTick(() => {
        this.form.detailList =target.detailList
        this.form.detailList = target.detailList
        for (const key in this.form) {
          this.form[key] = target[key]
          this.form.memberNotice = this.form.memberNotice || 0
@@ -285,6 +321,11 @@
              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 || []
                }
              }
            }
          })
admin/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
  <div class="common-header">
    <div class="header">
      <div class="logo">
        <div class="title">{{ title }}</div>
        <div class="title"> <img src="@/assets/system.png" alt="" />{{ title }}</div>
        <div class="list">
            <div  :class="index==currentIndex?'item active':'item'" v-for="(item,index) in topMenuList.list" :key="item.id"  @click="getHeaderNav(item,index)" :index="index">{{item.label}}
              <div v-if="index==currentIndex" class="linellae"></div>
@@ -10,18 +10,48 @@
        </div>
      </div>
      <div class="user">
        <el-dropdown v-if="isLogined" trigger="click">
          <span class="el-dropdown-link">
            <!-- <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> -->
            <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{
              userInfo | displayName
            }}<i class="el-icon-arrow-down el-icon--right"></i>
          </span>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item @click.native="changePwd">修改密码</el-dropdown-item>
            <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
          <div class="user-search">
              <div class="user-search-left">
                <span>全部</span>
                  <img src="@/assets/icons/xl.png" alt="">
              </div>
              <div class="user-search-right">
                  <input type="text" placeholder="请输入" />
                  <img src="@/assets/icons/sousuo.png" alt="">
              </div>
          </div>
          <div class="user-images">
              <img src="@/assets/icons/ic_1.jpg" alt="">
              <img src="@/assets/icons/ic_2.png" alt="">
              <img src="@/assets/icons/ic_3.jpg" alt="">
              <img src="@/assets/icons/ic_4.jpg" alt="">
              <img src="@/assets/icons/ic_5.jpg" alt="">
              <img src="@/assets/icons/ic_6.jpg" alt="">
              <img src="@/assets/icons/ic_7.jpg" alt="">
              <img src="@/assets/icons/ic_8.jpg" alt="">
          </div>
          <el-dropdown v-if="isLogined" trigger="click">
            <span class="el-dropdown-link" style="cursor: pointer; color: rgba(255,255,255,.56);">
              {{ userInfo | displayName }}
              <i class="el-icon-arrow-down el-icon--right"></i>
            </span>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item @click.native="changePwd">修改密码</el-dropdown-item>
              <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
<!--        <el-dropdown v-if="isLogined" trigger="click">-->
<!--          <span class="el-dropdown-link">-->
<!--            &lt;!&ndash; <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i> &ndash;&gt;-->
<!--            <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{-->
<!--              userInfo | displayName-->
<!--            }}<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
<!--          </span>-->
<!--          <el-dropdown-menu slot="dropdown">-->
<!--            <el-dropdown-item @click.native="changePwd">修改密码</el-dropdown-item>-->
<!--            <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item>-->
<!--          </el-dropdown-menu>-->
<!--        </el-dropdown>-->
      </div>
    </div>
    <!-- ä¿®æ”¹å¯†ç  -->
@@ -321,7 +351,7 @@
      flex-direction: column;
      align-items: center;
      justify-content: flex-start;
      height: 40px;
      height: 49px;
      cursor: pointer;
      .linellae {
@@ -349,7 +379,7 @@
    box-sizing: border-box;
    min-width: 360px;
    height: 56px;
    padding: 10px 30px;
    padding: 10px 20px;
    // flex-shrink: 0;
    line-height: 36px;
    font-size: 22px;
@@ -359,8 +389,18 @@
    align-items: center;
    .title {
      display: flex;
      color: rgb(255, 255, 255);
      font-size: 18px;
      width: 320px;
      font-weight: 700;
      font-family: "Microsoft Yahei", "sans-serif", "segoe UI", "PingFang SC", arial, Helvetica;
      //font-size: 18px;
      //width: 320px;
      img{
        width:auto ;
        height: 32px;
        margin-right: 5px;
      }
    }
    // display: inline;
@@ -372,15 +412,83 @@
  }
  .user {
    width: 152px;
    /*width: 152px;*/
    box-sizing: border-box;
    height: 56px;
    padding-right: 25px;
    background: url("../../assets/images/top_ic_bolang@2x.png") no-repeat;
    /*background: url("../../assets/images/top_ic_bolang@2x.png") no-repeat;*/
    flex-shrink: 0;
    text-align: right;
    cursor: pointer;
    display: flex;
    align-items: center;
    .user-search {
        width: 346px;
        height: 32px;
        border-radius: 30px;
        border: 1px solid rgba(255,255,255,.56);
        margin-right: 15px;
        display: flex;
        align-items: center;
        .user-search-left {
            flex-shrink: 0;
            width: 106px;
            height: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            span {
                font-size: 14px;
                font-weight: 400;
                color: rgba(255,255,255,.56);
                margin-right: 10px;
            }
            img {
                top: 0;
                margin: 0;
                width: 20px;
                height: 16px;
            }
        }
        .user-search-right {
            flex: 1;
            height: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            padding-right: 10px;
            box-sizing: border-box;
            input {
                flex: 1;
                height: 100%;
                font-size: 14px;
                font-weight: 400;
                color: rgba(255,255,255,.56);
                border: none;
                outline: none;
                background-color: rgba(0,0,0,0);
                &::placeholder {
                    color: rgba(255,255,255,.56);
                }
            }
            img {
                top: 0;
                margin: 0;
                width: 20px;
                height: 20px;
            }
        }
    }
    .user-images {
        height: 100%;
        display: flex;
        align-items: center;
        img {
            top: 0 !important;
            width: 24px;
            height: 24px;
            margin-right: 15px;
        }
    }
    .el-dropdown {
      top: 2px;
      color: #fff;
admin/src/views/login.vue
@@ -3,7 +3,7 @@
    <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
    <div class="login_wrap">
      <div class="login_img">
        <div class="h2">芜湖烟草智慧安消安全防范系统</div>
        <div class="h3" style="font-size: 30px; margin-left: 140px; margin-bottom: 0;">芜湖烟草</div>
        <div class="h3">智慧物流园区安消一体化系统</div>
      </div>
      <div class="form_wrap">
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/event/KeyResultEvent.java
@@ -4,5 +4,18 @@
 * é’¥åŒ™ç›‘听返回
 */
public class KeyResultEvent {
    //1:1号板,2:2号板,3:两块板
    private String type;
    public KeyResultEvent(String type) {
        this.type = type;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/KeyCabinetActivity.java
@@ -23,6 +23,7 @@
import com.doumee.keyCabinet.dao.DaoManager;
import com.doumee.keyCabinet.databinding.KeyCabinetActivityBinding;
import com.doumee.keyCabinet.event.CloseGridOneResultEvent;
import com.doumee.keyCabinet.event.HttpEvent;
import com.doumee.keyCabinet.event.KeyResultEvent;
import com.doumee.keyCabinet.event.GetKeyStatusEvent;
import com.doumee.keyCabinet.event.OpenErrEvent;
@@ -364,7 +365,7 @@
            }
            //获取卡号
            EventBus.getDefault().post(new GetKeyStatusEvent());
            keyTime = new Date().getTime()+500;
            keyTime = new Date().getTime()+300;
            if(handler.hasMessages(0)){
                handler.removeMessages(0);
            }
@@ -480,6 +481,19 @@
                if(handler.hasMessages(0)){
                    handler.removeMessages(0);
                }
                if("1".equals(e.getType())){
                    //1号板
                    if(!"1".equals(selectBean.getBoardCode())){
                        EventBus.getDefault().post(new HttpEvent("xxxxxxxxxx==>钥匙信息3"));
                        return;
                    }
                }else if("2".equals(e.getType())){
                    //2号板
                    if(!"2".equals(selectBean.getBoardCode())){
                        EventBus.getDefault().post(new HttpEvent("xxxxxxxxxx==>钥匙信息4"));
                        return;
                    }
                }
                String key = SportUtils.intToHex(Integer.parseInt(selectBean.getBoardCode()))
                        +SportUtils.intToHex(Integer.parseInt(selectBean.getChannelCode()));
                if(flag==0) {
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/keyCabinet/ManageCabinetActivity.java
@@ -570,7 +570,7 @@
            }
            //发送查询钥匙号
            EventBus.getDefault().post(new GetKeyStatusEvent());
            keyTime = new Date().getTime()+500;
            keyTime = new Date().getTime()+300;
            if(handler.hasMessages(0)){
                handler.removeMessages(0);
            }
@@ -673,8 +673,25 @@
                if(!isFail){
                    if(copyMap.containsKey(gridDo.getGridKey())){
                        //关门成功
                        EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date())+"门关闭成功***************************>目标:"+gridDo.getKeyCode()+",当前:"+gridDo.getCurKeyCode()));
                        getVM().closeGrid(gridDo);
                        boolean isSend = false;
                        String bh = gridDo.getGridKey().substring(0,2);
                        if("1".equals(e.getType())){
                            //1号板
                            if("01".equals(bh)){
                                isSend = true;
                            }
                        }else if("2".equals(e.getType())){
                            //2号板
                            if("02".equals(bh)){
                                isSend = true;
                            }
                        }else {
                            isSend = true;
                        }
                        if(isSend) {
                            EventBus.getDefault().post(new HttpEvent(StringUtil.DateToStrSS(new Date()) + "门关闭成功***************************>目标:" + gridDo.getKeyCode() + ",当前:" + gridDo.getCurKeyCode()));
                            getVM().closeGrid(gridDo);
                        }
                    }
                }
            }
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java
@@ -1529,7 +1529,17 @@
            //一号版
            bh = 1;
        }
        String[] sp = data.split("AA");
        List<String> sp = new ArrayList<>();
        String data2 = data.substring(8,data.length());
        while (data2.length()>0){
            if (data2.length()<22) {
                sp.add(data2+"");
                data2 = "";
            }else {
                sp.add(data2.substring(0,22));
                data2 = data2.substring(22);
            }
        }
        for(String s:sp){
            if(s.length()>=20){
                String key = SportUtils.intToHex(bh)+s.substring(4,6);
@@ -1554,7 +1564,7 @@
        }
        getVM().updateGrids(updateList);
        EventBus.getDefault().post(new KeyResultEvent());
        EventBus.getDefault().post(new KeyResultEvent(bh+""));
    }
    private SerialPortModel jiuPort;
server/system_gateway/src/main/resources/bootstrap-dev.yml
@@ -7,7 +7,7 @@
      discovery:
        server-addr: http://192.168.0.7:8848 #配置Nacos地址
#        namespace: dmvisit
        namespace: wuhu_visit_dev1
        namespace: wuhu_visit_dev
        username: nacos
        password: nacos
    gateway:
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -572,6 +572,11 @@
        public static final String BIGSCREEN_UUID ="BIGSCREEN_UUID";
        public static final String IMPORTING_GAS ="IMPORTING_GAS";
        public static final String ERP_TOKEN ="ERP_TOKEN";
        public static final String HK_REGIONS ="HK_REGIONS";
        public static final String HK_CAMERAS ="HK_CAMERAS";
        public static final String HK_REGIONS_TREE ="HK_REGIONS_TREE";
        public static final String HK_FIRE_DEVICE="HK_FIRE_DEVICE";
        public static final String HK_SENSOR="HK_SENSOR";
        public static final long EXPIRE_TIME = 7200;
        public static final String INTERNAL_TOKEN ="INTERNAL_TOKEN";
@@ -1530,12 +1535,15 @@
        GRID_TIME_OUT_INFO(10003, "【钥匙柜】开门超时未关闭",0),
        KEY_TIME_OUT_BACK(10004, "【钥匙柜】钥匙超时未归还",0),
        AF_QYRQ(131588, "【安防事件】区域入侵",1),
        AF_QUPD(131592, "【安防事件】区域跑动",1),
        AF_RYLG(131603, "【安防事件】人员离岗",1),
        AF_QUPD(131668, "【安防事件】区域跑动",1),
        AF_RYLG(422000001, "【安防事件】人员离岗",1),
        AF_KYSCX(131585, "【安防事件】跨越生产线",1),
        XF_SYBJ(253956, "【消防事件】水压报警",1),
        AF_XFTDZS(422000000, "【安防事件】消防通道阻塞",1),
        XF_SYGDBJ(254215, "【消防事件】水压过低报警",1),
        XF_SYGGBJ(254216, "【消防事件】水压过高报警",1),
        XF_HZBJ(253999, "【消防事件】火灾报警",1),
        XF_YWBJ(254047, "【消防事件】液位报警",1),
        XF_YWGDBJ(254331, "【消防事件】液位过低报警",1),
        XF_YWGGBJ(254332, "【消防事件】液位过高报警",1),
        ;
        // æˆå‘˜å˜é‡
        private int key;
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -320,15 +320,14 @@
    @PostMapping("/regionList")
    public ApiResponse<List<PageRegionInfoResponse> > getRegionList(HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token ){
        CarmeraListVO param  =new CarmeraListVO();
        param.setWithCameras(1);
        param.setWithCameras(2);
        List<PageRegionInfoResponse>  result = new ArrayList<>();
        try {
            result = boardService.getRegionTree( param);
        }catch (Exception e){
        }
        /*if(result.size()==0){
       /* if(result.size()==0){
            //------TODO---------测试模拟数据----start-----
            for (int i = 0; i < 5; i++) {
                PageRegionInfoResponse t = new PageRegionInfoResponse();
@@ -350,6 +349,9 @@
                    t1.setIndexCode(i+"_"+j+"_ChildCode");
                    t1.setParentIndexCode(t.getIndexCode());
                    t1.setCarmeraList(new ArrayList<>());
                    t1.setDeviceList(new ArrayList<>());
                    t1.setSensorList(new ArrayList<>());
                    CarmeraListVO c1= new CarmeraListVO();
                    c1.setName(i+"监控点111"+j);
                    c1.setIndexCode(i+"jkd111"+j);
@@ -358,8 +360,31 @@
                    c1.setName(i+"监控点112"+j);
                    c1.setIndexCode(i+"jkd112"+j);
                    t1.getCarmeraList().add(c1);
                    c1= new CarmeraListVO();
                    c1.setName(i+"传感器111"+j);
                    c1.setIndexCode(i+"cgq111"+j);
                    t1.getSensorList().add(c1);
                    c1= new CarmeraListVO();
                    c1.setName(i+"传感器111112"+j);
                    c1.setIndexCode(i+"cgq112"+j);
                    t1.getSensorList().add(c1);
                    c1= new CarmeraListVO();
                    c1.setName(i+"消防设备111"+j);
                    c1.setIndexCode(i+"xf111"+j);
                    t1.getDeviceList().add(c1);
                    c1= new CarmeraListVO();
                    c1.setName(i+"消防设备111112"+j);
                    c1.setIndexCode(i+"xf112"+j);
                    t1.getDeviceList().add(c1);
                    t.getChildList().add(t1);
                }
                result.add(t);
            }
            //------TODO---------测试模拟数据----end-----
server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -16,7 +16,7 @@
      discovery:
        server-addr: http://192.168.0.7:8848 #配置Nacos地址
#        namespace: dmvisit
        namespace: wuhu_visit_dev1
        namespace: wuhu_visit_dev
        username: nacos
        password: nacos
knife4j:
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/core/haikang/HKUtil.java
@@ -15,7 +15,6 @@
public class HKUtil {
    private static final Logger logger = LoggerFactory.getLogger(HKUtil.class);
    /**
     * è¯·æ ¹æ®è‡ªå·±çš„appKey和appSecret更换static静态块中的三个参数. [1 host]
     * å¦‚果你选择的是和现场环境对接,host要修改为现场环境的ip,https端口默认为443,http端口默认为80.例如10.33.25.22:443
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FireDeviceStatusListResponse.java
@@ -10,7 +10,7 @@
        private String regionName;//    String    false
        private String deviceIndexCode;//    String    false
        private String deviceType;//    Number    false
        private String unitStatus    ;//Number    false
        private Integer unitStatus    ;//Number    false部件状态,0:未注册 1:正常 2: ä¿®å¤ä¸­ 3:异常状态(修复中状态目前没用到,未注册时设备没有在离线状态) ç©º-所有状态
        private String online;//    Number    false
        private String collectTime;//    String    false
        private String faultType;//    String    false
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PageRegionInfoResponse.java
@@ -21,4 +21,8 @@
     private List<PageRegionInfoResponse> childList;
     @ApiModelProperty(value = "监控点集合")
     private    List<CarmeraListVO> carmeraList;
     @ApiModelProperty(value = "消防传感器集合")
     private    List<CarmeraListVO> deviceList;
     @ApiModelProperty(value = "消防设备集合")
     private    List<CarmeraListVO> sensorList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/Clustering.java
@@ -40,11 +40,12 @@
        return  clusters;
    }
    public static double distanceTo(JkSketchCustomer self, JkSketchCustomer other) {
        List<DistanceMapParam> distanceMapParamList  =JkSketchServiceImpl.getListFromJsonStr(self.getDistanceJson());
        // ====标记==忽略交通规划距离=====
        /*List<DistanceMapParam> distanceMapParamList  =JkSketchServiceImpl.getListFromJsonStr(self.getDistanceJson());
        DistanceMapParam param = JkSketchServiceImpl.getParamByCustomerIds( other.getId(),distanceMapParamList);
        if(param!=null && param.getDistance()!=0){//如果之前已经获取过
          return (param.getDistance());
        }
        }*/
        return DistanceCalculator.calculateDistance(Constants.formatBigdecimal(self.getLatitude()).doubleValue()
                ,Constants.formatBigdecimal(self.getLongitude()).doubleValue()
                ,Constants.formatBigdecimal(other.getLatitude()).doubleValue()
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
@@ -84,6 +84,9 @@
    @ApiModelProperty(value = "监控点主键")
    @ExcelColumn(name="监控点主键")
    private String deviceId;
    @ApiModelProperty(value = "关联设备类型 0-监控点 1-消防设备 2-消防传感器")
    @ExcelColumn(name="关联设备类型 0-监控点 1-消防设备 2-消防传感器")
    private Integer deviceType;
    @ApiModelProperty(value = "告警类型编码")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java
@@ -12,7 +12,7 @@
@Data
public class CarmeraListVO {
    @ApiModelProperty(value = "监控点名称")
    @ApiModelProperty(value = "设备名称")
    private String name;
    @ApiModelProperty(value = "唯一索引")
@@ -23,6 +23,10 @@
    private Integer withCameras;
    @ApiModelProperty(value = "设备状态:不在线,1-在线")
    private Integer status;
    @ApiModelProperty(value = "是否强制刷新 0否 1是")
    private int refresh;
    @ApiModelProperty(value = "设备状态描述")
    private String statusName;
    @ApiModelProperty(value = "设备所在位置")
    private String regionName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -724,11 +724,13 @@
    }
    public void sendDeviceNotice(WarningRule warningRule){
        if(Constants.equalsInteger(warningRule.getDeviceNotice(),Constants.ONE)&&StringUtils.isNotBlank(warningRule.getDeviceIds())&&StringUtils.isNotBlank(warningRule.getDeviceNoticeContent())){
        if(Constants.equalsInteger(warningRule.getDeviceNotice(),Constants.ONE)
                &&StringUtils.isNotBlank(warningRule.getDeviceIds())
                &&StringUtils.isNotBlank(warningRule.getDeviceNoticeContent())){
            List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>()
                    .lambda()
                    .eq(Device::getStatus,Constants.ZERO)
                    .eq(Device::getId,Arrays.asList(warningRule.getDeviceIds().split(",")))
                    .in(Device::getId,Arrays.asList(warningRule.getDeviceIds().split(",")))
            );
            if(CollectionUtils.isNotEmpty(deviceList)){
                for (Device device:deviceList) {
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java
@@ -140,6 +140,106 @@
            startmodel.setEndLatitude(allList.get(0).getLatitude());
            startmodel.setEndLogitude(allList.get(0).getLongitude());
            startmodel.setDistance(allList.get(0).getStartDistance());
//            startmodel.setSteps(allList.get(0).getStartSteps());
            if(StringUtils.isBlank(startmodel.getSteps())){
                // (BigDecimal lat1, BigDecimal lon1, BigDecimal lat2, BigDecimal lon2)
                startmodel.setDistance(DistanceCalculator.calculateDistanceDecinal(startmodel.getStartLatitude(),startmodel.getStartLogitude(),startmodel.getEndLatitude(),startmodel.getEndLogitude()));
                startmodel.setSteps(comLocation +";"+allList.get(0).getLongitude()+","+allList.get(0).getLatitude());
            }
            list.add(startmodel);
            for (int i = 0; i < allList.size(); i++) {
                if(allList.size() == i+1){
                    JkCustomerNavigation endmodel = new JkCustomerNavigation();
                    endmodel.setStartId(-1);
                    endmodel.setLocation(allList.get(i).getLocation());
                    endmodel.setName(allList.get(i).getName());
//                    endmodel.setSteps(allList.get(i).getEndSteps());
                    endmodel.setStartLatitude(allList.get(i).getLatitude());
                    endmodel.setStartLogitude(allList.get(i).getLongitude());
                    endmodel.setDistance(allList.get(0).getEndDistance());
                    endmodel.setEndLatitude(cLatitude);
                    endmodel.setEndLogitude(cLongitude);
                    if(StringUtils.isBlank(startmodel.getSteps())){
                        startmodel.setSteps(allList.get(i).getLongitude()+","+allList.get(i).getLatitude()+";"+comLocation);
                    }
                    list.add(endmodel);
                    break;
                }
                JkSketchCustomer start = allList.get(i);
                JkSketchCustomer end = allList.get(i+1);
             /*   JkCustomerNavigation tt = jkCustomerNavigationMapper.selectOne(new QueryWrapper<JkCustomerNavigation>().lambda()
                        .eq(JkCustomerNavigation::getIsdeleted,Constants.ZERO)
                        .eq(JkCustomerNavigation::getIdIndex, allList.get(i).getCustomerId()+"-"+ allList.get(i+1).getCustomerId())
                        .orderByDesc(JkCustomerNavigation::getId)
                        .last("limit 1")
                );*/
                JkCustomerNavigation tt = null;
                if(tt==null){
                    //只有起止点
                    tt = new JkCustomerNavigation();
                    tt.setStartLatitude(start.getLatitude());
                    tt.setStartLogitude(start.getLongitude());
                    tt.setEndLatitude(end.getLatitude());
                    tt.setEndLogitude(end.getLongitude());
                    tt.setDistance(DistanceCalculator.calculateDistanceDecinal(tt.getStartLatitude(),tt.getStartLogitude(),tt.getEndLatitude(),tt.getEndLogitude()));
                    //  //====标记==忽略交通规划距离=====
                   /* List<DistanceMapParam> distanceMapParamList  =JkSketchServiceImpl.getListFromJsonStr(start.getDistanceJson());
                    DistanceMapParam param = JkSketchServiceImpl.getParamByCustomerIds( end.getId(),distanceMapParamList);
                    if(param!=null && param.getDistance()!=0){//如果之前已经获取过
                        tt.setDistance(param.getDistance());
                    }else{
                        tt.setDistance(DistanceCalculator.calculateDistanceDecinal(tt.getStartLatitude(),tt.getStartLogitude(),tt.getEndLatitude(),tt.getEndLogitude()));
                    }*/
                }
                tt.setLocation(allList.get(i).getLocation());
                tt.setName(allList.get(i).getName());
                if(StringUtils.isBlank(tt.getSteps())){
                    tt.setSteps(start.getLongitude()+","+end.getLatitude()+";"+end.getLongitude()+","+end.getLatitude());
                }
                list.add(tt);
            }
        }
        return list;
    }
    public List<JkCustomerNavigation>  allMapListOld(JkSketchCustomer jkSketchCustomer) {
        List<JkCustomerNavigation> list = new ArrayList<>();
        MPJLambdaWrapper<JkSketchCustomer> queryWrapper = new MPJLambdaWrapper<>();
        jkSketchCustomer.setIsdeleted(Constants.ZERO);
        queryWrapper.selectAll(JkSketchCustomer.class )
                .selectAs(JkCustomer::getName,JkSketchCustomer::getName)
                .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode)
                .selectAs(JkCustomer::getStartDistance,JkSketchCustomer::getStartDistance)
                .selectAs(JkCustomer::getEndDistance,JkSketchCustomer::getEndDistance)
                .selectAs(JkCustomer::getLatitude,JkSketchCustomer::getLatitude)
                .selectAs(JkCustomer::getLongitude,JkSketchCustomer::getLongitude)
                .selectAs(JkCustomer::getStartSteps,JkSketchCustomer::getStartSteps)
                .selectAs(JkCustomer::getEndSteps,JkSketchCustomer::getEndSteps)
                .selectAs(JkCustomer::getLocation,JkSketchCustomer::getLocation)
                .leftJoin(JkCustomer.class,JkCustomer::getId,JkSketchCustomer::getCustomerId ) ;
        queryWrapper.eq( JkSketchCustomer::getSketchLineId,jkSketchCustomer.getSketchLineId())
                    .eq( JkSketchCustomer::getIsdeleted,Constants.ZERO);
        BigDecimal cLatitude =new BigDecimal(0);
        BigDecimal cLongitude =new BigDecimal(0);
        String comLocation = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_LOCATION).getCode();
        try {
            String[] ss = comLocation.split(",");
            cLongitude = new BigDecimal(ss[0]);
            cLatitude =  new BigDecimal(ss[1]);
        }catch (Exception e){
        }
        List<JkSketchCustomer> allList =  jkSketchCustomerMapper.selectJoinList(JkSketchCustomer.class,queryWrapper);
        if(allList !=null && allList.size()>0){
            JkCustomerNavigation startmodel = new JkCustomerNavigation();
            startmodel.setStartId(-1);
            startmodel.setName("园区");
            startmodel.setStartLatitude(cLatitude);
            startmodel.setStartLogitude(cLongitude);
            startmodel.setEndLatitude(allList.get(0).getLatitude());
            startmodel.setEndLogitude(allList.get(0).getLongitude());
            startmodel.setDistance(allList.get(0).getStartDistance());
            startmodel.setSteps(allList.get(0).getStartSteps());
            if(StringUtils.isBlank(startmodel.getSteps())){
                // (BigDecimal lat1, BigDecimal lon1, BigDecimal lat2, BigDecimal lon2)
@@ -181,13 +281,15 @@
                    tt.setStartLogitude(start.getLongitude());
                    tt.setEndLatitude(end.getLatitude());
                    tt.setEndLogitude(end.getLongitude());
                    List<DistanceMapParam> distanceMapParamList  =JkSketchServiceImpl.getListFromJsonStr(start.getDistanceJson());
                    tt.setDistance(DistanceCalculator.calculateDistanceDecinal(tt.getStartLatitude(),tt.getStartLogitude(),tt.getEndLatitude(),tt.getEndLogitude()));
                    //  //====标记==忽略交通规划距离=====
                   /* List<DistanceMapParam> distanceMapParamList  =JkSketchServiceImpl.getListFromJsonStr(start.getDistanceJson());
                    DistanceMapParam param = JkSketchServiceImpl.getParamByCustomerIds( end.getId(),distanceMapParamList);
                    if(param!=null && param.getDistance()!=0){//如果之前已经获取过
                        tt.setDistance(param.getDistance());
                    }else{
                        tt.setDistance(DistanceCalculator.calculateDistanceDecinal(tt.getStartLatitude(),tt.getStartLogitude(),tt.getEndLatitude(),tt.getEndLogitude()));
                    }
                    }*/
                }
                tt.setLocation(allList.get(i).getLocation());
                tt.setName(allList.get(i).getName());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
@@ -246,10 +246,13 @@
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路已被优化,已无法计算原始路线路程数");
        }
        checkJketchCustomerLocation(model,true);
        model.setEditDate(new Date());
        model.setDistance(model.getOriginDistance());
        jkSketchMapper.updateById(model);
        return model;
        JkSketch update = new JkSketch();
        update.setId(model.getId());
        update.setEditDate(new Date());
        update.setDistance(model.getOriginDistance());
        update.setOriginDistance(model.getOriginDistance());
        jkSketchMapper.updateById(update);
        return update;
    }
    @Override
@@ -641,7 +644,7 @@
            queryWrapper.selectAll(JkSketchCustomer.class )
                    .selectAs(JkCustomer::getName,JkSketchCustomer::getName)
                    .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode)
                    .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson)
//                    .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson)
                    .selectAs(JkCustomer::getLongitude,JkSketchCustomer::getLongitude)
                    .selectAs(JkCustomer::getLatitude,JkSketchCustomer::getLatitude)
                    .selectAs(JkCustomer::getStartDistance,JkSketchCustomer::getStartDistance)
@@ -766,7 +769,7 @@
            queryWrapper.selectAll(JkSketchCustomer.class )
                    .selectAs(JkCustomer::getName,JkSketchCustomer::getName)
                    .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode)
                    .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson)
//                    .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson)
                    .selectAs(JkCustomer::getLongitude,JkSketchCustomer::getLongitude)
                    .selectAs(JkCustomer::getLatitude,JkSketchCustomer::getLatitude)
                    .selectAs(JkCustomer::getStartDistance,JkSketchCustomer::getStartDistance)
@@ -873,7 +876,7 @@
        }
        for(JkSketchCustomer c : customerList){
            List<DistanceMapParam> tmpList = new ArrayList<>();
            List<DistanceMapParam> distanceMapParamList  = getListFromJsonStr(c.getDistanceJson());
//            List<DistanceMapParam> distanceMapParamList  = getListFromJsonStr(c.getDistanceJson());
            DistanceMapParam t0 = new DistanceMapParam();
            t0.setId(-2);//表示返回园区
            t0.setDistance(Constants.formatLongNum(c.getStartDistance()) );
@@ -883,10 +886,11 @@
                DistanceMapParam t = new DistanceMapParam();
                t.setId(cm.getCustomerId());
                t.setDistance(0);
                DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList);
                t.setDistance(DistanceCalculator.calculateDistanceDecinal(cm.getLatitude(),cm.getLongitude(),c.getLatitude(),c.getLongitude()));
               /* DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList);
                if(param!=null){//如果之前已经获取过
                    t = param;
                }
                }*/
                tmpList.add(t);
            }
            DistanceMapParam tt = new DistanceMapParam();
@@ -912,38 +916,44 @@
        }
        for(JkSketchCustomer c : customerList){
            List<DistanceMapParam> tmpList = new ArrayList<>();
            List<DistanceMapParam> distanceMapParamList  = getListFromJsonStr(c.getDistanceJson());
            //====标记==忽略交通规划距离=====
//            List<DistanceMapParam> distanceMapParamList  = getListFromJsonStr(c.getDistanceJson());
            DistanceMapParam t0 = new DistanceMapParam();
            t0.setId(-2);//表示返回园区
            t0.setDistance(Constants.formatLongNum(c.getStartDistance()) );
            t0.setId(-2);//
            t0.setDistance(DistanceCalculator.calculateDistanceDecinal(cLatitude,cLongitude,c.getLatitude(),c.getLongitude()));
            //====标记==忽略交通规划距离=====
          /*  t0.setDistance(Constants.formatLongNum(c.getStartDistance()) );
            if(Constants.formatLongNum(c.getStartDistance()) <= 0){
                //园区前往该客户的距离,如果之前未获取过
                t0.setDistance(DistanceCalculator.calculateDistanceDecinal(cLatitude,cLongitude,c.getLatitude(),c.getLongitude()));
//                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"交通规划尚未完成,不满足优化条件!");
            }
            }*/
            tmpList.add(t0);
            for(JkSketchCustomer cm : customerList){
                //客户和客户之间的距离信息
                DistanceMapParam t = new DistanceMapParam();
                t.setId(cm.getCustomerId());
                 DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList);
                t.setDistance(DistanceCalculator.calculateDistanceDecinal(cm.getLatitude(),cm.getLongitude(),c.getLatitude(),c.getLongitude()));
                //====标记==忽略交通规划距离=====
              /*  DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList);
                if(param!=null && t.getDistance()>0){//如果之前已经获取过
                    t = param;
                }else{
                    //如果未规划,按照直线距离
                    t.setDistance(DistanceCalculator.calculateDistanceDecinal(cm.getLatitude(),cm.getLongitude(),c.getLatitude(),c.getLongitude()));
//                    throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"与客户:"+cm.getName()+"简交通规划尚未完成,不满足路程计算条件!");
                }
                }*/
                tmpList.add(t);
            }
            DistanceMapParam tt = new DistanceMapParam();
            tt.setId(-2);//表示返回园区
            tt.setDistance(Constants.formatLongNum(c.getEndDistance()));
            tt.setDistance(DistanceCalculator.calculateDistanceDecinal(cLatitude,cLongitude,c.getLatitude(),c.getLongitude()));
            //====标记==忽略交通规划距离=====
           /* tt.setDistance(Constants.formatLongNum(c.getEndDistance()));
            if(Constants.formatLongNum(c.getEndDistance()) <= 0){
                //该客户返回园区的距离 ,如果之前未获取过
                tt.setDistance(DistanceCalculator.calculateDistanceDecinal(cLatitude,cLongitude,c.getLatitude(),c.getLongitude()));
//                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"与起点交通规划尚未完成,不满足路程计算条件!");
            }
            }*/
            tmpList.add(tt);
            c.setDistanceMapParamList(tmpList);
        }
@@ -955,32 +965,35 @@
                int index =0;
                for(JkSketchCustomer c : customers){
                    if(index ==0){
                        if(Constants.formatLongNum(c.getStartDistance()) >0){
                        lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),cLatitude,cLongitude);
                        //====标记==忽略交通规划距离=====
                      /*  if(Constants.formatLongNum(c.getStartDistance()) >0){
                            lineDistance+= Constants.formatLongNum(c.getStartDistance());
                        }else{
                            lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),cLatitude,cLongitude);
                        }
                        }*/
                    }
                    if(index == customers.size()-1){
                        if(Constants.formatLongNum(c.getEndDistance())>0){
                        lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),cLatitude,cLongitude);
                        //====标记==忽略交通规划距离=====
                     /*   if(Constants.formatLongNum(c.getEndDistance())>0){
                            lineDistance+= Constants.formatLongNum(c.getEndDistance());
                        }else{
                            lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),cLatitude,cLongitude);
                        }
                        }*/
                        break;
                    }
                    JkSketchCustomer end = customers.get(index+1);
                    DistanceMapParam param1 = getParamByCustomerIds(end.getCustomerId(),getListFromJsonStr(c.getDistanceJson()));
                    lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),end.getLatitude(),end.getLongitude());
                    //====标记==忽略交通规划距离=====
                 /*   DistanceMapParam param1 = getParamByCustomerIds(end.getCustomerId(),getListFromJsonStr(c.getDistanceJson()));
                    if(param1 !=null && param1.getDistance()>0){
                        lineDistance += param1.getDistance();
                    }else{
                        lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),end.getLatitude(),end.getLongitude());
                    }
                    index++;
                  /*  for(JkSketchCustomer cm : customers){
                        DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),getListFromJsonStr(c.getDistanceJson()));
                        lineDistance += param.getDistance();
                    }*/
                    index++;
                }
                if(updateLineDistance && Constants.equalsInteger(model.getStatus(),Constants.ZERO) ){
                    line.setDistance(lineDistance);
@@ -1242,7 +1255,7 @@
                .selectAs(JkCustomer::getName,JkSketchCustomer::getName)
                .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode)
                .selectAs(JkCustomer::getDistanceStatus,JkSketchCustomer::getDistanceStatus)
                .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson)
//                .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson)
                .selectAs(JkCustomer::getLongitude,JkSketchCustomer::getLongitude)
                .selectAs(JkCustomer::getLatitude,JkSketchCustomer::getLatitude)
                .selectAs(JkCustomer::getStartDistance,JkSketchCustomer::getStartDistance)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -509,17 +509,16 @@
                    if(Objects.nonNull(warningConfig)){
                        List<Integer> ruleIdList =  impl.processWarnFront(warningConfig);
                        Boolean falg = true;
                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ruleIdList)){
                            for (Integer ruleId:ruleIdList) {
                            Set<Integer> ruleIdSet = new HashSet<>(ruleIdList);
                            for (Integer ruleId:ruleIdSet) {
                                WarningRule warningRule = warningRuleMapper.selectById(ruleId);
                                if (Objects.isNull(warningRule)) {
                                    break;
                                }
                                List<Member> memberList = impl.getWarningRuleMemberList(warningRule);
                                if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(memberList)) {
                                    break;
                                }
                                try {
                                    WarningPush warningPush = new WarningPush();
                                    warningPush.setCreateDate(new Date());
@@ -532,15 +531,13 @@
                                    warningPush.setPushType(Constants.ZERO);
                                    //TODO æ ¹æ®å…·ä½“数据对比获取
                                    warningPush.setRegion( "未知位置");
                                    warningPush.setMemberIds(
                                            StringUtils.join(memberList.stream().map(i -> i.getId()).collect(Collectors.toList()), ",")
                                    );
                                    warningPush.setMemberIds(
                                            StringUtils.join(memberList.stream().map(i -> i.getId()).collect(Collectors.toList()), ",")
                                    );
                                    warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i -> i.getName()).collect(Collectors.toList()), ",")
                                    );
                                    if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(memberList)) {
                                        warningPush.setMemberIds(
                                                StringUtils.join(memberList.stream().map(i -> i.getId()).collect(Collectors.toList()), ",")
                                        );
                                        warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i -> i.getName()).collect(Collectors.toList()), ",")
                                        );
                                    }
                                    if(Constants.equalsInteger(warningRule.getMemberNotice(),Constants.ONE)){
                                        //            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
                                        //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -45,8 +45,10 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -95,6 +97,9 @@
    private PlatformDeviceMapper platformDeviceMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private RedisTemplate<String,Object> stringRedisTemplate;
    @Value("${debug_model}")
    private Boolean isDebug;
    /**
@@ -216,6 +221,32 @@
     */
    @Override
    public List<PageRegionInfoResponse> getRegionTree(CarmeraListVO req){
        List<PageRegionInfoResponse> allList =null;
        if(req.getRefresh() == 0){
            //默认取缓存数据
            allList =   (List<PageRegionInfoResponse>) stringRedisTemplate.opsForValue().get(Constants.RedisKeys.HK_REGIONS_TREE);
        }
        if(allList!=null && allList.size()>0){
            return allList;
        }
        allList =  getAllRegionList();
        if(allList==null && allList.size()==0){
            return  allList;
        }
        if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){
            initReginCameralList(allList,req );//获取全部监控点数据
        }else  if(Constants.equalsInteger(req.getWithCameras(),Constants.TWO)){
            initReginCameralList(allList,req );//获取全部监控点数据
            initReginFireDeviveList(allList, req);//获取全部监控点数据
            initReginSensorList(allList,req);//获取全部监控点数据
        }
        List<PageRegionInfoResponse> data = new RegionTreeVO(allList).buildTree();
        //加入缓存
        stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_REGIONS_TREE,data);
        return  data;
    }
    private List<PageRegionInfoResponse> getAllRegionList() {
        List<PageRegionInfoResponse> allList = new ArrayList<>();
        boolean hasNext = true;
        int curTotal = 0;
@@ -242,16 +273,12 @@
            }
            curPage++;
        }
        if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){
            initReginCameralList(allList,req.getName());//获取全部监控点数据
        }
        List<PageRegionInfoResponse> data = new RegionTreeVO(allList).buildTree();
        return  data;
        return allList;
    }
    private void initReginCameralList(List<PageRegionInfoResponse> allList,String name) {
        CarmeraListVO re = new CarmeraListVO();
        re.setName(name);
        List<CarmeraListVO> carmeraListVOList = cameraList(re);
    private void initReginFireDeviveList(List<PageRegionInfoResponse> allList,CarmeraListVO req) {
        String name =req.getName();
        List<CarmeraListVO> carmeraListVOList = fireDeviceList();
        if(carmeraListVOList!=null && carmeraListVOList.size()>0){
            for(PageRegionInfoResponse p : allList){
                for(CarmeraListVO c : carmeraListVOList){
@@ -265,6 +292,78 @@
                }
            }
        }
    }
    private void initReginSensorList(List<PageRegionInfoResponse> allList,CarmeraListVO req) {
        String name =req.getName();
        List<CarmeraListVO> carmeraListVOList = sensorList();
        if(carmeraListVOList!=null && carmeraListVOList.size()>0){
            for(PageRegionInfoResponse p : allList){
                for(CarmeraListVO c : carmeraListVOList){
                    if(StringUtils.equals(p.getIndexCode(),c.getReginCode())
                            && (StringUtils.contains(c.getName(),name) ||StringUtils.isBlank(name))){
                        if(p.getCarmeraList()==null){
                            p.setCarmeraList(new ArrayList<>());
                        }
                        p.getCarmeraList().add(c);
                    }
                }
            }
        }
    }
    @PostConstruct
    public void cacheRegionAndDeviceData(){
        log.error("===============缓存海康平台区域设备信息======开始============");
        try {
            CarmeraListVO param  =new CarmeraListVO();
            param.setWithCameras(2);
            List<PageRegionInfoResponse>  resultTree = getRegionTree(param);
            List<PageRegionInfoResponse>  result = getAllRegionList();
            List<CarmeraListVO> carmeraListVOList = initAllReginCameralList(result);
            List<CarmeraListVO> sensorList = sensorList();
            List<CarmeraListVO> fireDeviceList = fireDeviceList();
            stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_REGIONS_TREE,resultTree);
            stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_REGIONS,result);//平铺区域列表
            stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_CAMERAS,carmeraListVOList);//所有监控点数据
            stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_FIRE_DEVICE,fireDeviceList);//所有消防设备数据
            stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_SENSOR,sensorList);//所有传感器
            log.error("===============缓存海康平台区域设备信息======成功============");
        }catch (Exception e){
            log.error("===============缓存海康平台区域设备信息失败==================");
        }
    }
    private void initReginCameralList(List<PageRegionInfoResponse> allList,CarmeraListVO req) {
        String name = req.getName();
        CarmeraListVO re = new CarmeraListVO();
        re.setName(name);
        List<CarmeraListVO> carmeraListVOList = cameraList(re);
        if(carmeraListVOList!=null && carmeraListVOList.size()>0){
            for(PageRegionInfoResponse p : allList){
                for(CarmeraListVO c : carmeraListVOList){
                    if(StringUtils.equals(p.getIndexCode(),c.getReginCode())
                            && (StringUtils.contains(c.getName(),name) ||StringUtils.isBlank(name))){
                        if(p.getCarmeraList()==null){
                            p.setCarmeraList(new ArrayList<>());
                        }
                        c.setRegionName(p.getName());
                        p.getCarmeraList().add(c);
                    }
                }
            }
        }
    }
    private  List<CarmeraListVO> initAllReginCameralList(List<PageRegionInfoResponse> allList ) {
        CarmeraListVO re = new CarmeraListVO();
        List<CarmeraListVO> carmeraListVOList = cameraList(re);
        if(carmeraListVOList!=null && carmeraListVOList.size()>0){
            for(PageRegionInfoResponse p : allList){
                for(CarmeraListVO c : carmeraListVOList){
                    if(StringUtils.equals(p.getIndexCode(),c.getReginCode())){
                        c.setRegionName(p.getName());
                    }
                }
            }
        }
        return  carmeraListVOList;
    }
    /**
     * èŽ·å–åŒºåŸŸæ ‘å½¢ç»“æž„æ•°æ®
@@ -299,7 +398,7 @@
            curPage++;
        }
        if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){
            initReginCameralList(allList,req.getName());//获取全部监控点数据
            initReginCameralList(allList,req);//获取全部监控点数据
        }
        return  allList;
    }
@@ -346,6 +445,114 @@
        }
        return  data;
    }
    public  List<CarmeraListVO> sensorList(){
        List<SensorStatusListResponse> allList = new ArrayList<>();
        boolean hasNext = true;
        int curTotal = 0;
        int curPage = 1;
        while (hasNext){
            //分页遍历循环查询所有门禁设备数据
            SensorStatusListRequest param = new SensorStatusListRequest();
            param.setRegionIndexCode("-1");
            param.setIncludeSubNode(1);
            param.setPageSize(100);
            param.setPageNo(curPage);
            BaseResponse<BaseListPageResponse<SensorStatusListResponse>> response = HKService.sensorStatusSearch(param);
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
            BaseListPageResponse<SensorStatusListResponse> r = response.getData();
            curTotal += 100;
            if(curTotal >= r.getTotal()){
                hasNext = false;
            }
            if(r.getList() == null || r.getList().size()==0){
                hasNext =false;
            }else{
                allList.addAll(r.getList());
            }
            curPage++;
        }
        List<CarmeraListVO> data = new ArrayList<>();
        for(SensorStatusListResponse p : allList){
                CarmeraListVO t = new CarmeraListVO();
                t.setIndexCode(p.getIndexCode());
                t.setReginCode(p.getRegionIndexCode());
                t.setName(p.getCn());
                t.setStatus(p.getUnitStatus());
                t.setRegionName(p.getRegionName());
                 //0:未注册 1:正常 2: ä¿®å¤ä¸­ 3:异常状态
                if(t.getStatus()!=null && t.getStatus() == 0){
                    t.setStatusName("未注册");
                }
                if(t.getStatus()!=null && t.getStatus() == 1){
                    t.setStatusName("正常");
                }
                if(t.getStatus()!=null && t.getStatus() == 2){
                    t.setStatusName("修复中");
                }
                if(t.getStatus()!=null && t.getStatus() == 3){
                    t.setStatusName("异常状态");
                }
                data.add(t);
        }
        return  data;
    }
    public  List<CarmeraListVO> fireDeviceList(){
        List<FireDeviceStatusListResponse> allList = new ArrayList<>();
        boolean hasNext = true;
        int curTotal = 0;
        int curPage = 1;
        while (hasNext){
            //分页遍历循环查询所有门禁设备数据
            FireDeviceStatuslListRequest param = new FireDeviceStatuslListRequest();
            param.setRegionIndexCode("-1");
            param.setPageSize(100);
            param.setIncludeSubNode(1);
            param.setPageNo(curPage);
            BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>> response = HKService.fireDeviceStatusSearch(param);
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
            BaseListPageResponse<FireDeviceStatusListResponse> r = response.getData();
            curTotal += 100;
            if(curTotal >= r.getTotal()){
                hasNext = false;
            }
            if(r.getList() == null || r.getList().size()==0){
                hasNext =false;
            }else{
                allList.addAll(r.getList());
            }
            curPage++;
        }
        List<CarmeraListVO> data = new ArrayList<>();
        for(FireDeviceStatusListResponse p : allList){
                CarmeraListVO t = new CarmeraListVO();
                t.setIndexCode(p.getIndexCode());
                t.setReginCode(p.getRegionIndexCode());
                t.setName(p.getCn());
                t.setStatus(p.getUnitStatus());
                t.setRegionName(p.getRegionName());
                 //0:未注册 1:正常 2: ä¿®å¤ä¸­ 3:异常状态
                if(t.getStatus()!=null && t.getStatus() == 0){
                    t.setStatusName("未注册");
                }
                if(t.getStatus()!=null && t.getStatus() == 1){
                    t.setStatusName("正常");
                }
                if(t.getStatus()!=null && t.getStatus() == 2){
                    t.setStatusName("修复中");
                }
                if(t.getStatus()!=null && t.getStatus() == 3){
                    t.setStatusName("异常状态");
                }
                data.add(t);
        }
        return  data;
    }
    @Override
    public    List<PageFireChannelInfoResponse> fireChannelList(){
        List<PageFireChannelInfoResponse> allList = new ArrayList<>();
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java
@@ -22,7 +22,7 @@
    void cacheRegionAndDeviceData();
    /**
     * èŽ·å–åŒºåŸŸæ ‘å½¢ç»“æž„æ•°æ®
     * @return