jiangping
2024-08-20 9ef944f83e337193293807cdcc6e7bbc1c494c25
最新版本
已添加11个文件
已修改15个文件
841 ■■■■■ 文件已修改
admin/src/api/platform/platformReason.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPlatformReasonWindow.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitorSources.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/platform.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/platformReason.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/PlatformReasonController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformReasonCloudController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmAppointmentMDJRequest.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmAppointmentRequest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmAppointmentVistorRequest.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmPermissionResourceRequest.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmPermissionSetRequest.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/IccmAppointmentInfoResponse.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/IccmAppointmentMDJResponse.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/IccmAppointmentResponse.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformReason.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformReasonService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/platform/platformReason.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/visitsAdmin/cloudService/business/platformReason/page', data, {
    trim: true
  })
}
export function allList (data) {
  return request.post('/visitsAdmin/cloudService/business/platformReason/list', data, {
    trim: true
  })
}
// å¯¼å‡ºExcel
export function exportExcel (data) {
  return request.post('/visitsAdmin/cloudService/business/platformReason/exportExcel', data, {
    trim: true,
    download: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/platformReason/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/platformReason/updateById', data)
}
export function updateStatusById (data) {
  return request.post('/visitsAdmin/cloudService/business/platformReason/updateStatusById', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/platformReason/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/visitsAdmin/cloudService/business/platformReason/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/components/business/OperaPlatformReasonWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
<template>
  <GlobalWindow
    :title="title"
    width="50%"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="入园原因:" prop="reason">
        <el-input v-model="form.reason" placeholder="请输入入园原因" v-trim/>
      </el-form-item>
      <el-form-item label="作业月台组:" prop="groupId">
        <el-select v-model="form.groupId"    >
          <el-option
              v-for="item in groupList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="作业数量限制(万只/天):" prop="limitNum" >
        <el-input type="number" v-model="form.limitNum" placeholder="请输入作业数量限制(万只/天)" v-trim/>
      </el-form-item>
      <el-form-item label="排序码(升序):" prop="sortnum">
        <el-input type="number"  v-model="form.sortnum" placeholder="请输入排序码(升序)" v-trim/>
      </el-form-item>
      <el-form-item label="说明:" prop="remark">
        <el-input type="textarea"  v-model="form.remark" placeholder="请输入说明" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { allList } from '@/api/platform/platformGroup'
export default {
  name: 'OperaPlatformReasonWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      groupList: [],
      form: {
        id: null,
        reason: null,
        sortnum: null,
        remark: '',
        groupId: '',
        limitNum: 1
      },
      // éªŒè¯è§„则
      rules: {
        reason: [{ required: true, message: '请输入入园原因 ', trigger: 'blur' }],
        groupId: [{ required: true, message: '请选择作业月台组 ', trigger: 'blur' }]
      }
    }
  },
  created () {
    this.config({
      api: '/platform/platformReason',
      'field.id': 'id'
    })
  },
  methods: {
    /**
     * æ‰“开窗口
     * @title çª—口标题
     * @target ç¼–辑的对象
     */
    open (title, target) {
      this.title = title
      this.loadGroupList()
      this.visible = true
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
      })
    },
    loadGroupList () {
      allList({})
        .then(res => {
          this.groupList = res || []
          console.log(this.groupList)
        })
    }
  }
}
</script>
<style scoped>
.labelTip{
  font-size: 12px;
  color: #666666;
}
</style>
admin/src/views/business/visitorSources.vue
@@ -20,8 +20,8 @@
      </div>
      <el-form-item label="来访预约方式:" prop="reservationWay">
        <el-radio-group v-model="form.reservationWay">
          <el-radio :label="0">预约免登记</el-radio>
          <el-radio :label="1">预约后登记(需要配备访客机)</el-radio>
          <el-radio :label="1">预约免登记</el-radio>
          <el-radio :label="0">预约后登记(需要配备访客机)</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="被访人校验方式:" prop="checkVisit">
admin/src/views/platform/platform.vue
@@ -39,6 +39,18 @@
        <el-table-column prop="code" label="月台编码" fixed min-width="100px"></el-table-column>
        <el-table-column prop="groupName" label="所属月台组" fixed min-width="150px"></el-table-column>
        <el-table-column prop="workingNum" label="同时叫号车辆数" min-width="120px"></el-table-column>
        <el-table-column label="禁/启用" min-width="120px">
          <template slot-scope="{row}">
            <el-switch
                @change="changeStatus($event, row)"
                v-model="row.status"
                active-color="#13ce66"
                inactive-color="#ff4949"
                :active-value="0"
                :inactive-value="1">
            </el-switch>
          </template>
        </el-table-column>
        <el-table-column prop="stayTmeoutAlarmTime" label="停留超时报警时间(分钟)" min-width="180px">
          <template scope="{row}">{{row.stayTmeoutAlarmTime?(row.stayTmeoutAlarmTime):'-'}}</template>
        </el-table-column>
@@ -54,6 +66,7 @@
            <span v-if="row.platformStatus == 3">错误停靠</span>
          </template>
        </el-table-column>
        <el-table-column prop="broadcastNames" label="关联广播" min-width="100px"></el-table-column>
        <el-table-column prop="ledNames" label="关联LED" min-width="100px"></el-table-column>
        <el-table-column prop="hkDate" label="同步时间" min-width="140px"></el-table-column>
@@ -87,7 +100,7 @@
import SearchFormCollapse from '@/components/common/SearchFormCollapse'
import Pagination from '@/components/common/Pagination'
import OperaPlatformWindow from '@/components/business/OperaPlatformWindow'
import {allList} from "@/api/platform/platformGroup";
import { allList } from '@/api/platform/platformGroup'
export default {
  name: 'Platform',
  extends: BaseTable,
admin/src/views/platform/platformReason.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
<template>
  <TableLayout :permissions="['business:platformreason:query']">
    <!-- æœç´¢è¡¨å• -->
    <SearchFormCollapse slot="search-form" :need-more="false">
      <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
        <el-form-item label="" prop="reason">
          <el-input v-model="searchForm.reason" clearable placeholder="请输入入园原因" @keypress.enter.native="search"></el-input>
        </el-form-item>
        <el-form-item label="" >
          <el-select v-model="searchForm.groupId"     placeholder="请选择月台分组" @change="search" clearable>
            <el-option
                v-for="item in groupList"
                :key="item.id"
                :label="item.name"
                :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <section>
          <el-button type="primary" @click="search">搜索</el-button>
          <el-button @click="reset">重置</el-button>
        </section>
      </el-form>
    </SearchFormCollapse>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:platformreason:create','business:platformreason:delete']">
        <li><el-button type="primary" @click="$refs.OperaPlatformReasonWindow.open('新建月台入园原因')" icon="el-icon-plus" v-permissions="['business:platformreason:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:platformreason:delete']">删除</el-button></li>
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="reason" label="入园原因" fixed min-width="100px"></el-table-column>
        <el-table-column prop="groupName" label="对应作业月台组" fixed min-width="150px"></el-table-column>
        <el-table-column prop="limitNum" label="作业量(万只/天)" min-width="120px"></el-table-column>
        <el-table-column prop="reason" label="说明" fixed min-width="100px"></el-table-column>
        <el-table-column label="禁/启用" min-width="120px" >
          <template slot-scope="{row}">
            <el-switch
                @change="changeStatus($event, row)"
                v-model="row.status"
                active-color="#13ce66"
                inactive-color="#ff4949"
                :active-value="0"
                :inactive-value="1">
            </el-switch>
          </template>
        </el-table-column>
        <el-table-column prop="editDate" label="最近操作时间" min-width="140px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:platformreason:update', 'business:platformreason:delete'])"
          label="操作"
          align="center"
          min-width="150"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.OperaPlatformReasonWindow.open('编辑月台入园原因', row)" icon="el-icon-edit" v-permissions="['business:platformreason:update']">审批流</el-button>
            <el-button type="text" @click="$refs.OperaPlatformReasonWindow.open('编辑月台入园原因', row)" icon="el-icon-edit" v-permissions="['business:platformreason:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:platformreason:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaPlatformReasonWindow ref="OperaPlatformReasonWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import SearchFormCollapse from '@/components/common/SearchFormCollapse'
import Pagination from '@/components/common/Pagination'
import OperaPlatformReasonWindow from '@/components/business/OperaPlatformReasonWindow'
import { allList } from '@/api/platform/platformGroup'
export default {
  name: 'Platform',
  extends: BaseTable,
  components: { SearchFormCollapse, TableLayout, Pagination, OperaPlatformReasonWindow },
  data () {
    return {
      groupList: [],
      // æœç´¢
      working: false,
      working1: false,
      searchForm: {
        reason: '',
        groupId: null
      }
    }
  },
  created () {
    this.config({
      module: '月台入园原因信息表',
      api: '/platform/platformReason',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
    this.loadGroupList()
  },
  methods: {
    loadGroupList () {
      allList({})
        .then(res => {
          this.groupList = res || []
        })
    },
    changeStatus (e, row) {
      this.api.updateStatusById({
        id: row.id,
        status: e
      })
    }
  }
}
</script>
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/PlatformReasonController.java
@@ -42,7 +42,7 @@
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:platformreason:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        platformReasonService.deleteById(id);
        platformReasonService.deleteById(id,this.getLoginUser(null));
        return ApiResponse.success(null);
    }
@@ -55,7 +55,7 @@
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        platformReasonService.deleteByIdInBatch(idList);
        platformReasonService.deleteByIdInBatch(idList,this.getLoginUser(null));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
@@ -96,6 +96,7 @@
        return ApiResponse.success(approveTemplService.findOne(templ));
    }
//    @ApiOperation("根据ID查询")
//    @GetMapping("/{id}")
//    @CloudRequiredPermission("business:approvetempl:query")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformReasonCloudController.java
@@ -8,6 +8,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformReason;
import com.doumee.service.business.PlatformReasonService;
import io.swagger.annotations.Api;
@@ -36,6 +37,7 @@
    @PostMapping("/create")
    @CloudRequiredPermission("business:platformreason:create")
    public ApiResponse create(@RequestBody PlatformReason platformReason,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        platformReason.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(platformReasonService.create(platformReason));
    }
@@ -43,7 +45,7 @@
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:platformreason:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        platformReasonService.deleteById(id);
        platformReasonService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
@@ -56,7 +58,7 @@
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        platformReasonService.deleteByIdInBatch(idList);
        platformReasonService.deleteByIdInBatch(idList,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
@@ -64,6 +66,7 @@
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:platformreason:update")
    public ApiResponse updateById(@RequestBody PlatformReason platformReason,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        platformReason.setLoginUserInfo(this.getLoginUser(token));
        platformReasonService.updateById(platformReason);
        return ApiResponse.success(null);
    }
@@ -74,6 +77,14 @@
    public ApiResponse<PageData<PlatformReason>> findPage (@RequestBody PageWrap<PlatformReason> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(platformReasonService.findPage(pageWrap));
    }
    @ApiOperation("根据ID修改状态")
    @PostMapping("/updateStatusById")
    @CloudRequiredPermission("business:platform:update")
    public ApiResponse updateStatusById(@RequestBody PlatformReason param, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        param.setLoginUserInfo(this.getLoginUser(token));
        platformReasonService.updateStatusById(param);
        return ApiResponse.success(null);
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
@@ -150,8 +150,4 @@
        visitsService.resetPassword(resetPasswordDTO);
        return ApiResponse.success("重置成功");
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -63,7 +63,6 @@
        String visitOut= "/api/visitor/v1/visitor/out";//签离访客预约
        String facePicture= "/api/resource/v1/person/picture";//提取用户人脸照片
        String privilegeGroup= "/api/visitor/v1/privilege/group";//查询访客权限组
        String privilegIccmeGroup= "/api/iccm/v1/privilege/groups";//查询访客权限组
        String eventSub= "/api/eventService/v1/eventSubscriptionByEventTypes";//事件订阅
        String doorSearch= "/api/resource/v2/door/search";//查询门禁点列表v2
        String cancelEventSub= "/api/eventService/v1/eventUnSubscriptionByEventTypes";//取消事件订阅
@@ -99,6 +98,13 @@
        String platformsList= "/api/platformService/v1/platforms";//获取全部月台信息
        String platformStatus= "/api/platformService/v1/platform/status";//获取月台状态
        String customBroadcast= "/api/ibas/v1/customBroadcast";//用于设置广播的自定播放和停止
        String iccmAppointment= "/api/iccm/v2/appointment";//iccm访客登记添加
        String iccmUpdateAppointment= "/api/iccm/v2/appointment/update";//iccm访客登记修改
        String iccmCancelAppointment= "/api/iccm/v1/appointment/cancel";//iccm访客登记修改
        String iccmAppointmentMDJ= "/api/iccm/v1/appointment/free/registration";//iccm访客预约免登记
        String privilegIccmeGroup= "/api/iccm/v1/privilege/groups";//查询访客权限组
        String iccmAppointmentInfo= "/api/iccm/v1/appointment/registration";//iccm查询已预约登记
    }
    /**
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -336,6 +336,22 @@
        return startDoPostStringArtemis(HKConstants.InterfacePath.visitAppiontment,body);
    }
    /**
     *    è®¿å®¢é¢„约
     * @param body
     * @return
     */
    public static String iccmAppointment(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.iccmAppointment,body);
    }
    /**
     *    è®¿å®¢å…ç™»è®°é¢„约
     * @param body
     * @return
     */
    public static String iccmAppointmentMDJ(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.iccmAppointmentMDJ,body);
    }
    /**
     *    è®¿å®¢å…ç™»è®°é¢„约
     * @param body
     * @return
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmAppointmentMDJRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.doumee.core.haikang.model.param.request;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
@Data
public class IccmAppointmentMDJRequest {
    private String visitReasonRemark;//        String    false    è®¿é—®äº‹ç”±å¤‡æ³¨
    private String receptionistId    ;//    String    true    è¢«è®¿äººid
    private IccmPermissionSetRequest visitorPermissionSet    ;//    Object    false    è®¿å®¢æƒé™æ¨¡åž‹
    private String visitStartTime    ;//    String    true    è®¿é—®å¼€å§‹æ—¶é—´
    private String visitEndTime    ;//    String    true    è®¿é—®ç»“束时间
    private String visitPurpose    ;//    String    false    æ¥è®¿äº‹ç”±id(不填使用默认访问事由)
    private String campusId    ;//    String    false    å›­åŒºid(不填使用默认园区)
    private String visitorTypeId;//        String    false    è®¿å®¢ç±»åž‹id
    private String deptId;//        String    false    è®¿é—®éƒ¨é—¨id
    private JSONObject extensions;//Object    false    æ‰©å±•字段
    private List<String> regionId;//Array    false    å®‰ä¿åŒºåŸŸé›†åˆ
    private String campusRegionIds;//String    false    è®¿é—®åŒºåŸŸid,多个用逗号隔开
    private  IccmAppointmentVistorRequest visitorInfo    ;//Object    true    è®¿å®¢ä¿¡æ¯æ¨¡åž‹å‚æ•°
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmAppointmentRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.core.haikang.model.param.request;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
@Data
public class IccmAppointmentRequest {
private String visitReasonRemark;//        String    false    è®¿é—®äº‹ç”±å¤‡æ³¨
private String receptionistId    ;//    String    true    è¢«è®¿äººid
private IccmPermissionSetRequest visitorPermissionSet    ;//    Object    false    è®¿å®¢æƒé™æ¨¡åž‹
private String visitStartTime    ;//    String    true    è®¿é—®å¼€å§‹æ—¶é—´
private String visitEndTime    ;//    String    true    è®¿é—®ç»“束时间
private String visitPurpose    ;//    String    false    æ¥è®¿äº‹ç”±id(不填使用默认访问事由)
private String campusId    ;//    String    false    å›­åŒºid(不填使用默认园区)
private String visitorTypeId;//        String    false    è®¿å®¢ç±»åž‹id
private String deptId;//        String    false    è®¿é—®éƒ¨é—¨id
    private JSONObject extensions;//Object    false    æ‰©å±•字段
private List<String> regionId;//Array    false    å®‰ä¿åŒºåŸŸé›†åˆ
private String campusRegionIds;//String    false    è®¿é—®åŒºåŸŸid,多个用逗号隔开
    private List<IccmAppointmentVistorRequest> visitorInfoList    ;//    object[]    True    è®¿å®¢ä¿¡æ¯åˆ—表,最大支持128位访客,其中最多支持4位访客带人脸信息,如果存在人脸上传失败,则整个预约失败。
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmAppointmentVistorRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.doumee.core.haikang.model.param.request;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
@Data
public class IccmAppointmentVistorRequest {
    private String visitorWorkUnit;//    String    false    æ¥è®¿å•位
private String visitorName;//    String    true    è®¿å®¢å§“名
private String visitorPhoto;//    String    false    è®¿å®¢äººè„¸å›¾ç‰‡base64
private String certificateType;//    Number    false    è¯ä»¶ç±»åž‹(111:身份证  414:护照)
private String certificateNo;//    String    false    è¯ä»¶å·ç 
private String gender;//    Number    true    æ€§åˆ«(1:男,2:女)
private String plateNo    ;//String    false    è½¦ç‰Œå·
private String phoneNo;//    String    true    æ‰‹æœºå·
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmPermissionResourceRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class IccmPermissionResourceRequest {
    private String paramKey;//    String    false    å‚数类型(1:门禁点2:梯控楼层3:门口机4:围墙机)
    private List<String> paramValues    ;//参数集合(资源编码)
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/IccmPermissionSetRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.doumee.core.haikang.model.param.request;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
@Data
public class IccmPermissionSetRequest {
private String defaultPrivilegeGroupFlag    ;//String    false    æ˜¯å¦ä½¿ç”¨é»˜è®¤æƒé™ç»„(1:使用;非1:不使用)ä¼ 1时designatedResources和privilegeGroupIds无效,使用页面配置的默认权限组
    private List<IccmPermissionResourceRequest>  designatedResources    ;//Array    false    èµ„源点集合
    private String[] privilegeGroupIds;//    Array    false    æƒé™ç»„ids
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/IccmAppointmentInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class IccmAppointmentInfoResponse {
    private String visitorName;//    String    false    è®¿å®¢å§“名
    private String QRCode;//    String    false    äºŒç»´ç ä¿¡æ¯
    private String receptionistId;//    String    false    è¢«è®¿äººid
    private String receptionistName;//    String    false    è¢«è®¿äººå§“名
    private String svrIndexCode    ;//String    false    å›¾ç‰‡å­˜å‚¨æœåŠ¡çš„å”¯ä¸€æ ‡è¯†
    private String picUri;//    String    false    è®¿å®¢å¤´åƒ,图片的相对URL
    private String verificationCode;//    String    false    è®¿å®¢ç 
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/IccmAppointmentMDJResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class IccmAppointmentMDJResponse {
    private String appointRecordId;//        String    false    è®¿å®¢é¢„约记录id
    private String orderId    ;//    String    false    è®¿å®¢å•号
    private String visitorName    ;//    String    false    è®¿å®¢å§“名
    private String QRCode;//        String    false    äºŒç»´ç ä¿¡æ¯
    private String receptionistId    ;//    String    false    è¢«è®¿äººid
    private String receptionistName    ;//    String    false    è¢«è®¿äººå§“名
    private String svrIndexCode;//        String    false    å›¾ç‰‡å­˜å‚¨æœåŠ¡çš„å”¯ä¸€æ ‡è¯†
    private String picUri    ;//    String    false    è®¿å®¢å¤´åƒ,图片的相对URL
    private String verificationCode;//        String    false    è®¿å®¢éªŒè¯ç ,6位数字字符串
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/IccmAppointmentResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class IccmAppointmentResponse {
private String appointRecordId;//    String    false    è®¿å®¢é¢„约记录id
private String orderId;//    String    false    è®¿å®¢å•号
    private List<IccmAppointmentInfoResponse>   appointmentInfoList;//    object[]    False    é¢„约详细信息
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -412,6 +412,24 @@
        return  null;
    }
    /**
     *访客预约
     * @return
     */
    public  static  BaseResponse<IccmAppointmentResponse>   iccmAppointment(IccmAppointmentRequest param){
        log.info("【海康访客预约】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.iccmAppointment(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse<IccmAppointmentResponse>>(){};
            BaseResponse<IccmAppointmentResponse>  result = JSONObject.parseObject(res, typeReference.getType());
           logResult(result,"海康访客预约");
            return  result;
        }catch (Exception e){
            log.error("【海康访客预约】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *访客预约取消
     * @return
     */
@@ -466,6 +484,24 @@
        return  null;
    }
    /**
     *访客免登记预约
     * @return
     */
    public  static  BaseResponse<IccmAppointmentMDJResponse>   iccmAppiontmentMDJ(IccmAppointmentMDJRequest param){
        log.info("【海康访客免登记预约】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.visitAppiontmentMDJ(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse<IccmAppointmentMDJResponse> >(){};
            BaseResponse<IccmAppointmentMDJResponse>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康访客免登记预约");
            return  result;
        }catch (Exception e){
            log.error("【海康访客免登记预约】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *访客权限组列表查询(分页)
     * @return
     */
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformReason.java
@@ -1,6 +1,8 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -19,7 +21,7 @@
@Data
@ApiModel("月台_入园原因信息表")
@TableName("`platform_reason`")
public class PlatformReason {
public class PlatformReason  extends LoginUserModel {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
@@ -47,6 +49,9 @@
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "状态 0正常 1禁用", example = "1")
    @ExcelColumn(name="状态 0正常 1禁用")
    private Integer status;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
@@ -71,5 +76,11 @@
    @ApiModelProperty(value = "排序码", example = "1")
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @ApiModelProperty(value = "审批模版编码(关联approve_templ)", example = "1")
    @ExcelColumn(name="审批模版编码(关联approve_templ)")
    private Integer approveTemplId;
    @ApiModelProperty(value = "分组名", example = "1")
    @TableField(exist = false)
    private String groupName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformReasonService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.PlatformReason;
@@ -25,7 +26,7 @@
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id, LoginUserInfo user);
    /**
     * åˆ é™¤
@@ -39,7 +40,7 @@
     *
     * @param ids ä¸»é”®é›†
     */
    void deleteByIdInBatch(List<Integer> ids);
    void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user);
    /**
     * ä¸»é”®æ›´æ–°
@@ -94,4 +95,6 @@
     * @return long
     */
    long count(PlatformReason platformReason);
    void updateStatusById(PlatformReason param);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java
@@ -1,19 +1,29 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.PlatformReasonMapper;
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformGroup;
import com.doumee.dao.business.model.PlatformReason;
import com.doumee.service.business.PlatformReasonService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.query.MPJQueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
/**
@@ -29,13 +39,24 @@
    @Override
    public Integer create(PlatformReason platformReason) {
        platformReason.setIsdeleted(Constants.ZERO);
        platformReason.setStatus(Constants.ZERO);
        platformReason.setCreator(platformReason.getLoginUserInfo().getId());
        platformReason.setCreateDate(new Date());
        platformReason.setEditDate(platformReason.getCreateDate());
        platformReason.setEditor(platformReason.getCreator());
        platformReasonMapper.insert(platformReason);
        return platformReason.getId();
    }
    @Override
    public void deleteById(Integer id) {
        platformReasonMapper.deleteById(id);
    public void deleteById(Integer id, LoginUserInfo user) {
        PlatformReason param = new PlatformReason();
        param.setId(id);
        param.setIsdeleted(Constants.ONE);
        param.setEditor(user.getId());
        param.setEditDate(new Date());
        platformReasonMapper.updateById(param);
    }
    @Override
@@ -45,15 +66,19 @@
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
    public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        platformReasonMapper.deleteBatchIds(ids);
        for(Integer id : ids){
            deleteById(id,user);
        }
    }
    @Override
    public void updateById(PlatformReason platformReason) {
        platformReason.setEditDate(new Date());
        platformReason.setEditor(platformReason.getLoginUserInfo().getId());
        platformReasonMapper.updateById(platformReason);
    }
@@ -87,53 +112,51 @@
    @Override
    public PageData<PlatformReason> findPage(PageWrap<PlatformReason> pageWrap) {
        IPage<PlatformReason> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<PlatformReason> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<PlatformReason> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.selectAll(PlatformReason.class)
                .selectAs(PlatformGroup::getName,PlatformReason::getGroupName)
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,PlatformReason::getGroupId);
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(PlatformReason::getId, pageWrap.getModel().getId());
            queryWrapper.eq(PlatformReason::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(PlatformReason::getCreator, pageWrap.getModel().getCreator());
            queryWrapper.eq(PlatformReason::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(PlatformReason::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(PlatformReason::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
            queryWrapper.ge(PlatformReason::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(PlatformReason::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(PlatformReason::getEditor, pageWrap.getModel().getEditor());
            queryWrapper.eq(PlatformReason::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(PlatformReason::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(PlatformReason::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
            queryWrapper.ge(PlatformReason::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(PlatformReason::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(PlatformReason::getIsdeleted, pageWrap.getModel().getIsdeleted());
            queryWrapper.eq(PlatformReason::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(PlatformReason::getRemark, pageWrap.getModel().getRemark());
            queryWrapper.eq(PlatformReason::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getReason() != null) {
            queryWrapper.lambda().eq(PlatformReason::getReason, pageWrap.getModel().getReason());
            queryWrapper.like(PlatformReason::getReason, pageWrap.getModel().getReason());
        }
        if (pageWrap.getModel().getIocode() != null) {
            queryWrapper.lambda().eq(PlatformReason::getIocode, pageWrap.getModel().getIocode());
            queryWrapper.eq(PlatformReason::getIocode, pageWrap.getModel().getIocode());
        }
        if (pageWrap.getModel().getGroupId() != null) {
            queryWrapper.lambda().eq(PlatformReason::getGroupId, pageWrap.getModel().getGroupId());
            queryWrapper.eq(PlatformReason::getGroupId, pageWrap.getModel().getGroupId());
        }
        if (pageWrap.getModel().getLimitNum() != null) {
            queryWrapper.lambda().eq(PlatformReason::getLimitNum, pageWrap.getModel().getLimitNum());
            queryWrapper.eq(PlatformReason::getLimitNum, pageWrap.getModel().getLimitNum());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(PlatformReason::getSortnum, pageWrap.getModel().getSortnum());
            queryWrapper.eq(PlatformReason::getSortnum, pageWrap.getModel().getSortnum());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.orderByAsc(PlatformReason::getSortnum);
        return PageData.from(platformReasonMapper.selectPage(page, queryWrapper));
    }
@@ -142,4 +165,22 @@
        QueryWrapper<PlatformReason> wrapper = new QueryWrapper<>(platformReason);
        return platformReasonMapper.selectCount(wrapper);
    }
    @Override
    public void updateStatusById(PlatformReason platform) {
        PlatformReason model  =platformReasonMapper.selectById(platform.getId());
        if(model ==null) {
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该记录不存在!");
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo == null){
            loginUserInfo = platform.getLoginUserInfo();
        }
        PlatformReason update = new PlatformReason();
        update.setEditDate(new Date());
        update.setId(model.getId());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(platform.getStatus());
        platformReasonMapper.updateById(update);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
@@ -69,13 +69,14 @@
    public void updateStatusById(Platform platform) {
        Platform model  =platformMapper.selectById(platform.getId());
        if(model ==null) {
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,人员信息不存在!");
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该记录信息不存在!");
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo == null){
            loginUserInfo = platform.getLoginUserInfo();
        }
        Platform update = new Platform();
        update.setId(model.getId());
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(platform.getStatus());
@@ -127,7 +128,7 @@
                .ge(pageWrap.getModel().getEditDate() != null, Platform::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()))
                .le(pageWrap.getModel().getEditDate() != null, Platform::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
                .eq(pageWrap.getModel().getIsdeleted() != null, Platform::getIsdeleted, pageWrap.getModel().getIsdeleted())
                .eq(pageWrap.getModel().getName() != null, Platform::getName, pageWrap.getModel().getName())
                .like(pageWrap.getModel().getName() != null, Platform::getName, pageWrap.getModel().getName())
                .eq(pageWrap.getModel().getRemark() != null, Platform::getRemark, pageWrap.getModel().getRemark())
                .eq(pageWrap.getModel().getStatus() != null, Platform::getStatus, pageWrap.getModel().getStatus())
                .eq(pageWrap.getModel().getSortnum() != null, Platform::getSortnum, pageWrap.getModel().getSortnum())
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
@@ -65,12 +65,12 @@
                param = new PrivilegeGroupRequest();
                param.setPageNo(curPage);
                param.setPageSize(100);
                BaseResponse<PrivilegeGroupListResponse> response = HKService.privilegeGroup(param);
//                BaseResponse<PrivilegeGroupListResponse> response = HKService.privilegeGroup(param);
//                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
//                    response = HKService.privilegIccmeGroup(param);//接口V1版本不存在,调用iccm版本接口
//                }
                BaseResponse<PrivilegeGroupListResponse> response = HKService.privilegIccmeGroup(param);//接口V1版本不存在,调用iccm版本接口
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                    response = HKService.privilegIccmeGroup(param);//接口V1版本不存在,调用iccm版本接口
                }
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                    response = HKService.privilegIccmeGroup(param);
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
                }
                PrivilegeGroupListResponse r = response.getData();
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -52,7 +52,7 @@
    @Autowired
    private WxPlatNotice wxPlatNotice;
    /**
     * åŒæ­¥æµ·åº·è®¿å®¢ä¿¡æ¯,根据erp同步组织结果,定时检查需要下发到海康的组织信息
     * åŒæ­¥æµ·åº·è®¿å®¢ä¿¡æ¯æ˜¯å¦å·²ç­¾ç¦»çŠ¶æ€
     */
    @Override
    public void getOutTimeVisitRecord(){
@@ -219,7 +219,8 @@
            Date date = new Date();
            for(Visits c : list) {
                //发起海康预约接口(需要登记),根据预约返回接口封装申请记录更新字段
                getUpdateModelByResponse(c,date,roleList,path);
//                getUpdateModelByResponse(c,date,roleList,path);
                getUpdateModelByResponseIccm(c,date,roleList,path);
                visitsMapper.updateById(c);
                if(Objects.isNull(c.getParentId())){
                    wxPlatNotice.sendVisitAuditTemplateNotice(c,
@@ -266,7 +267,6 @@
     * @param c
     * @param date
     * @param date
     * @param type 0需要登记 1免登记
     */
    private void getUpdateModelByResponse(  Visits c,Date date, List<DeviceRole> roleList,String path ) {
        String code = null;
@@ -315,7 +315,67 @@
            }
            reson = response!=null?JSONObject.toJSONString(response):"";
        }
        if (code!= null && id!=null) {
            //海康下发成功
            c.setHkId( id);//预约标识
            c.setQrcode(qrcode);
            c.setRemark("下发海康成功!");
            c.setStatus(Constants.VisitStatus.xfSuccess);//下发海康成功
        } else {
            //海康下发失败
            c.setRemark("下发海康失败,原因:"+ reson);
            c.setStatus(Constants.VisitStatus.xfFail);//下发海康失败
        }
        c.setHkStatus(Constants.ONE);
        c.setHkDate(date);
    }
    private void getUpdateModelByResponseIccm(  Visits c,Date date, List<DeviceRole> roleList,String path ) {
        String code = null;
        String id = null;
        String qrcode = null;
        String reson = "";
        //发起海康预约接口
        if(Constants.equalsInteger(c.getVisitType(),Constants.ZERO)){
            //(需要登记)
            c.setVisitType(Constants.ZERO);
            IccmAppointmentRequest request =  getHkRequestParaIccm(c,roleList,path);
            if(request == null){
                //海康下发成功
                c.setStatus(Constants.VisitStatus.xfFail);//下发海康失败
                c.setRemark("下发海康参数不正确!");
                c.setHkStatus(Constants.ONE);
                c.setHkDate(date);
                return;
            }
            BaseResponse<IccmAppointmentResponse> response =  HKService.iccmAppointment(request);
            code =response!=null ?response.getCode():null;
            if((response!=null && response.getData()!=null
                    && response.getData().getAppointmentInfoList() !=null
                    && response.getData().getAppointmentInfoList().size()>0)){
                id =response.getData().getOrderId();
                qrcode =response.getData().getAppointmentInfoList().get(0).getQRCode();
            }
            reson = response!=null?JSONObject.toJSONString(response):"";
        }else{
            //免登记
            c.setVisitType(Constants.ONE);
            IccmAppointmentMDJRequest request =getHkMDJRequestParamIccm(c,roleList,path);
            if(request == null){
                //海康下发成功
                c.setStatus(Constants.VisitStatus.xfFail);//下发海康失败
                c.setRemark("下发海康免登记参数不正确!");
                c.setHkStatus(Constants.ONE);
                c.setHkDate(date);
                return;
            }
            BaseResponse<IccmAppointmentMDJResponse> response = HKService.iccmAppiontmentMDJ(request );
            code =response!=null ?response.getCode():null;
            if(response!=null && response.getData()!=null){
                id = response.getData().getOrderId();
                qrcode =response.getData().getQRCode();
            }
            reson = response!=null?JSONObject.toJSONString(response):"";
        }
        if (code!= null && id!=null) {
            //海康下发成功
            c.setHkId( id);//预约标识
@@ -359,6 +419,29 @@
        request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c));
        return  request;
    }
    private IccmAppointmentMDJRequest getHkMDJRequestParamIccm(Visits c,List<DeviceRole> roleList,String path) {
        IccmAppointmentMDJRequest request = new IccmAppointmentMDJRequest();
        IccmAppointmentVistorRequest info =getRequestInfoByVisitIccm(c,path);
        if(info == null ){
            //人脸为空,不能进行推送
            return  null;
        }
        request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
        request.setReceptionistId(c.getReceptMemberHkId());//被访人海康编码
        if(StringUtils.isNotBlank(c.getReason())){
            char[] charArray = c.getReason().toCharArray();
            int length = charArray.length;
            if(length>32){
                request.setVisitPurpose(c.getReason().substring(0,32));
            }else{
                request.setVisitPurpose(c.getReason());
            }
        }
        request.setVisitorInfo(info);
        request.setVisitorPermissionSet(getVisitPermissonRequestIccm(roleList,c));
        return  request;
    }
    /**
     * è®¿å®¢æƒé™ç»„
@@ -368,6 +451,20 @@
     */
    private VisitAppointmentPermissonRequest getVisitPermissonRequest(List<DeviceRole> roleList, Visits c) {
        VisitAppointmentPermissonRequest p = new VisitAppointmentPermissonRequest();
        //获取权限组集合
        String[] roles = getHkRoles(c.getDoors(),roleList);
        if(roles==null || roles.length ==0){
            //使用默认访客权限组
            p.setDefaultPrivilegeGroupFlag(Constants.ONE+"");
        }else{
            //指定有效海康访客权限组数据
            p.setDefaultPrivilegeGroupFlag(Constants.ZERO+"");
            p.setPrivilegeGroupIds(roles);
        }
        return  p;
    }
    private IccmPermissionSetRequest getVisitPermissonRequestIccm(List<DeviceRole> roleList, Visits c) {
        IccmPermissionSetRequest p = new IccmPermissionSetRequest();
        //获取权限组集合
        String[] roles = getHkRoles(c.getDoors(),roleList);
        if(roles==null || roles.length ==0){
@@ -409,6 +506,34 @@
        request.setVisitorInfoList(infolist);
        return  request;
    }
    private IccmAppointmentRequest getHkRequestParaIccm(Visits c,List<DeviceRole> roleList,String path ) {
        IccmAppointmentRequest request = new IccmAppointmentRequest();
        //申请人信息
        IccmAppointmentVistorRequest info =getRequestInfoByVisitIccm(c,path);
        if(info == null ){
            //人脸为空,不能进行推送
            return  null;
        }
        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
        request.setReceptionistId(c.getReceptMemberHkId());//被访人海康编码
        if(StringUtils.isNotBlank(c.getReason())){
            char[] charArray = c.getReason().toCharArray();
            int length = charArray.length;
            if(length>32){
                request.setVisitPurpose(c.getReason().substring(0,32));
            }else{
                request.setVisitPurpose(c.getReason());
            }
        }
        //获取权限组集合
        request.setVisitorPermissionSet(getVisitPermissonRequestIccm(roleList,c));
        List<IccmAppointmentVistorRequest> infolist = new ArrayList<>();
        infolist.add(info);
        request.setVisitorInfoList(infolist);
        return  request;
    }
    private VisitAppointmentVistorRequest getRequestInfoByVisit(Visits c,String path) {
        VisitAppointmentVistorRequest info = new VisitAppointmentVistorRequest();
@@ -456,6 +581,52 @@
        return info;
    }
    private IccmAppointmentVistorRequest getRequestInfoByVisitIccm(Visits c,String path) {
        IccmAppointmentVistorRequest info = new IccmAppointmentVistorRequest();
        //人脸数据
        if(StringUtils.isBlank(c.getName())
                ||StringUtils.isBlank(c.getPhone())
                || StringUtils.isBlank(c.getFaceImg()) ){
            return  null;
        }
        if(StringUtils.isNotBlank(c.getFaceImg())){
            info.setVisitorPhoto(ImageBase64Util.Image2Base64(path+c.getFaceImg()));
        }
        if(info.getVisitorPhoto() == null){
            return  null;
        }
        if(StringUtils.isNotBlank(c.getName())){
            char[] charArray = c.getName().toCharArray();
            int length = charArray.length;
            if(length>32){
                info.setVisitorName(c.getName().substring(0,32));
            }else{
                info.setVisitorName(c.getName());
            }
        }
        if(StringUtils.isNotBlank(c.getCompanyName())){
            char[] charArray = c.getCompanyName().toCharArray();
            int length = charArray.length;
            if(length>32){
                info.setVisitorWorkUnit(c.getCompanyName().substring(0,32));
            }else{
                info.setVisitorWorkUnit(c.getCompanyName());
            }
        }
        info.setPhoneNo(c.getPhone());
        info.setPlateNo(c.getCarNos());
        info.setGender(c.getSex()+"");
        if(Constants.equalsInteger(c.getIdcardType(),Constants.ZERO)){
            info.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
            info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
        } else if(Constants.equalsInteger(c.getIdcardType(),Constants.TWO)){
            info.setCertificateType(HKConstants.CertificateType.HUZHAO.getKey()+"");
            info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD,  c.getIdcardNo()));
        }
        return info;
    }
    private String[] getHkRoles(String doors, List<DeviceRole> roleList) {
        if(StringUtils.isBlank(doors) || roleList.size()==0|| roleList.size()==0){