jiangping
2024-08-14 17d3a171569b150cae8c240e69e4969e0ae34b03
最新版本
已添加5个文件
已修改16个文件
856 ■■■■■ 文件已修改
admin/src/api/platform/platform.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPlatformWindow.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/SearchFormCollapse.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/platform.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkPlatformTimerController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformListInfoResponse.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/platform/platform.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/visitsAdmin/cloudService/business/platform/page', data, {
    trim: true
  })
}
// åŒæ­¥
export function syncPlatforms (data) {
  return request.post('/visitsAdmin/cloudService/business/hksync/syncPlatforms', data)
}
// åŒæ­¥
export function syncPlatformStatus (data) {
  return request.post('/visitsAdmin/cloudService/business/hksync/syncPlatformStatus', data)
}
// å¯¼å‡ºExcel
export function exportExcel (data) {
  return request.post('/visitsAdmin/cloudService/business/platform/exportExcel', data, {
    trim: true,
    download: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/platform/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/platform/updateById', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/platform/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/visitsAdmin/cloudService/business/platform/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/components/business/OperaPlatformWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
<template>
  <GlobalWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="创建人编码" prop="creator">
        <el-input v-model="form.creator" placeholder="请输入创建人编码" v-trim/>
      </el-form-item>
      <el-form-item label="创建时间" prop="createDate">
        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="请输入创建时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="更新人编码" prop="editor">
        <el-input v-model="form.editor" placeholder="请输入更新人编码" v-trim/>
      </el-form-item>
      <el-form-item label="更新时间" prop="editDate">
        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="请输入更新时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="是否删除0否 1是" prop="isdeleted">
        <el-input v-model="form.isdeleted" placeholder="请输入是否删除0否 1是" v-trim/>
      </el-form-item>
      <el-form-item label="名称" prop="name">
        <el-input v-model="form.name" placeholder="请输入名称" v-trim/>
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入备注" v-trim/>
      </el-form-item>
      <el-form-item label="状态 0启用 1禁用" prop="status">
        <el-input v-model="form.status" placeholder="请输入状态 0启用 1禁用" v-trim/>
      </el-form-item>
      <el-form-item label="排序码" prop="sortnum">
        <el-input v-model="form.sortnum" placeholder="请输入排序码" v-trim/>
      </el-form-item>
      <el-form-item label="所属月台分钟编码(g关联platform_group)" prop="groupId">
        <el-input v-model="form.groupId" placeholder="请输入所属月台分钟编码(g关联platform_group)" v-trim/>
      </el-form-item>
      <el-form-item label="工作开始时间" prop="startTime">
        <el-input v-model="form.startTime" placeholder="请输入工作开始时间" v-trim/>
      </el-form-item>
      <el-form-item label="工作结束时间" prop="endTime">
        <el-input v-model="form.endTime" placeholder="请输入工作结束时间" v-trim/>
      </el-form-item>
      <el-form-item label="同时作业数量" prop="workingNum">
        <el-input v-model="form.workingNum" placeholder="请输入同时作业数量" v-trim/>
      </el-form-item>
      <el-form-item label="等待教好时间(秒)" prop="wariCallTime">
        <el-input v-model="form.wariCallTime" placeholder="请输入等待教好时间(秒)" v-trim/>
      </el-form-item>
      <el-form-item label="停留超时报警时间(秒)" prop="alermTime">
        <el-input v-model="form.alermTime" placeholder="请输入停留超时报警时间(秒)" v-trim/>
      </el-form-item>
      <el-form-item label="最后事件推送时间" prop="lastEventTime">
        <el-date-picker v-model="form.lastEventTime" value-format="yyyy-MM-dd" placeholder="请输入最后事件推送时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="监控点名称,多个用英文逗号隔开" prop="deviceNames">
        <el-input v-model="form.deviceNames" placeholder="请输入监控点名称,多个用英文逗号隔开" v-trim/>
      </el-form-item>
      <el-form-item label="月台屏幕名称,多个用英文逗号隔开" prop="screenName">
        <el-input v-model="form.screenName" placeholder="请输入月台屏幕名称,多个用英文逗号隔开" v-trim/>
      </el-form-item>
      <el-form-item label="海康标识" prop="hkId">
        <el-input v-model="form.hkId" placeholder="请输入海康标识" v-trim/>
      </el-form-item>
      <el-form-item label="关联承租公司" prop="companys">
        <el-input v-model="form.companys" placeholder="请输入关联承租公司" v-trim/>
      </el-form-item>
      <el-form-item label="X坐标" prop="xpos">
        <el-input v-model="form.xpos" placeholder="请输入X坐标" v-trim/>
      </el-form-item>
      <el-form-item label="Y坐标" prop="ypos">
        <el-input v-model="form.ypos" placeholder="请输入Y坐标" v-trim/>
      </el-form-item>
      <el-form-item label="宽度" prop="width">
        <el-input v-model="form.width" placeholder="请输入宽度" v-trim/>
      </el-form-item>
      <el-form-item label="高度" prop="height">
        <el-input v-model="form.height" placeholder="请输入高度" v-trim/>
      </el-form-item>
      <el-form-item label="角度" prop="angle">
        <el-input v-model="form.angle" placeholder="请输入角度" v-trim/>
      </el-form-item>
      <el-form-item label="海康标识同步时间" prop="hkData">
        <el-date-picker v-model="form.hkData" value-format="yyyy-MM-dd" placeholder="请输入海康标识同步时间"></el-date-picker>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
export default {
  name: 'OperaPlatformWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        isdeleted: '',
        name: '',
        remark: '',
        status: '',
        sortnum: '',
        groupId: '',
        startTime: '',
        endTime: '',
        workingNum: '',
        wariCallTime: '',
        alermTime: '',
        lastEventTime: '',
        deviceNames: '',
        screenName: '',
        hkId: '',
        companys: '',
        xpos: '',
        ypos: '',
        width: '',
        height: '',
        angle: '',
        hkData: ''
      },
      // éªŒè¯è§„则
      rules: {
      }
    }
  },
  created () {
    this.config({
      api: '/platform/platform',
      'field.id': 'id'
    })
  }
}
</script>
admin/src/components/common/SearchFormCollapse.vue
@@ -1,14 +1,21 @@
<template>
  <div class="search-form-collapse" :class="{'collapse__hidden': !showMore}">
    <slot></slot>
    <el-button v-if="!showMore" class="collapse__switch" @click="showMore = true">更多查询...</el-button>
    <el-button v-else class="collapse__switch" @click="showMore = false">收起</el-button>
    <el-button  v-if="needMore && !showMore" class="collapse__switch" @click="showMore = true">更多查询...</el-button>
    <el-button v-else-if="needMore && showMore" class="collapse__switch" @click="showMore = false">收起</el-button>
  </div>
</template>
<script>
export default {
  name: 'SearchFormCollapse',
  props: {
    needMore: {
      type: Boolean,
      required: false,
      default: () => true
    }
  },
  data () {
    return {
      showMore: false
admin/src/views/platform/platform.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
<template>
  <TableLayout :permissions="['business:platform:query']">
    <!-- æœç´¢è¡¨å• -->
    <SearchFormCollapse slot="search-form" :need-more="false">
      <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
        <el-form-item label="" 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>
    </SearchFormCollapse>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:hksync:platforms']">
        <li><el-button type="primary" :loading="working" @click="syncData" icon="el-icon-plus" v-permissions="['business:hksync:platforms']">同步</el-button></li>
        <li><el-button type="primary" :loading="working1" @click="syncStatus" icon="el-icon-plus" v-permissions="['business:hksync:platforms']">同步状态</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="name" label="月台名称" min-width="100px"></el-table-column>
        <el-table-column prop="hkId" label="月台编码" min-width="100px"></el-table-column>
        <el-table-column prop="groupName" label="所属月台组" min-width="100px"></el-table-column>
        <el-table-column prop="workingNum" label="同时叫号车辆数" min-width="100px"></el-table-column>
        <el-table-column prop="alermTime" label="停留超时报警时间(分钟)" min-width="100px">
          <template scope="{row}">{{row.alermTime?(row.alermTime/60):'-'}}</template>
        </el-table-column>
        <el-table-column prop="waitCallTime" label="作业超时报警时间(分钟)" min-width="100px">
          <template scope="{row}"> {{row.waitCallTime?(row.alermTime/60):'-'}}</template>
        </el-table-column>
        <el-table-column prop="workRate" label="月台作业效率(万只/小时)" min-width="100px"></el-table-column>
        <el-table-column prop="status" label="状态" min-width="100px"></el-table-column>
        <el-table-column prop="broadcastName" label="关联广播" min-width="100px"></el-table-column>
        <el-table-column prop="ledName" label="关联LED" min-width="100px"></el-table-column>
        <el-table-column prop="hkDate" label="同步时间" min-width="100px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:platform:update', 'business:platform:delete'])"
          label="操作"
          min-width="120"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaPlatformWindow.open('编辑月台信息表', row)" icon="el-icon-edit" v-permissions="['business:platform:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:platform:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaPlatformWindow ref="operaPlatformWindow" @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 OperaPlatformWindow from '@/components/business/OperaPlatformWindow'
import { syncDevices, updateEntranceById } from '@/api/business/device'
import { syncPlatforms } from '@/api/platform/platform'
export default {
  name: 'Platform',
  extends: BaseTable,
  components: { SearchFormCollapse, TableLayout, Pagination, OperaPlatformWindow },
  data () {
    return {
      // æœç´¢
      working: false,
      working1: false,
      searchForm: {
        name: ''
      }
    }
  },
  created () {
    this.config({
      module: '月台信息表',
      api: '/platform/platform',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    changeManufature (e, row) {
      updateEntranceById({
        id: row.id,
        isEntrance: e
      })
    },
    syncData () {
      this.$dialog.actionConfirm('操作确认提醒', '您确认同步全部信息吗?')
        .then(() => {
          this.isWorking.working = true
          this.api.syncPlatforms({})
            .then(res => {
              this.$tip.apiSuccess(res || '同步成功')
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.working = false
            })
        })
        .catch(() => {})
    },
    syncStatus () {
      this.$dialog.actionConfirm('操作确认提醒', '您确认同步全部信息吗?')
        .then(() => {
          this.isWorking.working = true
          this.api.syncPlatforms({})
            .then(res => {
              this.$tip.apiSuccess(res || '同步成功')
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.working = false
            })
        })
        .catch(() => {})
    }
  }
}
</script>
server/system_gateway/src/main/resources/application.yml
@@ -9,8 +9,8 @@
spring:
  application:
    name: system_gateway
  profiles:
    active: dev
#  profiles:
#    active: dev
  # JSON返回配置
  jackson:
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -107,7 +107,9 @@
    public static final String HK_NGINX_URL = "HK_NGINX_URL";
    public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
    public static  boolean DEALING_HK_SYNCDEVICE = false;
    public static  boolean DEALING_HK_SYNCPLATFORM = false;
    public static  boolean DEALING_HK_SYNCDEVICE_STATUS = false;
    public static  boolean DEALING_HK_SYNCPLATFORM_STATUS = false;
    public static  boolean DEALING_HK_SYNCPARK = false;
    public static  boolean DEALING_HK_IMG = false;
    public static  boolean DEALING_HK_ORG = false;
@@ -899,5 +901,137 @@
        T reqJson =  mapper.readValue(json, clazz);
        return reqJson;
    }
    /**
     * å‘˜å·¥ä¿¡æ¯ç»´æŠ¤æ“ä½œåŽ†å²ç±»åž‹ 0解冻 1冻结 2拉黑 3恢复 4设为拜访人 5取消拜访人 6设为高级审批人 7取消高级审批人 8手动离场 9删除 10更新 11授权门禁权限 12离职 13恢复在职
     */
    public  enum UserActionType {
        CANCEL_FREEZE(0, "解冻","由【${param1}】于【${param2}】,进行【解冻】" ),
        FREEZE(1, "冻结","由【${param1}】于【${param2}】,进行【冻结】" ),
        BLACKLIST(2, "拉黑","由【${param1}】于【${param2}】,进行【拉黑】"),
        CANCEL_BLACKLIST(3, "恢复","由【${param1}】于【${param2}】,进行【移出黑名单】" ),
        CANVISIT(4, "设为拜访人","由【${param1}】于【${param2}】,进行【设为拜访人】" ),
        CANCEL_VISIT(5, "取消拜访人","由【${param1}】于【${param2}】,进行【取消拜访人】" ),
        //续保通知
        HIGHCHECKOR(6, "设为高级审批人","由【${param1}】于【${param2}】,进行【设为高级审批人】" ),
        CANCEL_HIGHCHECKOR(7, "取消高级审批人","由【${param1}】于【${param2}】,进行【取消高级审批人】" ),
        LEVEL(8, "手动离场","由【${param1}】于【${param2}】,进行【手动离场】" ),
        DELETE(9, "删除","由【${param1}】于【${param2}】,进行【删除】" ),
        EDIT(10, "更新","由【${param1}】于【${param2}】,进行【更新】" ),
        AUTH_ROLE(11, "授权门禁权限","由【${param1}】于【${param2}】,进行【授权门禁权限】" ),
        WORK_OFF(12, "离职","由【${param1}】于【${param2}】,进行【离职】操作" ),
        WORK_ON(13, "在职","由【${param1}】于【${param2}】,进行【在职】操作" ),
        IMPORT_TRAIMETIME(14, "导入培训有效","由【${param1}】于【${param2}】,进行【导入培训有效】操作" ),
        BE_HEAD(15, "设为主管","由【${param1}】于【${param2}】,进行【设为主管】操作" ),
        NOT_HEAD(16, "取消主管","由【${param1}】于【${param2}】,进行【取消主管】操作" ),
        ;
        // æˆå‘˜å˜é‡
        private int key;
        private String name;
        private String info;
        // æž„造方法
        UserActionType(int key, String name,String info ) {
            this.key = key;
            this.info = info;
            this.name = name;
        }
        public static String getName(int index) {
            for (UserActionType c : UserActionType.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getInfo() {
            return info;
        }
        public void setInfo(String info) {
            this.info = info;
        }
    }
    /**
     * å…³è”对象类型
     å…³è”对象类型 0企业营业执照 1理赔报案事故视频或图片 2理赔员工关系证明材料 3理赔门诊资料 4理赔住院资料 5理赔伤残资料 6理赔赔付结案材料 7企业身份证号 8保单申请表PDF 9签署后保单申请表PDF 10企业签章 11最终报单
     */
    public  enum MultiFile{
        HIDDEN_DANGER_SUBMIT(0, "隐患随手拍提报", "隐患随手拍提报"),
        HIDDEN_DANGER_DEAL_BEFORE(1, "隐患随手拍处理前", "隐患随手拍处理前"),
        HIDDEN_DANGER_DEAL_AFTER(2, "隐患随手拍处理后 ", "隐患随手拍处理后 "),
        ;
        // æˆå‘˜å˜é‡
        private String name;
        private int key;
        private String noteinfo;// æè¿°
        // æž„造方法
        MultiFile(int key, String name, String noteinfo) {
            this.name = name;
            this.key = key;
            this.noteinfo = noteinfo;
        }
        // æ™®é€šæ–¹æ³•
        public static String getName(int index) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // æ™®é€šæ–¹æ³•
        public static String getInfo(int index) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.noteinfo;
                }
            }
            return null;
        }
        // get set æ–¹æ³•
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getNoteinfo() {
            return noteinfo;
        }
    }
}
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -28,6 +28,9 @@
    @ApiOperation("【访客系统】定时查询设备状态")
    @GetMapping("/timer/device/getAscDeviceStatus")
     ApiResponse getAscDeviceStatus() ;
    @ApiOperation("【访客系统】定时查询月台状态")
    @GetMapping("/timer/platform/getPlatformStatus")
     ApiResponse getPlatformStatus() ;
    @ApiOperation("【访客系统】定时下载海康系统图片数据")
    @GetMapping("/timer/image/downHKImgs")
     ApiResponse downHKImgs();
server/visits/admin_timer/src/main/java/com/doumee/api/HkPlatformTimerController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.doumee.api;
import com.doumee.core.haikang.model.param.request.PlatformStatusRequest;
import com.doumee.core.model.ApiResponse;
import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncPlatformsServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Api(tags = "设备定时器接口")
@RestController
@RequestMapping("/timer/platform")
public class HkPlatformTimerController extends BaseController {
    @Autowired
    private HkSyncPlatformsServiceImpl hkSyncPlatformsService;
    @ApiOperation("开启定时查询月台状态")
    @GetMapping("/getPlatformStatus")
    public ApiResponse getPlatformStatus() {
        hkSyncPlatformsService.getPlatformStatus(new PlatformStatusRequest());
        return ApiResponse.success("开启定时查询月台状态成功");
    }
}
server/visits/admin_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: test
    active: dev
  application:
    name: visitsTimer
    # å®‰å…¨é…ç½®
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -1,20 +1,14 @@
package com.doumee.api.business;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
import com.doumee.core.haikang.model.param.request.EventSubRequest;
import com.doumee.core.haikang.model.param.request.ParkListRequest;
import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventPlatCarstatusRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventPlatWorkstatusRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.model.ApiResponse;
import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncPrivilegeServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
import com.doumee.service.business.impl.hksync.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -42,7 +36,24 @@
    private HkSyncPrivilegeServiceImpl hkSyncPrivilegeService;
    @Autowired
    private HkSyncPushServiceImpl hkSyncPushService;
    @Autowired
    private HkSyncPlatformsServiceImpl hkSyncPlatformsService;
    @PreventRepeat
    @ApiOperation("【海康】全量同步月台信息接口")
    @PostMapping("/syncPlatforms")
    @RequiresPermissions("business:hksync:platforms")
    public ApiResponse syncPlatforms(@RequestBody PlatformsListRequest param) {
        String result = hkSyncPlatformsService.syncPlatforms(param);
        return ApiResponse.success(result);
    }
    @PreventRepeat
    @ApiOperation("【海康】全量同步月台状态信息接口")
    @PostMapping("/syncPlatformStatus")
    @RequiresPermissions("business:hksync:platforms")
    public ApiResponse syncPlatformStatus(@RequestBody PlatformStatusRequest param) {
        String result = hkSyncPlatformsService.getPlatformStatus(param);
        return ApiResponse.success(result);
    }
    @PreventRepeat
    @ApiOperation("【海康】全量同步门禁设备接口")
    @PostMapping("/syncDevices")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -12,6 +12,7 @@
import com.doumee.service.business.impl.hksync.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -27,6 +28,8 @@
public class HkSyncCloudController extends BaseController {
    @Autowired
    private HkSyncPlatformsServiceImpl hkSyncPlatformsService;
    @Autowired
    private HkSyncDeviceServiceImpl hkSyncDeviceService;
    @Autowired
    private HkSyncParkServiceImpl hkSyncParkService;
@@ -36,7 +39,22 @@
    private HkSyncPushServiceImpl hkSyncPushService;
    @Autowired
    private HkSyncLoginAuthServiceImpl hkSyncLoginAuthService;
    @PreventRepeat
    @ApiOperation("【海康】全量同步月台信息接口")
    @PostMapping("/syncPlatforms")
    @CloudRequiredPermission("business:hksync:platforms")
    public ApiResponse syncPlatforms(@RequestBody PlatformsListRequest param) {
        String result = hkSyncPlatformsService.syncPlatforms(param);
        return ApiResponse.success(result);
    }
    @PreventRepeat
    @ApiOperation("【海康】全量同步月台状态信息接口")
    @PostMapping("/syncPlatformStatus")
    @CloudRequiredPermission("business:hksync:platforms")
    public ApiResponse syncPlatformStatus(@RequestBody PlatformStatusRequest param) {
        String result = hkSyncPlatformsService.getPlatformStatus(param);
        return ApiResponse.success(result);
    }
    @PreventRepeat
    @ApiOperation("【海康】全量同步门禁设备接口")
    @PostMapping("/syncDevices")
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: test
    active: dev
  application:
    name: visitsAdmin
    # å®‰å…¨é…ç½®
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -628,8 +628,8 @@
     * @param body
     * @return
     */
    public static String platformStatus(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus,body);
    public static String platformStatus(String param) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus+"?platformIds="+param,null);
    }
    /**
     * èŽ·å–æœˆå°ç»„ä»¶é…ç½®çš„LED设备清单
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformListInfoResponse.java
@@ -2,23 +2,22 @@
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PlatformListInfoResponse {
 private String  deviceIndexCode    ;//String    false    è®¾å¤‡å”¯ä¸€æ ‡è¯†
  private String  platformtId;//    String    false    æœˆå°ID
  private String  platformId;//    String    false    æœˆå°ID
 private List<PlatformCameraInfoResponse> cameras;//    Array    false    å…³è”监控点
 
  private String  cyNames;//    String    false    å…³è”承租公司
 private String  platformName;//    String    false    æœˆå°åç§°
 private String  companyNames;//    String    false    å…³è”作业区
 private String  createTime;//    Number    false    åˆ›å»ºæ—¶é—´
 private Integer  x    ;//Number    false    X坐标
 private Integer  y    ;//Number    false    Y坐标
 private Integer  width;//    Number    false    å®½åº¦
 private Integer  height;//    Number    false    é•¿åº¦
 private Integer  angle;//    Number    false    è§’度
 private BigDecimal  x    ;//Number    false    X坐标
 private BigDecimal  y    ;//Number    false    Y坐标
 private BigDecimal  width;//    Number    false    å®½åº¦
 private BigDecimal  height;//    Number    false    é•¿åº¦
 private BigDecimal angle;//    Number    false    è§’度
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1118,7 +1118,7 @@
    public  static  BaseResponse<BaseListPageResponse<PlatformStatusInfoResponse>>   platformStatus(PlatformStatusRequest param) {
        log.info("【海康获取全部月台信息】================开始====" + JSONObject.toJSONString(param));
        try {
            String res = HKTools.platformStatus(JSONObject.toJSONString(param));
            String res = HKTools.platformStatus(param.getPlatformIds());
            TypeReference typeReference =
                    new TypeReference<BaseResponse<BaseListPageResponse<PlatformStatusInfoResponse>>>() {
                    };
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -80,9 +81,10 @@
    @ExcelColumn(name="同时作业数量")
    private Integer workingNum;
    @ApiModelProperty(value = "等待教好时间(秒)", example = "1")
    @ExcelColumn(name="等待教好时间(秒)")
    private Integer wariCallTime;
    @ApiModelProperty(value = "作业超时报警时间(秒)", example = "1")
    @ExcelColumn(name="作业超时报警时间(秒)")
    private Integer waitCallTime;
    @ApiModelProperty(value = "停留超时报警时间(秒)", example = "1")
    @ExcelColumn(name="停留超时报警时间(秒)")
@@ -104,6 +106,9 @@
    @ApiModelProperty(value = "海康标识")
    @ExcelColumn(name="海康标识")
    private String hkId;
    @ApiModelProperty(value = "海康标识同步时间")
    @ExcelColumn(name="海康标识同步时间")
    private Date hkDate;
    @ApiModelProperty(value = "关联承租公司")
    @ExcelColumn(name="关联承租公司")
@@ -128,5 +133,15 @@
    @ApiModelProperty(value = "角度", example = "1")
    @ExcelColumn(name="角度")
    private BigDecimal angle;
    @ApiModelProperty(value = "月台作业效率(万支/小时)", example = "1")
    @ExcelColumn(name="月台作业效率(万支/小时)")
    private BigDecimal workRate;
    @ApiModelProperty(value = "广播名称", example = "1")
    @TableField(exist = false)
    private String broadcastName;
    @ApiModelProperty(value = "led名称", example = "1")
    @TableField(exist = false)
    private String ledName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -62,6 +62,8 @@
    void syncUserData();
    void syncVistAppointData(Date date);
    void syncVehicleData();
    String syncPlatforms(PlatformsListRequest param);
    String getPlatformStatus(PlatformStatusRequest param);
    void syncVehicleUpdateData(Date date);
    void syncUserUpdateData(Date start, Date end);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
@@ -106,7 +106,6 @@
                .eq(pageWrap.getModel().getStartTime() != null, Platform::getStartTime, pageWrap.getModel().getStartTime())
                .eq(pageWrap.getModel().getEndTime() != null, Platform::getEndTime, pageWrap.getModel().getEndTime())
                .eq(pageWrap.getModel().getWorkingNum() != null, Platform::getWorkingNum, pageWrap.getModel().getWorkingNum())
                .eq(pageWrap.getModel().getWariCallTime() != null, Platform::getWariCallTime, pageWrap.getModel().getWariCallTime())
                .eq(pageWrap.getModel().getAlermTime() != null, Platform::getAlermTime, pageWrap.getModel().getAlermTime())
                .ge(pageWrap.getModel().getLastEventTime() != null, Platform::getLastEventTime, Utils.Date.getStart(pageWrap.getModel().getLastEventTime()))
                .le(pageWrap.getModel().getLastEventTime() != null, Platform::getLastEventTime, Utils.Date.getEnd(pageWrap.getModel().getLastEventTime()))
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java
@@ -106,8 +106,6 @@
                .eq(pageWrap.getModel().getDriverName() != null, PlatformWmsJob::getDriverName, pageWrap.getModel().getDriverName())
                .eq(pageWrap.getModel().getCarrierName() != null, PlatformWmsJob::getCarrierName, pageWrap.getModel().getCarrierName())
                .eq(pageWrap.getModel().getCarryBillCode() != null, PlatformWmsJob::getCarryBillCode, pageWrap.getModel().getCarryBillCode())
                .ge(pageWrap.getModel().getIoCreatedate() != null, PlatformWmsJob::getIoCreatedate, Utils.Date.getStart(pageWrap.getModel().getIoCreatedate()))
                .le(pageWrap.getModel().getIoCreatedate() != null, PlatformWmsJob::getIoCreatedate, Utils.Date.getEnd(pageWrap.getModel().getIoCreatedate()))
                .eq(pageWrap.getModel().getStatus() != null, PlatformWmsJob::getStatus, pageWrap.getModel().getStatus())
                .ge(pageWrap.getModel().getCancelDate() != null, PlatformWmsJob::getCancelDate, Utils.Date.getStart(pageWrap.getModel().getCancelDate()))
                .le(pageWrap.getModel().getCancelDate() != null, PlatformWmsJob::getCancelDate, Utils.Date.getEnd(pageWrap.getModel().getCancelDate()))
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -112,6 +112,12 @@
    }
    public  void syncVehicleData(){
    }
    public  String syncPlatforms(PlatformsListRequest param){
        return null;
    }
    public  String getPlatformStatus(PlatformStatusRequest param){
        return null;
    }
    @Override
    public  void syncVehicleUpdateData(Date date){
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
package com.doumee.service.business.impl.hksync;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseListPageResponse;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.respose.*;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.DeviceMapper;
import com.doumee.dao.business.PlatformMapper;
import com.doumee.dao.business.model.Device;
import com.doumee.dao.business.model.Platform;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * è®¾å¤‡ä¿¡æ¯è¡¨Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Service
public class HkSyncPlatformsServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private PlatformMapper platformMapper;
    /**
     * åŒæ­¥æµ·åº·æœˆå°æ•°æ®
     * @param param
     * @return
     */
    @Override
//    @Async
    public String syncPlatforms(PlatformsListRequest param){
        if(Constants.DEALING_HK_SYNCPLATFORM){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ;
        }
        Constants.DEALING_HK_SYNCPLATFORM =true;
        try {
            List<Platform> deleteList = new ArrayList<>();
            List<Platform> addList = new ArrayList<>();
            List<Platform> editList = new ArrayList<>();
            Date date = new Date();
            //查询全部门禁设备数据
            List<Platform> allList = platformMapper.selectList(null);
            List<PlatformListInfoResponse> allHkList = getAllHkList(param);
            /**
             * èŽ·å–å¢žåˆ æ”¹æ•°æ®é›†åˆ
             */
            getDataChangeList(allList,allHkList,addList,editList,deleteList,date);
            if(deleteList.size()>0){
                //逻辑删除
                for(Platform d : deleteList){
                    platformMapper.updateById(d);
                }
            }
            if(addList.size()>0){
                platformMapper.insert(addList);
            }
            if(editList.size()>0){
                for(Platform d : editList){
                    platformMapper.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_SYNCPLATFORM =false;
        }
    }
    @Override
//    @Async
    public String getPlatformStatus(PlatformStatusRequest param){
        if(Constants.DEALING_HK_SYNCPLATFORM_STATUS){
            return null;
        }
        Constants.DEALING_HK_SYNCPLATFORM_STATUS =true;
        try {
            List<Device> editList = new ArrayList<>();
            Date date = new Date();
            //查询全部门禁设备数据
            List<PlatformStatusInfoResponse> allHkList = getAllHKStatusList(param);
            if(allHkList.size()>0){
                //更新状态 (月台状态 0-无车 1-有车 2-超时停靠 3-错误停靠)
                for(PlatformStatusInfoResponse d : allHkList){
                    platformMapper.update(null,new UpdateWrapper<Platform>().lambda()
                            .set(Platform::getStatus,d.getStatus())
                            .set(Platform::getEditDate,date)
                            .eq(Platform::getHkId,d.getPlatformtId()));
                }
            }
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步设备状态失败!");
        }finally {
            Constants.DEALING_HK_SYNCPLATFORM_STATUS =false;
        }
        return "同步成功";
    }
    private List<PlatformListInfoResponse> getAllHkList(PlatformsListRequest param) {
        BaseResponse<BaseListPageResponse<PlatformListInfoResponse>> response = HKService.platformsList(param);
        if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData() ==null){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
        }
        return response.getData().getList();
    }
    public  List<PlatformStatusInfoResponse>  getAllHKStatusList(PlatformStatusRequest param){
            //分页遍历循环查询所有门禁设备数据
            BaseResponse<BaseListPageResponse<PlatformStatusInfoResponse>> response = HKService.platformStatus(param);
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData() ==null){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
          return  response.getData().getList();
    }
    private AcsDeviceInfoResponse getDeviceByDoorid(String indexCode, List<AcsDeviceInfoResponse> allHkList ) {
        if(allHkList!=null && allHkList.size()>0){
            for(AcsDeviceInfoResponse info : allHkList){
                if(StringUtils.equals(indexCode,info.getIndexCode())){
                 return info;
                }
            }
        }
        return new AcsDeviceInfoResponse();
    }
    private void getDataChangeList(List<Platform> allList,
                                   List<PlatformListInfoResponse> allHkList,
                                   List<Platform> addList,
                                   List<Platform> editList,
                                   List<Platform> deleteList, Date date) {
        if(allHkList!=null && allHkList.size()>0){
            //获取海康全部门禁组数据
            for(PlatformListInfoResponse device : allHkList){
                Platform model = getExistedDevice(device,allList);
                if(model !=null){
                    //如果已存在,则更新数据
                    model =  initDataByHkData(model,device,date);
                    editList.add(model);
                }else{
                    //如果不存在,则新增数据
                    model = new Platform();
                    model =  initDataByHkData(model,device,date);
                    addList.add(model);
                }
            }
        }
        //判断获取删除的门禁设备,逻辑删除
        getDeleteList(allList,allHkList,deleteList,date);
    }
    /**
     * åˆå§‹åŒ–海康入库数据
     * @param model
     * @param device
     * @param date
     * @return
     */
    private Platform initDataByHkData(Platform model, PlatformListInfoResponse device,Date date ) {
        model.setIsdeleted(Constants.ZERO);
        model.setHkDate(date);
        model.setHkId(device.getPlatformId());
        model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime()));
        model.setName(device.getPlatformName());
        model.setCompanys(device.getCompanyNames());
        model.setAngle(device.getAngle());
        model.setXpos(device.getX());
        model.setYpos(device.getY());
        model.setWidth(device.getWidth());
        model.setHeight(device.getHeight());
        model.setRemark(JSONObject.toJSONString(device));
        return  model;
    }
    private Platform getExistedDevice(PlatformListInfoResponse device, List<Platform> allList) {
        if(allList.size()>0){
            for(Platform r : allList){
                if(StringUtils.equals(r.getHkId(), device.getPlatformId())){
                    //表示未删除
                    return  r;
                }
            }
        }
        return  null;
    }
    private void getDeleteList(List<Platform> allList, List<PlatformListInfoResponse> allHkList,List<Platform> deleteList ,Date date) {
        if(allList!=null && allList.size()>0){
            for(Platform device : allList){
                if(isDeletedData(device,allHkList)){
                    device.setIsdeleted(Constants.ONE);
                    device.setEditDate(date);
                    deleteList.add(device);
                }
            }
        }
    }
    private boolean isDeletedData(Platform device, List<PlatformListInfoResponse> allHkList) {
        if(allHkList.size()>0){
            for(PlatformListInfoResponse r : allHkList){
                if(StringUtils.equals(device.getHkId(), r.getPlatformId())){
                    //表示未删除
                    return  false;
                }
            }
        }
        return  true;
    }
}