doum
6 小时以前 18ab70b5f19fce88ba91c08689f2f39bb9784ecf
最新版本541200007
已添加1个文件
已修改12个文件
346 ■■■■■ 文件已修改
admin/src/views/business/deviceBroadcast.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceBroadcastChannel.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/ClusterCustomKMeans.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceBroadcast.vue
@@ -23,10 +23,10 @@
            >
              <el-table-column label="序号"  width="55" fixed><template slot-scope="scope" >{{scope.$index+1}}</template></el-table-column>
                <el-table-column prop="name" label="名称"></el-table-column>
                <el-table-column prop="hkId" label="广播点唯一标识" min-width="200"></el-table-column>
                <el-table-column prop="channelInfo" label="广播点类型"></el-table-column>
                <el-table-column prop="channelNo" label="通道号"></el-table-column>
                <el-table-column prop="regionName" label="区域名称"></el-table-column>
                <el-table-column prop="hkId" label="唯一标识" min-width="200"></el-table-column>
                <el-table-column prop="channelInfo" label="类型"></el-table-column>
                <el-table-column prop="channelNo" label="设备号"></el-table-column>
                <el-table-column prop="regionName" label="区域编码"></el-table-column>
                <el-table-column prop="hkDate" label="同步时间"></el-table-column>
            </el-table>
            <pagination
@@ -37,7 +37,7 @@
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
<!--        <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>-->
    <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>
    </TableLayout>
</template>
@@ -59,7 +59,7 @@
        regionPathName: '',
        isEntrance: '',
        online: '',
        type: 3
        type: 4
      },
      options: []
    }
admin/src/views/business/deviceBroadcastChannel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
<template>
    <TableLayout :permissions="['business:device:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm"  slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item title="名称" prop="name">
                <el-input v-model="searchForm.name" placeholder="请输入名称" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar">
                <li><el-button type="primary" @click="synchronousData">同步</el-button></li>
            </ul>
            <el-table
                :height="tableHeightNew"
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
              <el-table-column label="序号"  width="55" fixed><template slot-scope="scope" >{{scope.$index+1}}</template></el-table-column>
                <el-table-column prop="name" label="名称"></el-table-column>
                <el-table-column prop="hkId" label="广播点唯一标识" min-width="200"></el-table-column>
                <el-table-column prop="channelInfo" label="广播点类型"></el-table-column>
                <el-table-column prop="channelNo" label="通道号"></el-table-column>
                <el-table-column prop="regionName" label="区域名称"></el-table-column>
                <el-table-column prop="hkDate" label="同步时间"></el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
<!--        <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>-->
    </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaDeviceWindow from '@/components/business/OperaDeviceWindow'
import { syncDevices, updateEntranceById } from '@/api/business/device'
export default {
  name: 'Device',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaDeviceWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        doorName: '',
        regionPathName: '',
        isEntrance: '',
        online: '',
        type: 3
      },
      options: []
    }
  },
  created () {
    this.config({
      module: '设备信息表',
      api: '/business/device',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    changeManufature(e, row) {
      updateEntranceById({
        id: row.id,
        isEntrance: e
      })
    },
    synchronousData () {
      this.$dialog.actionConfirm('操作确认提醒', '您确认同步全部信息吗?')
        .then(() => {
          this.isWorking.delete = true
          syncDevices({type: 3})
            .then(res => {
              this.$tip.apiSuccess(res || '同步成功')
              this.search()
            })
            .catch(e => {
             //  this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.delete = false
            })
        })
        .catch(() => {})
    }
  }
}
</script>
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -58,7 +58,7 @@
    public static final String SIGN_IN_ATTENTION ="SIGN_IN_ATTENTION" ;
    public static final String SIGN_IN_QRCODE_PREFIX ="SIGN_IN_QRCODE_PREFIX" ;
    public static final String JK_PLAN_MAX_CLUSTER ="JK_PLAN_MAX_CLUSTER" ;
    public static final String JK_PLAN_DISTANCECLUSTER ="JK_PLAN_DISTANCECLUSTER" ;
    public static final String JK_PLAN_DISTANCE_CLUSTER ="JK_PLAN_DISTANCE_CLUSTER" ;
    /**
     * æ“ä½œç±»åž‹ï¼Œç”¨äºŽåšæŽ¥å£éªŒè¯åˆ†ç»„
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -118,6 +118,9 @@
        }else if(Constants.equalsInteger(param.getType(),Constants.THREE)){
            //同步广播
            result = hkSyncDeviceService.syncHkBroadcast(param);
        }else if(Constants.equalsInteger(param.getType(),Constants.FOUR)){
            //同步广播
            result = hkSyncDeviceService.syncHkBroadcastDevice(param);
        }
        return ApiResponse.success(result);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1424,17 +1424,17 @@
     *分页获取广播点(分页)
     * @return
     */
    public  static  BaseResponse<BaseListPageResponse<FetchAudioChannelInfoResponse>>   fetchAudioDevice(FetchAudioChannelRequest param){
        log.info("【海康获取分页获取广播点】================开始===="+JSONObject.toJSONString(param));
    public  static  BaseResponse<BaseListPageResponse<FetchAudioDeviceInfoResponse>>   fetchAudioDevice(FetchAudioDeviceRequest param){
        log.info("【海康获取分页获取广播设备】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.fetchAudioDevice(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse<BaseListPageResponse<FetchAudioChannelInfoResponse>> >(){};
            BaseResponse<BaseListPageResponse<FetchAudioChannelInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康获取分页获取广播点");
                    new TypeReference< BaseResponse<BaseListPageResponse<FetchAudioDeviceInfoResponse>> >(){};
            BaseResponse<BaseListPageResponse<FetchAudioDeviceInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康获取分页获取广播设备");
            return  result;
        }catch (Exception e){
            log.error("【海康获取分页获取广播点】================失败====:\n"+ e.getMessage());
            log.error("【海康获取分页获取广播设备】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/ClusterCustomKMeans.java
@@ -1,9 +1,7 @@
package com.doumee.core.tsp;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import com.doumee.core.utils.Constants;
import com.doumee.dao.admin.request.SketchCateModel;
@@ -78,6 +76,7 @@
                    cList.add(doublePointNew.getCustomer());
                    sketchCateModel.setTotalNum(Constants.formatBigdecimal(sketchCateModel.getTotalNum()).add(Constants.formatBigdecimal(doublePointNew.getCustomer().getTotalNum())));
                }
                sortPointByCenterPoint(cluster,cList);
                sketchCateModel.setCustomerList(cList);
                sketchCateModel.setStartPoint(cList.get(0));
                sketchCateModel.setTotalCustomer(cList.size());
@@ -86,6 +85,21 @@
            return list;
        }
    private void sortPointByCenterPoint(CentroidCluster<DoublePointNew> cluster, List<JkSketchCustomer> cList) {
        double clat = Constants.formatBigdecimal(cList.get(0).getLatitude()).doubleValue();
        double clong = Constants.formatBigdecimal(cList.get(0).getLongitude()).doubleValue();
        if(cluster!=null || cluster.getCenter() != null || cluster.getCenter().getPoint() != null && cluster.getCenter().getPoint().length>=2){
            clong = cluster.getCenter().getPoint()[1];
            clat = cluster.getCenter().getPoint()[0];
        }
        for(JkSketchCustomer c : cList){
            double latDiff = Constants.formatBigdecimal(c.getLatitude()).doubleValue() - clat;
            double lonDiff = Constants.formatBigdecimal(c.getLongitude()).doubleValue() - clong;
            c.setDistanceCenter(Math.sqrt(latDiff * latDiff + lonDiff * lonDiff)); // æ¬§æ°è·ç¦»
        }
        Collections.sort(cList, (p1, p2) -> Double.compare(p1.getDistanceCenter(), p2.getDistanceCenter()));
    }
    public  class  DoublePointNew extends  DoublePoint{
        private JkSketchCustomer customer;
server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java
@@ -134,12 +134,13 @@
        // æ‰§è¡Œç®—法
        Assignment solution = routing.solveWithParameters(searchParameters);
        if(solution ==null){
            log.error("规划结束=============未找到最优路线!" );
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未找到最优路线!");
        }
        // æ‰“印路线
        resultSolution(data, routing, manager, solution);
        long end =System.currentTimeMillis();
       log.error("规划结束=============耗时=========="+(end -start)+"(ms)"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
         log.error("规划结束=============耗时=========="+(end -start)+"(ms)"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
    }
    static void resultSolution( DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) {
        long maxRouteDistance = 0;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
@@ -70,8 +70,8 @@
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @ApiModelProperty(value = "类型 0门禁 1车库 2LED 3广播", example = "1")
    @ExcelColumn(name="类型 0门禁 1车库 2LED 3广播")
    @ApiModelProperty(value = "类型 0门禁 1车库 2LED 3广播点 4广播设备", example = "1")
    @ExcelColumn(name="类型 0门禁 1车库 2LED 3广播点 4广播设备")
    private Integer type;
    @ApiModelProperty(value = "是否园区出入口 0不是 1是", example = "1")
    @ExcelColumn(name="是否园区出入口 0不是 1是")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java
@@ -143,6 +143,9 @@
    //@ExcelColumn(name="状态 0正常 ç¦ç”¨")
    @TableField(exist = false)
    private String  endSteps;
    @ApiModelProperty(value = "距离中心点距离", example = "1")
    @TableField(exist = false)
    private double  distanceCenter;
    @ApiModelProperty(value = "同班组间客户位置距离数组,[{a:12,b:100},{a:13,b:200},...],a:客户编码,b:与客户a之间的距离")
    @TableField(exist = false)
    private List<DistanceMapParam> distanceMapParamList;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -97,6 +97,7 @@
    String syncHkLed(Device param);
    String syncHkBroadcast(Device param);
    String syncHkBroadcastDevice(Device param);
    String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response);
    String dealPlatformStatusEvent(EventPlatformRequest param, HttpServletResponse response);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
@@ -500,7 +500,6 @@
        c.setNeedList(Constants.equalsInteger(model.getForceUpdate(),0)?needList:customerList);
        return  c;
    }
    /**
     * å¼€å§‹å¼‚步执行线路优化任务
     * @param model
@@ -512,7 +511,7 @@
            int maxnum =100,distance = 500;
            try {
                maxnum = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.JK_PLAN_MAX_CLUSTER).getCode());
                distance = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.JK_PLAN_DISTANCECLUSTER).getCode());
                distance = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.JK_PLAN_DISTANCE_CLUSTER).getCode());
            }catch (Exception e){
            }
            List<JkSketchCustomer> allCustomerList = model.getCustomerList();
@@ -547,13 +546,18 @@
            //构造优化数据模型
            dataModel.initDataInfo(vehicleNumber1,demands1,demands2,vehicleCapacities1,distanceMatrix1,vehicleMaxNodes);
            TspSolver.startSearch(dataModel);
            JkSketch nowModel = jkSketchMapper.selectById(model.getId());
            if(StringUtils.equals(model.getJobId(), nowModel.getJobId())){
               log.error( "优化结果已失效,非最近一次操作!");
               return;
            }
            dealSearchSolution(model,  customerList,dataModel);
        }catch (Exception e){
            e.printStackTrace();
            jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda()
                    .eq(JkSketch::getId,model.getId() )
                    .eq(JkSketch::getJobId,model.getJobId() )
                    .set(JkSketch::getPlanLineInfo,"最近一次线路优化失败!")
                    .set(JkSketch::getPlanLineInfo,"最近一次线路优化失败!"+e.getMessage())
                    .set(JkSketch::getStatus,Constants.THREE)
                    .set(JkSketch::getPlanLineEndDate,new Date()));
        }
@@ -654,7 +658,7 @@
            int maxnum =100,distance = 500;
            try {
                maxnum = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.JK_PLAN_MAX_CLUSTER).getCode());
                distance = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.JK_PLAN_DISTANCECLUSTER).getCode());
                distance = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.JK_PLAN_DISTANCE_CLUSTER).getCode());
            }catch (Exception e){
            }
            int totalNum = 0;
@@ -700,6 +704,11 @@
                if(dataModel.getSolutions()==null || dataModel.getSolutions().size()==0){
                    throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"线路【"+line.getLineName()+"】调整失败 ï¼ŒæœªèŽ·å¾—æœ€ä¼˜äº¤é€šè§„åˆ’æ–¹æ¡ˆï¼");
                }
                JkSketch nowModel = jkSketchMapper.selectById(model.getId());
                if(StringUtils.equals(model.getJobId(), nowModel.getJobId())){
                    throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"线路【"+line.getLineName()+"】调整失败 ï¼Œéžæœ€è¿‘一次操作!");
                }
                TspSolverSolutions so = dataModel.getSolutions().get(0);
                List<Integer> routes = so.getRouteIndex();
                totalDistance += so.getDistance();
@@ -738,7 +747,7 @@
                jkSketchCustomerMapper.updateById(allList);
            }
            jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda()
//                    .eq(JkSketch::getId,model.getId() )
                    .eq(JkSketch::getId,model.getId() )
                    .eq(JkSketch::getJobId,model.getJobId() )
                    .set(success,JkSketch::getDistance,totalDistance)
                    .set(JkSketch::getPlanLineInfo,success?"最近一次线路调整成功":"最近一次线路调整失败!")
@@ -946,14 +955,14 @@
                int index =0;
                for(JkSketchCustomer c : customers){
                    if(index ==0){
                        if(c.getStartDistance() >0){
                        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(c.getEndDistance() >0){
                        if(Constants.formatLongNum(c.getEndDistance())>0){
                            lineDistance+= Constants.formatLongNum(c.getEndDistance());
                        }else{
                            lineDistance += DistanceCalculator.calculateDistanceDecinal(c.getLatitude(),c.getLongitude(),cLatitude,cLongitude);
@@ -1085,11 +1094,13 @@
                    .set(JkSketchLine::getIsdeleted,Constants.ONE)
                    .eq(JkSketchLine::getIsdeleted,Constants.ZERO)
                    .eq(JkSketchLine::getType,Constants.ONE)
                    .eq(JkSketchLine::getSketchId,model.getId())
                    .eq(JkSketchLine::getDateInfo,model.getDateInfo()));
            jkSketchCustomerMapper.update(null,new UpdateWrapper<JkSketchCustomer>().lambda()
                    .set(JkSketchCustomer::getIsdeleted,Constants.ONE)
                    .eq(JkSketchCustomer::getIsdeleted,Constants.ZERO)
                    .eq(JkSketchCustomer::getType,Constants.ONE)
                    .eq(JkSketchCustomer::getSketchId,model.getId())
                    .eq(JkSketchCustomer::getDateInfo,model.getDateInfo()));
            if(sketchLineList.size()>0){
                jkSketchLineMapper.insert(sketchLineList);
@@ -1107,7 +1118,7 @@
            }
            jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda()
                    .eq(JkSketch::getId,model.getId() )
                    .eq(JkSketch::getJobId,model.getJobId() )
//                    .eq(JkSketch::getJobId,model.getJobId() )
                    .set(JkSketch::getLineNum,sketchLineList.size() )
                    .set(JkSketch::getOptStatus,Constants.ONE)//已生成优化线路
                    .set(JkSketch::getDistance,totalDistance)
@@ -1117,7 +1128,7 @@
        }else{
            jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda()
                    .eq(JkSketch::getId,model.getId() )
                    .eq(JkSketch::getJobId,model.getJobId() )
//                    .eq(JkSketch::getJobId,model.getJobId() )
                    .set(JkSketch::getPlanLineInfo,"最近一次线路优化失败,未找到最优路线!")
                    .set(JkSketch::getStatus,Constants.THREE)
                    .set(JkSketch::getPlanLineEndDate,date));
@@ -1184,11 +1195,13 @@
                    .set(JkSketchLine::getIsdeleted,Constants.ONE)
                    .eq(JkSketchLine::getIsdeleted,Constants.ZERO)
                    .eq(JkSketchLine::getType,Constants.ONE)
                    .eq(JkSketchLine::getSketchId,model.getId())
                    .eq(JkSketchLine::getDateInfo,model.getDateInfo()));
            jkSketchCustomerMapper.update(null,new UpdateWrapper<JkSketchCustomer>().lambda()
                    .set(JkSketchCustomer::getIsdeleted,Constants.ONE)
                    .eq(JkSketchCustomer::getIsdeleted,Constants.ZERO)
                    .eq(JkSketchCustomer::getType,Constants.ONE)
                    .eq(JkSketchCustomer::getSketchId,model.getId())
                    .eq(JkSketchCustomer::getDateInfo,model.getDateInfo()));
            if(sketchLineList.size()>0){
                jkSketchLineMapper.insert(sketchLineList);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -84,6 +84,11 @@
        return null;
    }
    @Override
    public String syncHkBroadcastDevice(Device param){
        return null;
    }
    @Override
//    @Async
    public String syncPrivilege(PrivilegeGroupRequest param){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
@@ -197,6 +197,48 @@
            Constants.DEALING_HK_SYNCDEVICE =false;
        }
    }
    @Override
//    @Async
    public String syncHkBroadcastDevice(Device param){
        if(Constants.DEALING_HK_SYNCDEVICE){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ;
        }
        Constants.DEALING_HK_SYNCDEVICE =true;
        try {
            List<Device> deleteList = new ArrayList<>();
            List<Device> addList = new ArrayList<>();
            List<Device> editList = new ArrayList<>();
            Date date = new Date();
            //查询全部广播点设备数据
            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda()
                    .eq(Device::getType,Constants.FOUR));
            List<FetchAudioDeviceInfoResponse> allHkList = getAllBroadcastDeviceList();
            /**
             * èŽ·å–å¢žåˆ æ”¹æ•°æ®é›†åˆ
             */
            getBroadcastDeviceDataChangeList(allList,allHkList,addList,editList,deleteList,date);
            if(deleteList.size()>0){
                //逻辑删除
                for(Device d : deleteList){
                    deviceMapper.updateById(d);
                }
            }
            if(addList.size()>0){
                deviceMapper.insert(addList);
            }
            if(editList.size()>0){
                for(Device d : editList){
                    deviceMapper.updateById(d);
                }
            }
            return "同步数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条";
        }catch (Exception e){
            e.printStackTrace();
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步失败!");
        }finally {
            Constants.DEALING_HK_SYNCDEVICE =false;
        }
    }
    private void getBroadcastDataChangeList(List<Device> allList, List<FetchAudioChannelInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) {
        if(allHkList!=null && allHkList.size()>0){
@@ -218,6 +260,27 @@
        }
        //判断获取删除的门禁设备,逻辑删除
        getDeleteBroadcastList(allList,allHkList,deleteList,date);
    }
    private void getBroadcastDeviceDataChangeList(List<Device> allList, List<FetchAudioDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) {
        if(allHkList!=null && allHkList.size()>0){
            //获取海康全部门禁组数据
            for(FetchAudioDeviceInfoResponse device : allHkList){
                Device model = getExistedBroadcastDevice(device,allList);
                if(model !=null){
                    //如果已存在,则更新数据
                    model =  initBroadcastDeviceDataByHkData(model,device,date);
                    editList.add(model);
                }else{
                    //如果不存在,则新增数据
                    model = new Device();
                    model =  initBroadcastDeviceDataByHkData(model,device,date);
                    model.setIsEntrance(Constants.ZERO);
                    addList.add(model);
                }
            }
        }
        //判断获取删除的门禁设备,逻辑删除
        getDeleteBroadcastDeviceList(allList,allHkList,deleteList,date);
    }
    @Override
@@ -332,6 +395,39 @@
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
            BaseListPageResponse<FetchAudioChannelInfoResponse> r = response.getData();
            curTotal += 100;
            if(curTotal >= r.getTotal()){
                hasNext = false;
            }
            if(r.getList() == null || r.getList().size()==0){
                hasNext =false;
            }else{
                allDoorList.addAll(r.getList());
            }
            curPage++;
        }
        return  allDoorList;
    }
    /**
     * èŽ·å–å…¨éƒ¨å¹¿æ’­ç‚¹æ•°æ®
     * @return
     */
    public  List<FetchAudioDeviceInfoResponse>  getAllBroadcastDeviceList(){
        List<FetchAudioDeviceInfoResponse> allDoorList = new ArrayList<>();
        Date date = new Date();
        boolean hasNext = true;
        int curTotal = 0;
        int curPage = 1;
        while (hasNext){
            //分页遍历循环查询所有门禁设备数据
            FetchAudioDeviceRequest param = new FetchAudioDeviceRequest();
            param.setPageNo(curPage);
            param.setPageSize(100);
            BaseResponse<BaseListPageResponse<FetchAudioDeviceInfoResponse>>  response = HKService.fetchAudioDevice(param);
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
            BaseListPageResponse<FetchAudioDeviceInfoResponse> r = response.getData();
            curTotal += 100;
            if(curTotal >= r.getTotal()){
                hasNext = false;
@@ -463,6 +559,21 @@
        model.setResourceType(device.getAudioChannelType());
        model.setStatus(device.getState());
        model.setRegionName(device.getRegionName());
        return  model;
    }
    private Device initBroadcastDeviceDataByHkData(Device model, FetchAudioDeviceInfoResponse device, Date date) {
        model.setIsdeleted(Constants.ZERO);
        model.setHkDate(date);
        model.setHkId(device.getDeviceIndexCode());
        model.setName(device.getDeviceName());
        model.setHkStatus(Constants.ONE);
        model.setType(Constants.THREE);
        model.setChannelNo(device.getDeviceCode());
        model.setChannelInfo(device.getDeviceType());
        model.setResourceType(device.getDeviceType());
        model.setStatus(Constants.ZERO);
        model.setRemark(device.getDesc());
        model.setRegionName(device.getRegionIndexCode());
        return  model;
    }
    private Device initDoorDataByHkData(Device model, DoorsInfoResponse door, Date date, List<AcsDeviceInfoResponse> allHkList) {
@@ -614,6 +725,17 @@
        }
        return  null;
    }
    private Device getExistedBroadcastDevice(FetchAudioDeviceInfoResponse device, List<Device> allList) {
        if(allList.size()>0){
            for(Device r : allList){
                if(StringUtils.equals(r.getHkId(), device.getDeviceIndexCode())){
                    //表示未删除
                    return  r;
                }
            }
        }
        return  null;
    }
    private Device getExistedDevice(AcsDeviceInfoResponse device, List<Device> allList) {
        if(allList.size()>0){
            for(Device r : allList){
@@ -662,6 +784,17 @@
    private void getDeleteBroadcastList(List<Device> allList,  List<FetchAudioChannelInfoResponse> allHkList,List<Device> deleteList ,Date date) {
        if(allList!=null && allList.size()>0){
            for(Device device : allList){
                if(isDeletedBroadcast(device,allHkList)){
                    device.setIsdeleted(Constants.ONE);
                    device.setEditDate(date);
                    deleteList.add(device);
                }
            }
        }
    }
    private void getDeleteBroadcastDeviceList(List<Device> allList,  List<FetchAudioDeviceInfoResponse> allHkList,List<Device> deleteList ,Date date) {
        if(allList!=null && allList.size()>0){
            for(Device device : allList){
                if(isDeletedBroadcastDevice(device,allHkList)){
                    device.setIsdeleted(Constants.ONE);
                    device.setEditDate(date);
@@ -695,7 +828,7 @@
        return  true;
    }
    private boolean isDeletedBroadcastDevice(Device device, List<FetchAudioChannelInfoResponse> allHkList) {
    private boolean isDeletedBroadcast(Device device, List<FetchAudioChannelInfoResponse> allHkList) {
        if(allHkList.size()>0){
            for(FetchAudioChannelInfoResponse r : allHkList){
                if(StringUtils.equals(device.getHkId(), r.getAudioChannelIndexCode())){
@@ -707,6 +840,18 @@
        return  true;
    }
    private boolean isDeletedBroadcastDevice(Device device, List<FetchAudioDeviceInfoResponse> allHkList) {
        if(allHkList.size()>0){
            for(FetchAudioDeviceInfoResponse r : allHkList){
                if(StringUtils.equals(device.getHkId(), r.getDeviceIndexCode())){
                    //表示未删除
                    return  false;
                }
            }
        }
        return  true;
    }
    private boolean isDeletedDevice(Device device, List<AcsDeviceInfoResponse> allHkList) {
        if(allHkList.size()>0){
            for(AcsDeviceInfoResponse r : allHkList){