liukangdong
2025-02-27 98250a7cff913563152ae8b313c7f45cc27545ba
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
已添加3个文件
已删除2个文件
已修改64个文件
1547 ■■■■ 文件已修改
admin/src/api/business/visits.js 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/platform/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerParamWindow.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerWindow.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/operation/OperCarUseBookParamWindow.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/carEvent.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceEvent.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/reportRecord.vue 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/retention.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/retentionCars.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/userAction.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/userActionOther.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitEvent.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visits.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/record.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprRecord.vue 202 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/subscribe.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/waybill.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/RoomDetailResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/config/CustomWebFilterConfig.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/dao/MemberMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/dao/UserActionMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/model/UserAction.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/business/third/model/TMSContants.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/UserActionController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/UserActionCloudController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/UserActionMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/DeviceJoinMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/UserActionJoinMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/UserAction.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/RetentionCarsVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformBooksService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/UserActionService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/UserActionServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncNoticeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/visits.js
admin/src/api/platform/index.js
@@ -107,7 +107,7 @@
}
// æœˆå°è°ƒåº¦ä½œä¸šä»»åŠ¡ åˆ é™¤
export function platformJobDel(id) {
  return request.get('/visitsAdmin/cloudService/business/platformJob/delete?id=' + id)
  return request.get('/visitsAdmin/cloudService/business/platformJob/delete/' + id)
}
// æœˆå°è¿å•详情
export function platformWmsJobDetail(id) {
admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -4,7 +4,7 @@
      <el-form-item label="名称" prop="name">
        <el-input v-model="form.name" placeholder="请输入名称" v-trim />
      </el-form-item>
      <el-form-item label="责任部门" prop="companyId">
      <el-form-item label="责任部门" prop="companyId" v-if="form.type == 0">
        <el-select filterable clearable @change="() => loadMember(1)" v-model="form.companyId">
          <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
        </el-select>
@@ -84,6 +84,9 @@
        for (const key in this.form) {
          this.form[key] = target[key]
          this.form.type = type
          if(type == 0){
            this.loadMember(1)
          }
          if (this.form.type == 0 && target.memberIds != null && target.memberIds != '') {
            const t = target.memberIds.split(',')
            this.form.memberIdList = []
admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -161,9 +161,9 @@
          <el-select v-model="transForm.memberId" style="width: 300px"  filterable clearable placeholder="请选择转交安全员">
            <el-option
                v-for="item in memberList"
                :key="item.id"
                :label="item.name"
                :value="item.id">
                :key="item.memberId"
                :label="item.companyName ? `${item.realname}-${item.companyName}` : item.realname"
                :value="item.memberId">
            </el-option>
          </el-select>
        </el-form-item>
@@ -266,6 +266,7 @@
import dayjs from 'dayjs'
import { memberList } from '@/api/business/hiddenDangerParam'
import { mapState } from 'vuex'
import {findAllList as userList} from "@/api/system/user";
export default {
  components: { GlobalWindow, upload },
  extends: BaseOpera,
@@ -539,9 +540,13 @@
      this.loadMemberList()
    },
    loadMemberList () {
      memberList({}).then(res => {
        this.memberList = res
      userList({ queryParam: this.filterText, querySpecial: 1, type: 2, companyType: 1, workStatus: 0 })
        .then(res => {
          this.memberList = res || []
      })
      /*memberList({}).then(res => {
        this.memberList = res
      })*/
    },
    reject () { },
    handleAvatarSuccess () { },
admin/src/components/operation/OperCarUseBookParamWindow.vue
@@ -29,7 +29,9 @@
        </el-form-item>
        <el-form-item label="乘车人员" prop="memberIds">
          <el-select v-model="form.memberIds" multiple filterable placeholder="请选择">
            <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id">
            <el-option v-for="item in memberList"
                       :key="item.memberId" :value="item.memberId"
                       :label="item.companyName ? `${item.realname}-${item.companyName}` : item.realname" >
            </el-option>
          </el-select>
        </el-form-item>
@@ -186,6 +188,7 @@
import { carCanReservationDate, carUseBookCraete, carUseBookList, detail } from '@/api/business/carUseBook'
import { findTypeMemberInfo } from '@/api/business/memberCard'
import dayjs from 'dayjs'
import { findAllList as userList } from '@/api/system/user'
export default {
  name: 'OperCarUseBookParamWindow',
@@ -301,12 +304,12 @@
        const memberList = []
        form.memberIds.forEach(i => {
          this.memberList.forEach(item => {
            if (i === item.id) {
            if (i === item.memberId) {
              memberList.push(item)
            }
          })
        })
        form.memberNames = memberList.map(i => i.name).join(',')
        form.memberNames = memberList.map(i => i.realname).join(',')
        form.memberList = memberList
        form.memberIds = form.memberIds.join(',')
        form.startTime = form.startTime + ':00'
@@ -428,7 +431,7 @@
        this.selDatetime = ''
        this.selPastDatetime = ''
      } else {
        let pastList = selTimeLists.filter(i => i.pastFlag)
        const pastList = selTimeLists.filter(i => i.pastFlag)
        if(pastList.length > 0){
          this.selPastDatetime = '当前选择包含已经过去时间,请确认后再提交;'
        }else{
@@ -476,7 +479,6 @@
          i.checked = '0',
          i.index = j
        })
      })
    },
    initData() {
@@ -485,13 +487,17 @@
      }).then(res => {
        this.carsList = res
      })
      findTypeMemberInfo({
      userList({ queryParam: this.filterText, querySpecial: 1, type: 2, companyType: 1, workStatus: 0 })
        .then(res => {
          this.memberList = res || []
        })
      /* findTypeMemberInfo({
        type: '2',
        companyType: 1,
        querySpecial: 1
      }).then(res => {
        this.memberList = res || []
      })
      }) */
    }
  }
}
@@ -565,7 +571,6 @@
    border: #cccccc solid 1px;
    cursor: pointer;
  }
  .disable {
    color: #fff;
admin/src/views/business/carEvent.vue
@@ -54,6 +54,16 @@
        </li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
        <el-table-column label="人员类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.companyType == 0">相关方组织</span>
            <span v-else-if="row.companyType == 1">内部员工</span>
            <span v-else>访客</span>
          </template>
        </el-table-column>
        <el-table-column prop="plateNos" label="车牌号" min-width="100px"></el-table-column>
        <el-table-column prop="parkName" label="停车库名称" min-width="100px"></el-table-column>
        <el-table-column prop="gateName" label="出入口名称" min-width="100px"></el-table-column>
@@ -64,16 +74,6 @@
            <span v-if="row.inoutType === 1">离园</span>
          </template>
        </el-table-column>
        <el-table-column label="人员类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.companyType == 0">相关方组织</span>
            <span v-else-if="row.companyType == 1">内部员工</span>
            <span v-else>访客</span>
          </template>
        </el-table-column>
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
        <el-table-column label="车牌抓拍图" min-width="100px">
          <template slot-scope="{ row }">
            <div v-if="row.platePicUrl != null">
admin/src/views/business/deviceEvent.vue
@@ -58,6 +58,10 @@
                        <span v-if="row.personType == null">外来访客</span>
                    </template>
</el-table-column> -->
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="personIdcardDecode" label="证件号" min-width="100px"></el-table-column>
        <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
        <el-table-column label="人员类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.companyType == 0">相关方组织</span>
@@ -83,10 +87,7 @@
          </template>
        </el-table-column>
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="personPhone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="personIdcardDecode" label="证件号" min-width="100px"></el-table-column>
        <el-table-column prop="personCompanyName" label="组织" min-width="100px"></el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
admin/src/views/business/reportRecord.vue
@@ -1,32 +1,77 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="query_btns" style="margin: 16px 0 0"
      v-permissions="['business:visits:create', 'business:visits:exportExcel']">
      <el-button type="primary" @click="handleEdit()" icon="el-icon-plus"
        v-permissions="['business:visits:create']">新建</el-button>
      <el-button type="primary" :loading="exLoading" @click="exportExcel"
        v-permissions="['business:visits:exportExcel']">导出</el-button>
    <QueryForm
      v-model="filters"
      :query-form-config="queryFormConfig"
      @handleQuery="getList(1)"
      @clear="clear"
    />
    <div class="query_btns" style="margin: 16px 0 0" v-permissions="['business:visits:create', 'business:visits:exportExcel']">
      <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" v-permissions="['business:visits:create']">新建</el-button>
      <el-button type="primary" :loading="exLoading" @click="exportExcel" v-permissions="['business:visits:exportExcel']">导出</el-button>
    </div>
    <el-table v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
    <el-table
      v-loading="loading"
      :data="dataList"
      stripe
      row-key="id"
      default-expand-all
    >
      <el-table-column type="selection" width="55" align="center"></el-table-column>
      <el-table-column prop="carNos" label="入园车辆" min-width="100px"></el-table-column>
      <el-table-column prop="companyName" label="公司名称" min-width="100px"></el-table-column>
      <el-table-column prop="name" label="联系人信息" min-width="100px"></el-table-column>
      <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
      <el-table-column prop="receptMemberName" label="被访人" min-width="100px"></el-table-column>
      <el-table-column
        prop="carNos"
        label="入园车辆"
        min-width="100px"
      ></el-table-column>
      <el-table-column
        prop="companyName"
        label="公司名称"
        min-width="100px"
      ></el-table-column>
      <el-table-column
        prop="name"
        label="联系人信息"
        min-width="100px"
      ></el-table-column>
      <el-table-column
        prop="phone"
        label="手机号"
        min-width="100px"
      ></el-table-column>
      <el-table-column
        prop="receptMemberName"
        label="被访人"
        min-width="100px"
      ></el-table-column>
      <el-table-column label="拜访时间" min-width="160px">
        <template slot-scope="{ row }">
          <span>起:{{ row.starttime }}</span><br />
          <span>起:{{ row.starttime }}</span
          ><br />
          <span>止:{{ row.endtime }}</span>
        </template>
      </el-table-column>
      <el-table-column prop="reason" label="拜访事由" min-width="100"></el-table-column>
      <el-table-column prop="status" fixed="right" label="状态" align="center" min-width="100">
      <el-table-column
        prop="reason"
        label="拜访事由"
        min-width="100"
      ></el-table-column>
      <el-table-column
        prop="status"
        fixed="right"
        label="状态"
        align="center"
        min-width="100"
      >
        <template slot-scope="{ row }">
          <span style="color: rgba(245, 154, 35, 0.996)" v-if="row.status === 0">待提交审批</span>
          <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996)">处理中</span>
          <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996)">已同意</span>
          <span style="color: rgba(245, 154, 35, 0.996)" v-if="row.status === 0"
            >待提交审批</span
          >
          <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996)"
            >处理中</span
          >
          <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996)"
            >已同意</span
          >
          <span style="color: gray" v-if="row.status === 3">已拒绝</span>
          <span v-if="row.status === 4" style="color: gray">取消</span>
          <span v-if="row.status === 5" style="color: green">下发成功</span>
@@ -36,16 +81,23 @@
          <span v-if="row.status === 9" style="color: gray">已失效</span>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" width="100" fixed="right">
      <el-table-column label="操作" align="center" width="180" fixed="right">
        <template slot-scope="{ row }">
          <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">查看详情</el-button>
          <el-button
            type="text"
            @click="handleDetail(row)"
            v-permissions="['business:company:update']">查看详情</el-button>
          <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:visits:delete']">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    <pagination
      @size-change="handleSizeChange"
      @current-change="getList"
      :pagination="pagination"
    />
    <ReportDetail v-if="isShowReport" ref="VisReportDetailRef" />
    <OperaVisitsReportWindow @close="isShowEdit = false" @success="getList" v-if="isShowEdit"
      ref="operaVisitsWindowRef" />
    <OperaVisitsReportWindow @close="isShowEdit = false" @success="getList"  v-if="isShowEdit" ref="operaVisitsWindowRef" />
  </div>
</template>
@@ -55,7 +107,7 @@
// import ReportDetail from './page-components/ReportDetail.vue'
import ReportDetail from '@/views/task/visReportDetail.vue'
import OperaVisitsReportWindow from '@/components/business/operaVisitsReportWindow.vue'
import { fetchList, exportExcel } from '@/api/business/visits'
import { fetchList, exportExcel, deleteById } from '@/api/business/visits'
export default {
  components: {
    ReportDetail,
@@ -132,6 +184,21 @@
        this.$refs.operaVisitsWindowRef.isShowModal = true
      })
    },
    deleteById (row) {
      this.$confirm('确定删除该记录吗, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteById(row.id)
          .then(res => {
            this.$message.success('操作成功')
            this.page = 1
            this.getList()
          })
      }).catch(() => {
      })
    },
    handleDetail(row) {
      this.isShowReport = true
      this.$nextTick(() => {
@@ -146,23 +213,19 @@
    getList(page) {
      const { pagination, filters } = this
      pagination.page = page || pagination.page
      this.loading = true
      fetchList({
        model: { ...filters },
        ...pagination
      }).then(res => {
        this.loading = false
        this.dataList = res.records || []
        this.pagination.total = res.total
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {
        type: 2
      }
      this.getList(1)
      this.getList(0)
    },
    handleSizeChange(capacity) {
      this.pagination.capacity = capacity
@@ -172,4 +235,5 @@
}
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
</style>
admin/src/views/business/retention.vue
@@ -40,6 +40,9 @@
      </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="phone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="idcardDecode" label="身份证号" min-width="130px"></el-table-column>
        <el-table-column prop="companyName" label="组织" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.type === 2 || row.type === 0">{{
@@ -55,9 +58,6 @@
            <span v-else>访客</span>
          </template>
        </el-table-column>
        <el-table-column prop="name" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="idcardDecode" label="身份证号" min-width="130px"></el-table-column>
        <el-table-column label="进场门禁" min-width="100px">
          <template slot-scope="{ row }">
            <!-- <span v-if="row.type === 1">-</span> -->
admin/src/views/business/retentionCars.vue
@@ -19,6 +19,7 @@
          <el-option label="内运物流车" value="3"></el-option>
          <el-option label="外协车辆" value="4"></el-option>
          <el-option label="市公司卸货车" value="5"></el-option>
          <el-option label="未登记车辆" value="6"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="起止时间" prop="startTime">
@@ -61,6 +62,7 @@
            <span v-else-if="row.carType == 3">内运物流车</span>
            <span v-else-if="row.carType == 4">外协车辆</span>
            <span v-else-if="row.carType == 5">市公司卸货车</span>
            <span v-else-if="row.carType == 6">未登记车辆</span>
          </template>
        </el-table-column>
        <el-table-column prop="name" label="姓名" min-width="100px"></el-table-column>
admin/src/views/business/userAction.vue
@@ -47,6 +47,13 @@
                    <el-option label="取消高级审批人" :value="7"></el-option>
                    <el-option label="手动离场" :value="8"></el-option>
                    <el-option label="删除" :value="9"></el-option>
                <el-option label="更新" :value="10"></el-option>
                <el-option label="授权门禁权限" :value="11"></el-option>
                <el-option label="离职" :value="12"></el-option>
                <el-option label="在职" :value="13"></el-option>
                <el-option label="导入培训有效期" :value="14"></el-option>
                <el-option label="设为主管" :value="15"></el-option>
                <el-option label="取消主管" :value="16"></el-option>
                </el-select>
            </el-form-item>
            <section>
@@ -123,6 +130,7 @@
          companyName: '',
          memberType: '',
          mobile: '',
          objType:0,
          beforeStatus: '',
          type: ''
        }
admin/src/views/business/userActionOther.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
<template>
    <TableLayout :permissions="['business:useraction:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="操作内容" prop="createName">
                <el-input v-model="searchForm.remark" placeholder="请输入操作内容" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="操作类型" prop="type">
                <el-select v-model="searchForm.type" placeholder="请选择">
                    <el-option label="删除会议室申请" :value="17"></el-option>
                    <el-option label="删除访客申请" :value="18"></el-option>
                    <el-option label="删除访客报备" :value="19"></el-option>
                    <el-option label="删除月台预约任务" :value="20"></el-option>
                    <el-option label="删除公车申请" :value="21"></el-option>
                    <el-option label="删除安泰物流作业任务" :value="22"></el-option>
                    <el-option label="删除隐患随手拍" :value="23"></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>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
              <el-table-column prop="createName" label="操作人员"></el-table-column>
              <el-table-column  prop="typeName" label="操作类型" />
              <el-table-column  prop="remark" label="操作内容" width="900"/>
              <el-table-column prop="createDate" label="操作时间"></el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
    </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
export default {
  name: 'UserAction',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  data () {
    return {
      // æœç´¢
      searchForm: {
        createName: '',
        memberName: '',
        companyName: '',
        memberType: '',
        mobile: '',
        objType: 1,
        beforeStatus: '',
        type: ''
      }
    }
  },
  created () {
    this.config({
      module: '人员操作记录日志',
      api: '/business/userAction',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  }
}
</script>
admin/src/views/business/visitEvent.vue
@@ -18,9 +18,22 @@
          <el-option label="访客通行" value="541200060"></el-option>
        </el-select>
      </el-form-item>
            <el-form-item label="进出类型" prop="inOrOut">
                <el-select v-model="searchForm.inOrOut" placeholder="请选择">
                    <el-option label="进" value="0"></el-option>
                    <el-option label="出" value="1"></el-option>
                </el-select>
            </el-form-item>
      <el-form-item label="起始时间" prop="carNo">
        <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
                <el-date-picker
                    @change="seleTime"
                    v-model="time"
                    type="datetimerange"
                    format="yyyy-MM-dd HH:mm:ss"
                    value-format="yyyy-MM-dd HH:mm:ss"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
@@ -36,10 +49,13 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:visitevent:exportExcel']">
        <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:visitevent:exportExcel']"
            @click="exportExcel">导出</el-button></li>
                <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:visitevent:exportExcel']" @click="exportExcel">导出</el-button></li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
        <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号码" min-width="100px"></el-table-column>
        <el-table-column prop="idcardDecode" label="身份证号码" min-width="100px"></el-table-column>
@@ -48,16 +64,29 @@
        <el-table-column prop="beVisitedPersonName" label="被访人" min-width="100px"></el-table-column>
        <el-table-column prop="beVisitedPersonOrg" label="被访人组织" min-width="100px"></el-table-column>
        <el-table-column prop="eventTypeName" label="事件类型" min-width="100px"></el-table-column>
                <el-table-column prop="inOrOut" label="进出类型" min-width="100px">
                  <template slot-scope="{row}">
                    <span v-if="row.inOrOut == '0'">进</span>
                    <span v-else-if="row.inOrOut == '1'">出</span>
                    <span v-else>-</span>
                  </template>
                </el-table-column>
        <el-table-column label="抓拍图" min-width="100px">
          <template slot-scope="{row}">
            <el-image v-if="row.captureUrlFull != null" style="width: 80px; height: 80px" :src="row.captureUrlFull"
                        <el-image v-if="row.captureUrlFull!=null"
                            style="width: 80px; height: 80px"
                            :src="row.captureUrlFull"
              :preview-src-list="[row.captureUrlFull]">
            </el-image>
          </template>
        </el-table-column>
        <el-table-column prop="createDate" label="事件时间" min-width="100px"></el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
      </pagination>
    </template>
  </TableLayout>
@@ -82,6 +111,7 @@
        startTime: '',
        endTime: '',
        eventType: '',
        inOrOut: null,
        visitorWorkUint: '',
        radio: '0'
      },
@@ -125,8 +155,8 @@
    reset() {
      this.$refs.searchForm.resetFields()
      this.time = []
      this.searchForm.radio = ''
      // this.changeRadio('0')
      this.searchForm.radio = '0'
      this.changeRadio('0')
      this.search()
    }
  }
admin/src/views/business/visits.vue
@@ -96,6 +96,7 @@
              icon="el-icon-edit" v-if="row.status == 6">重新下发</el-button>
            <!-- <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('详情', row.id)" icon="el-icon-view">详情</el-button> -->
            <el-button type="text" @click="handleDetail(row)" icon="el-icon-view">详情</el-button>
            <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:visits:delete']">删除</el-button>
            <!--                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">查询审批结果</el-button>-->
          </template>
        </el-table-column>
@@ -164,15 +165,16 @@
      })
    },
    departure(id) {
      this.$confirm('确定离厂吗, æ˜¯å¦ç»§ç»­?', '提示', {
      this.$confirm('确定进行离场操作吗,该操作不可逆请谨慎操作, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        level(id)
        this.api.level(id)
          .then(res => {
            this.$message.success('操作成功')
            this.page = 1
            this.getData()
            this.search()
          })
      }).catch(() => {
@@ -184,10 +186,10 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        visitCancel(id)
        this.api.visitCancel(id)
          .then(res => {
            this.page = 1
            this.getData()
            this.search()
          })
      }).catch(() => {
@@ -202,7 +204,7 @@
        this.api.visitResend(id)
          .then(res => {
            this.page = 1
            this.getData()
            this.search()
          })
      }).catch(() => {
admin/src/views/operation/danger/record.vue
@@ -6,22 +6,28 @@
        <el-input v-model="searchForm.memberName" placeholder="请输入姓名" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="提报人组织" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入" clearable
          @keypress.enter.native="search"></el-input>
        <el-input v-model="searchForm.companyName" placeholder="请输入" clearable @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="责任部门" prop="dutyCompanyName">
        <el-input v-model="searchForm.dutyCompanyName" placeholder="请输入责任部门" clearable
          @keypress.enter.native="search"></el-input>
        <el-input v-model="searchForm.dutyCompanyName" placeholder="请输入责任部门" clearable @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="隐患区域" prop="areaId">
        <el-select v-model="searchForm.areaId" placeholder="请选择隐患区域" clearable @change="search">
          <el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id">
          <el-option
              v-for="item in areaList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="隐患类型" prop="cateId">
        <el-select v-model="searchForm.cateId" placeholder="请选择隐患类型" clearable @change="search">
          <el-option v-for="item in cateList" :key="item.id" :label="item.name" :value="item.id">
          <el-option
              v-for="item in cateList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
@@ -33,9 +39,17 @@
        </el-select>
      </el-form-item>
      <el-form-item label="提报时间" prop="startTime">
        <el-date-picker @change="seleTime" v-model="time" @keypress.enter.native="search" type="datetimerange"
          format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']"
          range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
        <el-date-picker
            @change="seleTime"
            v-model="time"
            @keypress.enter.native="search"
            type="datetimerange"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
            :default-time="['00:00:00', '23:59:59']"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
@@ -51,12 +65,15 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:hiddendanger:create', 'business:hiddendanger:exportExcel']">
        <li><el-button type="primary" icon="el-icon-plus" v-permissions="['business:hiddendanger:create']"
            @click="handleEdit">新建</el-button></li>
        <li><el-button type="primary" v-permissions="['business:hiddendanger:exportExcel']"
            @click="handleEx">导出</el-button></li>
        <li><el-button type="primary" icon="el-icon-plus" v-permissions="['business:hiddendanger:create']" @click="handleEdit">新建</el-button></li>
        <li><el-button type="primary" v-permissions="['business:hiddendanger:exportExcel']" @click="handleEx">导出</el-button></li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
      <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="dutyCompanyName" label="责任部门" min-width="150px"></el-table-column>
        <el-table-column prop="areaName" label="隐患区域" min-width="150px"></el-table-column>
@@ -72,14 +89,22 @@
          </template>
        </el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="150px"></el-table-column>
        <el-table-column label="操作" min-width="100" fixed="right">
        <el-table-column
            label="操作"
            min-width="180"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit"
              @click="$refs.OperaHiddenDangerWindow.open('隐患随手拍详情', row)">查看详情</el-button>
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaHiddenDangerWindow.open('隐患随手拍详情',row)" >查看详情</el-button>
            <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:hiddendanger:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="handlePageChange" />
@@ -108,7 +133,6 @@
        memberName: '',
        companyName: '',
        queryStartTime: '',
        companyName: '',
        queryEndTime: '',
        areaId: null,
        cateId: null,
@@ -201,20 +225,9 @@
    },
    reset() {
      this.$refs.searchForm.resetFields()
      this.time = []
      this.searchForm = {
        memberName: '',
        companyName: '',
        queryStartTime: '',
        companyName: '',
        queryEndTime: '',
        areaId: null,
        cateId: null,
        status: null,
        radio: ''
      }
      // this.changeRadio('0')
      this.search()
      this.searchForm.radio = '0'
      this.changeRadio('0')
      // this.search()
    }
  }
}
admin/src/views/operation/serviceCar/apprRecord.vue
@@ -1,20 +1,43 @@
<template>
  <TableLayout :permissions="['business:empower:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
    <el-form
      ref="searchForm"
      slot="search-form"
      :model="searchForm"
      label-width="100px"
      inline
    >
      <el-form-item label="申请人" prop="memberName">
        <el-input v-model="searchForm.memberName" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
        <el-input
          v-model="searchForm.memberName"
          placeholder="请输入姓名/手机号"
          @keypress.enter.native="search"
        ></el-input>
      </el-form-item>
      <el-form-item label="申请人组织" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入申请人组织" clearable
          @keypress.enter.native="search"></el-input>
        <el-input
          v-model="searchForm.companyName"
          placeholder="请输入申请人组织"
          clearable
          @keypress.enter.native="search"
        ></el-input>
      </el-form-item>
      <el-form-item label="车牌号" prop="carCode">
        <el-input v-model="searchForm.carCode" placeholder="请输入车牌号" clearable
          @keypress.enter.native="search"></el-input>
        <el-input
          v-model="searchForm.carCode"
          placeholder="请输入车牌号"
          clearable
          @keypress.enter.native="search"
        ></el-input>
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="searchForm.status" @change="search" clearable placeholder="状态">
        <el-select
          v-model="searchForm.status"
          @change="search"
          clearable
          placeholder="状态"
        >
          <el-option label="申请中" value="0"></el-option>
          <el-option label="审核中" value="1"></el-option>
          <el-option label="审批通过" value="2"></el-option>
@@ -23,18 +46,36 @@
        </el-select>
      </el-form-item>
      <el-form-item label="目的地类型" prop="type">
        <el-select v-model="searchForm.type" @change="search" clearable placeholder="目的地类型">
        <el-select
          v-model="searchForm.type"
          @change="search"
          clearable
          placeholder="目的地类型"
        >
          <el-option label="市内用车" value="0"></el-option>
          <el-option label="市外用车" value="1"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="出发时间" prop="startTime">
        <el-date-picker @change="seleTime" v-model="time" @keypress.enter.native="search" type="datetimerange"
          format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']"
          range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
        <el-date-picker
          @change="seleTime"
          v-model="time"
          @keypress.enter.native="search"
          type="datetimerange"
          format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss"
          :default-time="['00:00:00', '23:59:59']"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        >
        </el-date-picker>
      </el-form-item>
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
      <el-radio-group
        v-model="searchForm.radio"
        size="small"
        @input="changeRadio"
      >
        <el-radio-button label="0">当天</el-radio-button>
        <el-radio-button label="1">近7天</el-radio-button>
        <el-radio-button label="2">近30天</el-radio-button>
@@ -46,31 +87,70 @@
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="[
      <ul
        class="toolbar"
        v-permissions="[
        'business:carusebook:create',
        'business:carusebook:exportExcel',
      ]">
        ]"
      >
        <li>
          <el-button type="primary" @click="handleEdit" icon="el-icon-plus"
            v-permissions="['business:carusebook:create']">新建</el-button>
          <el-button
            type="primary"
            @click="handleEdit"
            icon="el-icon-plus"
            v-permissions="['business:carusebook:create']"
            >新建</el-button
          >
        </li>
        <li>
          <el-button type="primary" @click="handleEx" v-permissions="['business:carusebook:exportExcel']">导出</el-button>
          <el-button
            type="primary"
            @click="handleEx"
            v-permissions="['business:carusebook:exportExcel']"
            >导出</el-button
          >
        </li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
      <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="carCode" label="车牌号" min-width="100px"></el-table-column>
        <el-table-column prop="memberName" label="提报人" min-width="80px"></el-table-column>
        <el-table-column prop="memberNames" label="乘车人" min-width="180px"></el-table-column>
        <el-table-column prop="companyName" label="所属组织" min-width="150px"></el-table-column>
        <el-table-column
            prop="carCode"
            label="车牌号"
            min-width="100px"
        ></el-table-column>
        <el-table-column
          prop="memberName"
          label="提报人"
          min-width="80px"
        ></el-table-column>
        <el-table-column
            prop="memberNames"
            label="乘车人"
            min-width="180px"
        ></el-table-column>
        <el-table-column
          prop="companyName"
          label="所属组织"
          min-width="150px"
        ></el-table-column>
        <el-table-column label="用车时间" min-width="170px">
          <template slot-scope="{ row }">
            <span v-if="row.startTime">èµ·:{{ row.startTime.slice(0, 16) }}</span><br />
            <span v-if="row.startTime">èµ·:{{ row.startTime.slice(0,16) }}</span
            ><br />
            <span v-if="row.endTime">æ­¢:{{ row.endTime.slice(0, 16) }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="planUseDate" label="出发时间" min-width="150px">
        <el-table-column
          prop="planUseDate"
          label="出发时间"
          min-width="150px"
        >
          <template slot-scope="{ row }">
            <span v-if="row.planUseDate">{{ row.planUseDate.slice(0, 16) }}</span>
          </template>
@@ -92,28 +172,58 @@
          </template>
        </el-table-column>
        <el-table-column prop="createDate" label="申请时间" min-width="150px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="150px"></el-table-column>
        <el-table-column label="操作" min-width="160" align="center" fixed="right">
        <el-table-column
          prop="createDate"
          label="申请时间"
          min-width="150px"
        ></el-table-column>
        <el-table-column
          prop="editDate"
          label="操作时间"
          min-width="150px"
        ></el-table-column>
        <el-table-column
          label="操作"
          min-width="160"
          align="center"
          fixed="right"
        >
          <template slot-scope="{ row }">
            <el-button type="text" icon="el-icon-edit"
              @click="$refs.OperaDetailsWindow.open('公务车申请详情', row)">查看详情</el-button>
            <el-button
              type="text"
              icon="el-icon-edit"
              @click="$refs.OperaDetailsWindow.open('公务车申请详情', row)"
              >查看详情</el-button
            >
            <!-- <el-button v-if="(row.status === 1 || row.status === 2) && new Date().getTime() < new Date(row.startTime).getTime()" type="text" icon="el-icon-delete" @click="rowRevokeClick(row)" >撤销</el-button> -->
            <el-button v-if="
              (row.status === 0 || row.status === 1 || row.status === 2) &&
              new Date().getTime() < new Date(row.startTime).getTime()
            " type="text" icon="el-icon-delete" @click="rowRevokeClick(row)">撤销</el-button>
            <el-button style="color: red"   v-if="    (row.status === 0 || row.status === 1 || row.status === 2) && new Date().getTime() < new Date(row.startTime).getTime() "  type="text"  icon="el-icon-delete"   @click="rowRevokeClick(row)" >撤销</el-button>
            <el-button  style="color: red" type="text"  icon="el-icon-delete"   @click="deleteById(row)" >删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!--  -->
    <el-dialog title="用车撤销" :visible.sync="isShowBack" width="520px">
      <el-form :model="backParam" :rules="rules" ref="backForm" label-width="100px" class="demo-ruleForm">
      <el-form
        :model="backParam"
        :rules="rules"
        ref="backForm"
        label-width="100px"
        class="demo-ruleForm"
      >
        <el-form-item label="说明" prop="info">
          <el-input type="textarea" :rows="4" v-model="backParam.info" placeholder="请输入撤销说明"></el-input>
          <el-input
            type="textarea"
            :rows="4"
            v-model="backParam.info"
            placeholder="请输入撤销说明"
          ></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
@@ -121,7 +231,10 @@
        <el-button type="primary" @click="backSubmit">确定</el-button>
      </span>
    </el-dialog>
    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="handlePageChange" />
    <OperaCarUseBookWindow
      ref="OperaDetailsWindow"
      @success="handlePageChange"
    />
    <OperaCarUseBookParamWindow ref="OperaParamWindow" @success="search" />
  </TableLayout>
</template>
@@ -255,18 +368,9 @@
    },
    reset() {
      this.$refs.searchForm.resetFields()
      this.time = []
      this.searchForm = {
        memberName: '',
        companyName: '',
        queryStartTime: '',
        queryEndTime: '',
        type: null,
        status: null,
        radio: ''
      }
      // this.changeRadio('0')
      this.search()
      this.searchForm.radio = '0'
      this.changeRadio('0')
      // this.search()
    }
  }
}
admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -41,6 +41,7 @@
        <template v-slot="scope">
          <el-button type="text" v-permissions="['business:platformbooks:detail']"
            @click="handleDetail(scope.row)">预约详情</el-button>
          <el-button  type="text" class="red" v-permissions="['business:platformjob:delete']" @click="handleDel(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -144,7 +145,6 @@
      rules: {
        contractNum: [{ required: true, message: '请输入', trigger: 'blur' }],
        totalNum: [{ required: true, message: '请输入', trigger: 'blur' }],
        driverName: [{ required: true, message: '请输入', trigger: 'blur' }],
        driverPhone: [{ required: true, message: '请输入', trigger: 'blur' }],
        carCodeFront: [{ required: true, message: '请输入', trigger: 'blur' }],
        carCodeBack: [{ required: true, message: '请输入', trigger: 'blur' }],
@@ -197,7 +197,7 @@
          }
        ],
        online: true
      },
      }
    }
  },
  created() {
admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -190,7 +190,7 @@
      })
    },
    handleDel(row) {
      this.$dialog.exportConfirm('确认删除吗?').then(() => {
      this.$dialog.deleteConfirm('确认删除吗?').then(() => {
        platformJobDel(row.id).then(res => {
          Message.success('删除成功')
          this.getList()
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
@@ -102,7 +102,7 @@
            "SUM( CONVERT( (UNIX_TIMESTAMP(b.END_TIME) - UNIX_TIMESTAMP(b.START_TIME))/(60*60),DECIMAL(5,1))) c\n" +
            "FROM meeting_book b\n" +
            "LEFT JOIN meeting_rooms r ON r.ID = b.ROOM_ID \n" +
            "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS = 0 \n" +
            "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS in(0,2) \n" +
            "GROUP BY b.ROOM_ID , DATE_FORMAT(b.START_TIME,'%m')\n" +
            ") t) t1 GROUP BY t1.name")
    List<RoomStatisticsVo> getRoomStatistics(@Param("yearNum") Integer yearNum);
@@ -149,7 +149,7 @@
            "meeting_user_rel ur\n" +
            "LEFT JOIN `SYSTEM_USER` su ON ur.USER_ID = su.id \n" +
            "LEFT JOIN meeting_book b ON ur.OBJ_ID = b.id \n" +
            "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS = 0" +
            "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS in(0,2)" +
            "<if test='userId != null'>"+
            "and ur.USER_ID = #{userId}\n" +
            "</if>"+
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java
@@ -202,5 +202,11 @@
    @ApiModelProperty(value = "会议室主键")
    @TableField(exist = false)
    private Integer roomsId;
    @ApiModelProperty(value = "会议室图片")
    @TableField(exist = false)
    private String imgurl;
    @TableField(exist = false)
    @ApiModelProperty(value = "文件类型")
    private Integer fileType;
}
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/RoomDetailResponse.java
@@ -1,5 +1,6 @@
package com.doumee.dao.web.response;
import com.doumee.dao.business.model.Bookings;
import com.doumee.dao.system.model.Multifile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -35,5 +36,7 @@
    @ApiModelProperty(value = "会议列表")
    private List<MeetingListResponse> meetingListResponseList;
//    @ApiModelProperty(value = "会议列表")
//    private List<Bookings> meetingListResponseList;
}
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,6 +8,8 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.dao.UserActionMapper;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -85,6 +88,8 @@
    @Autowired
    private RoomsMapper roomsMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private ProjectRelJoinMapper projectRelJoinMapper;
    @Autowired
@@ -334,12 +339,39 @@
    @Override
    public void deleteById(Integer id,LoginUserInfo user) {
        Bookings model = bookingsMapper.selectById(id);
        if(model==null ||Constants.equalsInteger(Constants.ONE,model.getIsdeleted())) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Date date = new Date();
        Bookings bookings = new Bookings();
        bookings.setId(id);
        bookings.setIsdeleted(MeetConstants.ONE);
        bookings.setEditDate(new Date());
        bookings.setEditDate(date);
        bookings.setEditor(user.getId());
        bookingsMapper.updateById(bookings);
        String[] params = new String[3];
        params[0] = user.getRealname();
        params[1]=DateUtil.getPlusTime2(date);
        params[2]=model.getName()+"-【会议室:"+model.getRoomName()+" ã€‘-【时间:"+DateUtil.getPlusTime2(model.getStartTime())+"-"+DateUtil.getPlusTime2(model.getEndTime())+"】";
        String info = Constants.UserActionType.MEET_BOOK_DEL.getInfo();
        if(params!=null){
            for (int i = 0; i < params.length; i++) {
                info = info.replace("${param"+(i+1)+"}",params[i]);
            }
        }
        UserAction userAction=new UserAction();
        userAction.setIsdeleted(Constants.ZERO);
        userAction.setCreateDate(date);
        userAction.setCreator(user.getId());
        userAction.setBeforeStatus(Constants.ZERO);
        userAction.setType( Constants.UserActionType.MEET_BOOK_DEL.getKey());
        userAction.setContent(JSONObject.toJSONString(model));
        userAction.setRemark(info);
        userAction.setMemberId(id+"");
        userActionMapper.insert(userAction);
    }
    @Override
@@ -506,7 +538,7 @@
        queryWrapper.selectAs(Rooms::getName, Bookings::getRoomName);
        queryWrapper.selectAs(SystemUser::getRealname, Bookings::getRealName);
        queryWrapper.selectAs(Company::getName, Bookings::getDepartmentName);
        queryWrapper.select(" CASE WHEN t.START_TIME_REAL IS NULL AND t.`STATUS` = 0 THEN 1  WHEN ( ( t.END_TIME < now()  AND t.`STATUS` = 0 ) or t.`STATUS` = 2 ) THEN 3 WHEN t.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ");
//        queryWrapper.select(" CASE WHEN t.START_TIME_REAL IS NULL AND t.`STATUS` = 0 THEN 1  WHEN ( ( t.END_TIME < now()  AND t.`STATUS` = 0 ) or t.`STATUS` = 2 ) THEN 3 WHEN t.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ");
        queryWrapper.leftJoin(Rooms.class, Rooms::getId, Bookings::getRoomId);
        queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Bookings::getCreator);
        queryWrapper.leftJoin(Company.class,Company::getId,SystemUser::getCompanyId);
@@ -574,29 +606,9 @@
        SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
        SimpleDateFormat format1 = new SimpleDateFormat("HH:mm");
        IPage<Bookings> result = bookingsJoinMapper.selectJoinPage(page, Bookings.class, queryWrapper);
        String configMinute = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.EARLY_START).getCode();
        Integer minute = StringUtils.isNotBlank(configMinute) ? Integer.valueOf(configMinute) : 120;
        Integer minute =getNearStartMinut();
        result.getRecords().stream().forEach(s -> {
            if(Constants.equalsInteger(s.getStatus(),Constants.ZERO)&&Constants.equalsInteger(s.getMeetingStatus(),Constants.ONE)){
                //开始前120分钟 å¤§äºŽå½“前时间 åˆ™æ˜¾ç¤ºå³å°†å¼€å§‹
                if(
                        DateUtil.afterMinutesDate(s.getStartTime(),-minute).getTime()<=System.currentTimeMillis()
                ){
                    s.setMeetingStatus(4);
                }
            }
            if(s.getMeetingStatus().equals(Constants.ZERO)){
                if(s.getMeetingStatus()==Constants.ONE){
                    //开始前120分钟 å¤§äºŽå½“前时间 åˆ™æ˜¾ç¤ºå³å°†å¼€å§‹
                    if(DateUtil.afterMinutesDate(s.getStartTime(),-120).getTime()>System.currentTimeMillis()){
                        s.setMeetingStatus(4);
                    }
                }
            }
            dealMeetingStatusByModel(s,minute);
            MPJLambdaWrapper<Multifile> bookquery = new MPJLambdaWrapper<>();
            bookquery.eq(Multifile::getIsdeleted, MeetConstants.ZERO);
            bookquery.eq(Multifile::getObjId, s.getId());
@@ -637,6 +649,32 @@
        });
        return PageData.from(result);
    }
    private void dealMeetingStatusByModel(Bookings s,Integer minute) {
        //会议状态: 1=未开始;2=进行中;3=已结束 ; 4=即将开始; 5=已撤销
        //status状态 0已预约 1已撤销 2已结束
        if(Constants.equalsInteger(s.getStatus(),Constants.ONE)){
            //已撤销
            s.setMeetingStatus(Constants.FIVE);
        }else if(Constants.equalsInteger(s.getStatus(),Constants.TWO)){
            //已结束
            s.setMeetingStatus(Constants.THREE);
        }else if(Constants.equalsInteger(s.getStatus(),Constants.ZERO)){
            //0已预约
            if(s.getStartTimeReal() ==null){
                //如果未开始
                s.setMeetingStatus(Constants.ONE);
                //开始前120分钟 å¤§äºŽå½“前时间 åˆ™æ˜¾ç¤ºå³å°†å¼€å§‹
                if(DateUtil.afterMinutesDate(s.getStartTime(),-minute).getTime()<=System.currentTimeMillis()  ){
                    s.setMeetingStatus(Constants.FOUR);//则显示即将开始
                }
            }else{
                //会议中
                s.setMeetingStatus(Constants.TWO);
            }
        }
    }
    @Override
@@ -1192,9 +1230,9 @@
        if (System.currentTimeMillis() < bookings.getStartTimeReal().getTime()) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议未开始,无法进行结束,如需该操作请使用取消功能");
        }
        if (System.currentTimeMillis() > bookings.getEndTime().getTime()) {
        /*if (System.currentTimeMillis() > bookings.getEndTime().getTime()) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议已结束,无法进行该操作");
        }
        }*/
        if(!bookings.getStatus().equals(MeetConstants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "本次操作失败,会议状态已流转");
        }
@@ -1308,7 +1346,7 @@
        bookings.setEditDate(new Date());
        bookings.setEditor(businessOverDTO.getUserId());
        bookingsMapper.updateById(bookings);
        //更新已结束但未结束的会议信息为已结束
       /* //更新已结束但未结束的会议信息为已结束
        bookingsMapper.update(null,new UpdateWrapper<Bookings>()
                .lambda()
                .set(Bookings::getStatus,Constants.TWO)
@@ -1317,10 +1355,9 @@
                .apply(" ( END_TIME < now() or ( END_TIME > now() and START_TIME < now() and START_TIME_REAL is null  ) )")
                .eq(Bookings::getStatus,Constants.ZERO)
                .eq(Bookings::getRoomId,bookings.getRoomId())
        );
        );*/
    }
    @Override
    public RoomDetailResponse getRoomDetail(Integer roomId){
@@ -1341,9 +1378,9 @@
        String prefix = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.MEET_CODE_PREFIX).getCode() ;
        response.setPrefix(prefix);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH)
                    .getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            String localPath = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_LOCAL_RESOURCE_PATH)
                    .getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
            for (Multifile multifile:multifileList) {
@@ -1353,7 +1390,8 @@
            response.setMultifileList(multifileList);
        }
        //查询会议列表
/*        //查询会议列表
        List<MeetingListResponse> meetingList = bookingsMapper.meetingList(
                new QueryWrapper<Bookings>()
                .eq( "b.id", rooms.getId())
@@ -1367,10 +1405,57 @@
                .orderByAsc("a.start_time")
        );
        this.dealMeetingStatus(meetingList);
        response.setMeetingListResponseList(meetingList);
        response.setMeetingListResponseList(meetingList);*/
        MPJLambdaWrapper<Bookings> queryWrapper = new MPJLambdaWrapper<Bookings>()
                 .selectAll(Bookings.class)
                 .selectAs(Rooms::getName, Bookings::getRoomName)
                 .selectAs(Rooms::getImgurl, Bookings::getImgurl)
                 .selectAs(Rooms::getFileType, Bookings::getFileType)
                 .selectAs(SystemUser::getRealname, Bookings::getRealName)
                 .leftJoin(Rooms.class, Rooms::getId, Bookings::getRoomId)
                 .leftJoin(SystemUser.class, SystemUser::getId, Bookings::getCreator)
                 .eq(Bookings::getIsdeleted, MeetConstants.ZERO)
                 .eq(Bookings::getId, MeetConstants.ZERO)
                 .eq(Rooms::getId, rooms.getId())
                .apply("to_days(t.start_time) = to_days(now())")//子查询当天的
                 .orderByDesc(Bookings::getStartTime);
        Integer minute =getNearStartMinut();
        List<Bookings> meetingList =bookingsMapper.selectJoinList(Bookings.class,queryWrapper);
        if(meetingList!=null){
            response.setMeetingListResponseList(new ArrayList<>());
            for(Bookings s : meetingList){
                dealMeetingStatusByModel(s,minute);
                MeetingListResponse d = new MeetingListResponse();
                d.setId(s.getId());
                d.setRoomName(s.getRoomName());
                d.setBookingUser(s.getRealName());
                d.setMeetingStatus(s.getMeetingStatus());
                d.setPrefixUrl(path);
                d.setImgUrl(s.getImgurl());
                d.setFileType(s.getFileType());
                d.setMeetingDate(DateUtil.getShortTime(s.getStartTime()));//
                //CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime
                d.setMeetingTime(DateUtil.formatDate(s.getStartTime(),"HH:mm")+"~"+DateUtil.formatDate(s.getEndTime(),"HH:mm"));
                d.setMeetingName(s.getName());
                d.setRemark(s.getRemark());
                d.setStartTime(s.getStartTime());
                response.getMeetingListResponseList().add(d);
            }
        }
        return response;
    }
    private Integer getNearStartMinut() {
        String configMinute = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.EARLY_START).getCode();
        try {
            return  StringUtils.isNotBlank(configMinute) ? Integer.valueOf(configMinute) : 120;
        }catch (Exception e){
            e.printStackTrace();
        }
      return  120;
    }
    public void dealMeetingStatus(List<MeetingListResponse> meetingResponseList){
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(meetingResponseList)){
server/system_gateway/src/main/java/com/doumee/config/CustomWebFilterConfig.java
@@ -1,6 +1,5 @@
package com.doumee.config;
import com.doumee.config.GatewayFilterProperties;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.utils.Constants;
import org.apache.commons.lang3.StringUtils;
@@ -10,7 +9,6 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.PathMatcher;
@@ -41,7 +39,7 @@
                if (StringUtils.isBlank(userInfo)) {
                    return unAuthorize(exchange);
                }
                jwtTokenUtil.refreshTokenTime(token,userInfo);
                jwtTokenUtil.refreshTokenTime(token);
                //把新的 exchange放回到过滤链
                ServerHttpRequest request = exchange.getRequest().mutate().header(Constants.HEADER_USER_TOKEN, token).build();
                ServerWebExchange newExchange = exchange.mutate().request(request).build();
server/system_gateway/src/main/resources/application.yml
@@ -63,6 +63,7 @@
    enabled: true   #是否开启JWT登录认证功能
    secret: fjkfaf;afa  # JWT私钥,用于校验JWT令牌的合法性
    expiration: 1800000 #JWT令牌的有效期,用于校验JWT令牌的合法性
#    expiration: 300000 #JWT令牌的有效期,用于校验JWT令牌的合法性
    header: JWTHeaderName #HTTP请求的Header名称,该Header作为参数传递JWT令牌
    userParamName: username  #用户登录认证用户名参数名称
    pwdParamName: password  #用户登录认证密码参数名称
server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
@@ -1,5 +1,7 @@
package com.doumee.config.cloudfilter;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.utils.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -9,15 +11,19 @@
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
import javax.servlet.Filter;
@Configuration
public class CloudWebConfig implements WebMvcConfigurer {
    @Autowired
    private RedisTemplate<String,Object> stringRedisTemplate;
    @Resource
    private JwtProperties jwtProperties;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor(stringRedisTemplate))
        registry.addInterceptor(new LoginHandlerInterceptor(stringRedisTemplate,
                        jwtProperties==null || jwtProperties.getExpiration()==null?1800000l:jwtProperties.getExpiration()))
                .addPathPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
    }
server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java
@@ -3,6 +3,8 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.service.business.third.model.LoginUserInfo;
@@ -12,6 +14,7 @@
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Resource;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
@@ -21,14 +24,17 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.concurrent.TimeUnit;
public class LoginHandlerInterceptor implements HandlerInterceptor {
    private RedisTemplate<String,Object> stringRedisTemplate;
    private long expireTime;
    // ç”±äºŽè¯¥ç±»æœªäº¤ç»™spring管理,因此不能使用自动装配的方式获取RedisTemplate对象
    public LoginHandlerInterceptor(RedisTemplate<String,Object> stringRedisTemplate) {
    public LoginHandlerInterceptor(RedisTemplate<String,Object> stringRedisTemplate,long expireTime) {
        this.expireTime = expireTime;
        this.stringRedisTemplate = stringRedisTemplate;
    }
@@ -124,6 +130,7 @@
        if (StringUtils.isBlank(userinfo)) {
            throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
        }
        stringRedisTemplate.expire(Constants.REDIS_TOKEN_KEY+token,this.expireTime, TimeUnit.MILLISECONDS);
        LoginUserInfo user = JSONObject.toJavaObject(JSONObject.parseObject(userinfo),LoginUserInfo.class );
        if(user ==null ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户登陆已失效,请重新登陆!");
server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -240,7 +240,8 @@
     * @param token
     */
    public void refreshTokenTime(String token,String usrerInfo) {
        redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,usrerInfo,jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
    public void refreshTokenTime(String token ) {
        redisTemplate.expire(Constants.REDIS_TOKEN_KEY+token,jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
//        redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,usrerInfo,jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
    }
}
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -334,11 +334,12 @@
            return "";
        }
        int l = s.length();
        if(Constants.equalsInteger(l,7)){
            return s.substring(0,3)+"**"+s.substring(l-2,l);
        if(l >= 7){
            String tt = "";
            for (int i = 0; i < l-6; i++) {
                tt = tt+"*";
        }
        if(l <= 8){
            return s.substring(0,3)+"***"+s.substring(l-2,l);
            return s.substring(0,2)+tt+s.substring(l-4,l);
        }
        return s;
    }
@@ -417,6 +418,7 @@
         int selfTruck = 3;
         int outTruck = 4;
         int cityComTruck = 5;
         int unknown = 6;
    }
@@ -676,14 +678,60 @@
    }
    public static void main(String[] args) {
        getChinesePingyin("DDaa江萍的对对对");
//        getChinesePingyin("DDaa江萍的对对对");
//        System.out.println(DateUtil.getShortTime(new Date()));
//        System.out.println( "2025-01-14 10:50:56".substring(0,10));
//        System.out.println(Constants.checkCarNo("皖AA10991"));
//        System.out.println(Constants.getVehiclePlateNo("湘B140D17").getDescription());
//        System.out.println(Constants.getVehiclePlateNo("宿AP0637").getDescription());
        System.out.println("<script> SELECT \n" +
                "t1.REALNAME `REALNAME`,\n" +
                "MAX(t1.`01`) `januaryCount`,\n" +
                "MAX(t1.`02`) `februaryCount`,\n" +
                "MAX(t1.`03`) `marchCount`,\n" +
                "MAX(t1.`04`) `aprilCount`,\n" +
                "MAX(t1.`05`) `mayCount`,\n" +
                "MAX(t1.`06`) `juneCount`,\n" +
                "MAX(t1.`07`) `julyCount`,\n" +
                "MAX(t1.`08`) `augustCount`,\n" +
                "MAX(t1.`09`) `septemberCount`,\n" +
                "MAX(t1.`10`) `octoberCount`,\n" +
                "MAX(t1.`11`) `novemberCount`,\n" +
                "MAX(t1.`12`) `decemberCount`\n" +
                "FROM(\n" +
                "SELECT \n" +
                "t.id,\n" +
                "t.REALNAME,\n" +
                "CASE  WHEN t.yue='01' THEN t.c ELSE 0 END AS `01`,\n" +
                "CASE  WHEN t.yue='02' THEN t.c ELSE 0 END AS `02`,\n" +
                "CASE  WHEN t.yue='03' THEN t.c ELSE 0 END AS `03`,\n" +
                "CASE  WHEN t.yue='04' THEN t.c ELSE 0 END AS `04`,\n" +
                "CASE  WHEN t.yue='05' THEN t.c ELSE 0 END AS `05`,\n" +
                "CASE  WHEN t.yue='06' THEN t.c ELSE 0 END AS `06`,\n" +
                "CASE  WHEN t.yue='07' THEN t.c ELSE 0 END AS `07`,\n" +
                "CASE  WHEN t.yue='08' THEN t.c ELSE 0 END AS `08`,\n" +
                "CASE  WHEN t.yue='09' THEN t.c ELSE 0 END AS `09`,\n" +
                "CASE  WHEN t.yue='10' THEN t.c ELSE 0 END AS `10`,\n" +
                "CASE  WHEN t.yue='11' THEN t.c ELSE 0 END AS `11`,\n" +
                "CASE  WHEN t.yue='12' THEN t.c ELSE 0 END AS `12`  \n" +
                "FROM   \n" +
                "(SELECT \n" +
                "su.id,\n" +
                "su.REALNAME,\n" +
                "DATE_FORMAT(b.START_TIME,'%m') yue,\n" +
                "SUM(" +
                "CONVERT( (UNIX_TIMESTAMP(b.END_TIME) - UNIX_TIMESTAMP(b.START_TIME))/(60*60), DECIMAL(5,1))) c\n" +
                "FROM \n" +
                "meeting_user_rel ur\n" +
                "LEFT JOIN `SYSTEM_USER` su ON ur.USER_ID = su.id \n" +
                "LEFT JOIN meeting_book b ON ur.OBJ_ID = b.id \n" +
                "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS = 0" +
                "<if test='userId != null'>"+
                "and ur.USER_ID = #{userId}\n" +
                "</if>"+
                "GROUP BY su.id, DATE_FORMAT(b.START_TIME,'%m')) t) t1 GROUP BY t1.id" +
                "</script>");
    }
@@ -1282,6 +1330,13 @@
        IMPORT_TRAIMETIME(14, "导入培训有效","由【${param1}】于【${param2}】,进行【导入培训有效】操作" ),
        BE_HEAD(15, "设为主管","由【${param1}】于【${param2}】,进行【设为主管】操作" ),
        NOT_HEAD(16, "取消主管","由【${param1}】于【${param2}】,进行【取消主管】操作" ),
        MEET_BOOK_DEL(17, "删除会议室申请","由【${param1}】于【${param2}】,进行【删除会议室申请】操作,对象信息${param3}" ),
        VISIT_DEL(18, "删除访客申请","由【${param1}】于【${param2}】,进行【删除访客申请】,对象信息:${param3}" ),
        VISIT_CAR_DEL(19, "删除访客报备","由【${param1}】于【${param2}】,进行【删除访客报备】,对象信息:${param3}" ),
        PLATFROM_BOOK_DEL(20, "删除月台预约任务","由【${param1}】于【${param2}】,进行【删除月台预约任务】,对象信息:${param3}"  ),
        CAR_BOOK_DEL(21, "删除公车申请","由【${param1}】于【${param2}】,进行【删除公车申请】,对象信息:${param3}"),
        PLATFROM_JOB_DEL(22, "删除安泰物流作业任务","由【${param1}】于【${param2}】,进行【删除安泰物流作业任务】,对象信息:${param3}"  ),
        HIDEN_DANGER_DEL(23, "删除隐患随手拍","由【${param1}】于【${param2}】,进行【删除隐患随手拍】,对象信息:${param3}"),
        ;
        // æˆå‘˜å˜é‡
server/system_service/src/main/java/com/doumee/dao/business/dao/MemberMapper.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Member;
import com.github.yulichang.base.MPJBaseMapper;
server/system_service/src/main/java/com/doumee/dao/business/dao/UserActionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.UserAction;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
public interface UserActionMapper extends MPJBaseMapper<UserAction> {
}
server/system_service/src/main/java/com/doumee/dao/business/model/UserAction.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.service.business.third.model.LoginUserModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * äººå‘˜ä¿¡æ¯è¡¨
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Data
@ApiModel("人员信息表")
@TableName("`user_action`")
public class UserAction extends LoginUserModel {
        @TableId(type = IdType.AUTO)
        @ApiModelProperty(value = "主键", example = "1")
        @ExcelColumn(name="主键")
        private Integer id;
        @ApiModelProperty(value = "创建人编码", example = "1")
        @ExcelColumn(name="创建人编码")
        private Integer creator;
        @ApiModelProperty(value = "创建时间")
        @ExcelColumn(name="创建时间")
        private Date createDate;
        @ApiModelProperty(value = "更新人编码", example = "1")
        @ExcelColumn(name="更新人编码")
        private Integer editor;
        @ApiModelProperty(value = "更新时间")
        @ExcelColumn(name="更新时间")
        private Date editDate;
        @ApiModelProperty(value = "是否删除0否 1是", example = "1")
        @ExcelColumn(name="是否删除0否 1是")
        private Integer isdeleted;
        @ApiModelProperty(value = "备注")
        @ExcelColumn(name="备注")
        private String remark;
        @ApiModelProperty(value = "修改详细内容")
        @ExcelColumn(name="修改详细内容")
        private String content;
        @ApiModelProperty(value = "类型 0解冻 1冻结 2拉黑 3恢复 4设为拜访人 5取消拜访人 6设为高级审批人 7取消高级审批人 8手动离场 9删除人员 10更新人员", example = "1")
        @ExcelColumn(name="类型 0解冻 1冻结 2拉黑 3恢复 4设为拜访人 5取消拜访人 6设为高级审批人 7取消高级审批人 8手动离场 9删除人员 10更新人员")
        private Integer type;
        @ApiModelProperty(value = "人员操作记录日志")
        @ExcelColumn(name="人员操作记录日志")
        private String memberId;
        @ApiModelProperty(value = "操作前状态 0解冻 1冻结 2拉黑 3恢复 4设为拜访人 5取消拜访人 6设为高级审批人 7取消高级审批人 8手动离场 9删除", example = "1")
        @ExcelColumn(name="操作前状态 0解冻 1冻结 2拉黑 3恢复 4设为拜访人 5取消拜访人 6设为高级审批人 7取消高级审批人 8手动离场 9删除")
        private Integer beforeStatus;
        @ApiModelProperty(value = "操作人名称", example = "1")
        @TableField(exist = false)
        private String createName;
        @ApiModelProperty(value = "人员类型:0劳务访客 1普通访客  2内部人员", example = "1")
        @TableField(exist = false)
        private String memberType;
        @ApiModelProperty(value = "操作对象", example = "1")
        @TableField(exist = false)
        private String memberName;
        @ApiModelProperty(value = "公司名称", example = "1")
        @TableField(exist = false)
        private String companyName;
        @ApiModelProperty(value = "访客公司名称", example = "1")
        @TableField(exist = false)
        private String visitCompanyName;
        @ApiModelProperty(value = "类型名称", example = "1")
        @TableField(exist = false)
        private String typeName;
        @ApiModelProperty(value = "手机号", example = "1")
        @TableField(exist = false)
        private String mobile;
        @ApiModelProperty(value = "查询对象类型  0人员操作 1其他业务操作", example = "1")
        @TableField(exist = false)
        private Integer objType;
}
server/system_service/src/main/java/com/doumee/service/business/third/model/TMSContants.java
@@ -8,12 +8,8 @@
public class TMSContants {
    public interface InterfacePath {
        String[] getSevenArrivalStatus = new String[]{"/tms/zhyt/getSevenArrivalStatus",  "【TMS】近7日到货情况"};//TMS近7日到货情况接口地址
        String[] getCurrentTransportationTask = new String[]{ "【TMS】/zhyt/getCurrentTransportationTask",  "【TMS】当前运输任务"};//TMS当前运输任务接口地址
        String[] getDistributionOfDeliveryLocations = new String[]{"/tms/zhyt/getDistributionOfDeliveryLocations",  "【TMS】全国到货地分布查询查询"};//TMS全国到货地分布查询查询接口地址
        String[] getRealTimeInventory = new String[]{"/tms/zhyt/getRealTimeInventory",  "【TMS】实时库存查询"};//TMS实时库存查询接口地址
        String[] getInboundOutbound = new String[]{"/tms/zhyt/getInboundOutbound",  "【TMS】出入库记录查询"};//TMS出入库记录查询接口地址
        String[] getIntransitDetails = new String[]{"/tms/zhyt/getIntransitDetails",  "【TMS】在途明细列表"};//TMS在途明细列表接口地址
        String[] getOrderList = new String[]{"/tms/zhyt/getOrderList",  "【TMS】合同列表查询"};//TMS合同列表查询接口地址
        String[] getTotalAndReportVehicleQty = new String[]{"/tms/zhyt/getTotalAndReportVehicleQty",  "【TMS】查询5个厂的运力资源利用情况。"};//查询5个厂的运力资源利用情况。
        String[] getElecByContractNumberList = new String[]{"/tms/zhyt/getElecByContractNumberList",  "【TMS】合同上锁状态"};//TMS合同上锁状态接口地址
@@ -29,6 +25,10 @@
        String[] driverStart = new String[]{"/tms/zhyt/driverStartAndArrival",  "【TMS】司机启运。"};//3.17司机启运
        String[] driverArrival = new String[]{"/tms/zhyt/driverStartAndArrival",  "【TMS】司机到货。"};//3.18司机到货
        String[] getEmployeeList = new String[]{"/tms/zhyt/getEmployeeList",  "【TMS】营销人员信息实时查询。"};//3.19营销人员信息实时查询
        String[] getInboundOutbound = new String[]{"/tms/zhyt/getInboundOutbound",  "【TMS】出入库记录查询"};//TMS出入库记录查询接口地址
        String[] getIntransitDetails = new String[]{"/tms/zhyt/getIntransitDetails",  "【TMS】在途明细列表"};//TMS在途明细列表接口地址
        String[] getSevenArrivalStatus = new String[]{"/tms/zhyt/getSevenArrivalStatus",  "【TMS】近7日到货情况"};//TMS近7日到货情况接口地址
        String[] getCurrentTransportationTask = new String[]{ "【TMS】/zhyt/getCurrentTransportationTask",  "【TMS】当前运输任务"};//TMS当前运输任务接口地址
    }
    public  enum TopStatusLevel {
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/UserActionController.java
@@ -2,10 +2,11 @@
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.UserAction;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.service.business.third.model.PageData;
import com.doumee.dao.business.model.UserAction;
import com.doumee.service.business.UserActionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -53,7 +53,7 @@
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:carusebook:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        carUseBookService.deleteById(id);
        carUseBookService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java
@@ -54,8 +54,8 @@
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:platformbooks:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        platformBooksService.deleteById(id);
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        platformBooksService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java
@@ -53,7 +53,7 @@
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:platformjob:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        platformJobService.delete(id);
        platformJobService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/UserActionCloudController.java
@@ -4,11 +4,12 @@
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.UserAction;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.UserAction;
import com.doumee.service.business.UserActionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
@@ -51,7 +51,7 @@
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:visits:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        visitsService.deleteById(id);
        visitsService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/resources/application.yml
@@ -74,6 +74,7 @@
    enabled: true   #是否开启JWT登录认证功能
    secret: fjkfaf;afa  # JWT私钥,用于校验JWT令牌的合法性
    expiration: 1800000 #JWT令牌的有效期,用于校验JWT令牌的合法性
#    expiration: 300000 #JWT令牌的有效期,用于校验JWT令牌的合法性
    header: JWTHeaderName #HTTP请求的Header名称,该Header作为参数传递JWT令牌
    userParamName: username  #用户登录认证用户名参数名称
    pwdParamName: password  #用户登录认证密码参数名称
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/UserActionMapper.java
ÎļþÒÑɾ³ý
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/DeviceJoinMapper.java
@@ -1,7 +1,6 @@
package com.doumee.dao.business.join;
import com.doumee.dao.business.model.Device;
import com.doumee.dao.business.model.UserAction;
import com.github.yulichang.base.mapper.MPJJoinMapper;
public interface DeviceJoinMapper extends MPJJoinMapper<Device> {
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/UserActionJoinMapper.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.join;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.UserAction;
import com.github.yulichang.base.mapper.MPJJoinMapper;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java
@@ -88,7 +88,7 @@
//    @ExcelColumn(name="提报人编码(关联member)")
    private Integer companyId;
    @ApiModelProperty(value = "责任部门编码", example = "1")
    @ApiModelProperty(value = "责任部门名称", example = "1")
//    @ExcelColumn(name="提报人编码(关联member)")
    @TableField(exist = false)
    private String companyName;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
@@ -54,25 +54,25 @@
    private String imgurl;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客 2内部员工 3车辆信息")
    @ExcelColumn(name="人员类型" ,index = 2, valueMapping="0=劳务访客;1=普通访客;2=内部员工;3=车辆信息;",width = 8)
    @ExcelColumn(name="人员类型" ,index = 5, valueMapping="0=劳务访客;1=普通访客;2=内部员工;3=车辆信息;",width = 8)
    private Integer type;
    @ApiModelProperty(value = "访客名称")
    @ExcelColumn(name="姓名" ,index = 3,width = 6)
    @ExcelColumn(name="姓名" ,index = 1,width = 6)
    private String name;
    @ApiModelProperty(value = "访客年龄")
    private Date birthday;
    @ApiModelProperty(value = "手机号")
    @ExcelColumn(name="手机号" ,index = 4,width = 12)
    @ExcelColumn(name="手机号" ,index = 2,width = 12)
    private String phone;
    @ApiModelProperty(value = "身份证号(MD4加密)")
    private String idcardNo;
    @ApiModelProperty(value = "证件显示信息")
    @ExcelColumn(name="身份证号" ,index = 5,width = 12)
    @ExcelColumn(name="身份证号" ,index = 3,width = 12)
    private String idcardDecode;
    @ApiModelProperty(value = "工号")
@@ -84,7 +84,7 @@
    @ApiModelProperty(value = "海康门禁名称")
    @ExcelColumn(name="进厂门禁" ,index = 6,width = 12)
    private String deviceName;
    @ApiModelProperty(value = "车辆类型 0内部车辆 1相关方车辆 2访客车辆 3内运物流车 4外协车辆 5市公司卸货车 ")
    @ApiModelProperty(value = "车辆类型 0内部车辆 1相关方车辆 2访客车辆 3内运物流车 4外协车辆 5市公司卸货车 6未登记车辆 ")
    private Integer carType  ;
    @ApiModelProperty(value = "海康门禁编码")
    private String deviceIndex;
@@ -138,7 +138,7 @@
    private String faceImgFull;
    @ApiModelProperty(value = "导出公司名称",hidden = true)
    @ExcelColumn(name="公司/组织" ,index = 1,width = 12)
    @ExcelColumn(name="公司/组织" ,index = 4,width = 12)
    @TableField(exist = false)
    public String excelCompanyName;
@@ -146,7 +146,6 @@
    @ApiModelProperty(value = "人数")
    @TableField(exist = false)
    private Integer num;
    @ApiModelProperty(value = "查询人员类型")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/UserAction.java
ÎļþÒÑɾ³ý
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
@@ -160,7 +160,9 @@
    @TableField(exist = false)
    @ExcelColumn(name="事件类型",index = 8,width = 16)
    private String eventTypeName;
    @ApiModelProperty(value = "进出类型 1,#进出类型:1进入2出去")
    @ExcelColumn(name="进出类型",index = 12,width = 8,valueMapping = "0=进;1=出")
    private String   inOrOut;// 1,#进出类型:1进入2出去
    @ApiModelProperty(value = "抓拍图uri完整")
    @TableField(exist = false)
    private String captureUrlFull;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/RetentionCarsVO.java
@@ -32,8 +32,8 @@
    private String carNo;
    @ApiModelProperty(value = "访客ID(关联member)")
    private Integer memberId;
    @ApiModelProperty(value = "车辆类型 0内部车辆 1相关方车辆 2访客车辆 3内运物流车 4外协车辆 5市公司卸货车 ")
    @ExcelColumn(name="车辆类型" ,index = 3, valueMapping="0=内部车辆;1=相关方车辆;2=访客车辆;3=内运物流车;4=外协车辆;5=市公司卸货车;",width = 8)
    @ApiModelProperty(value = "车辆类型 0内部车辆 1相关方车辆 2访客车辆 3内运物流车 4外协车辆 5市公司卸货车;6未登记车辆 ")
    @ExcelColumn(name="车辆类型" ,index = 3, valueMapping="0=内部车辆;1=相关方车辆;2=访客车辆;3=内运物流车;4=外协车辆;5=市公司卸货车;6=未登记车辆",width = 8)
    private Integer carType  ;
    @ApiModelProperty(value = "公司组织")
    @ExcelColumn(name="公司组织" ,index = 4,width = 12)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.dao.business.model.Member;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.dto.ApproveDTO;
@@ -110,7 +111,7 @@
    InternalHomeVO getHomeDataPC(NoticesDTO noticesDTO);
    void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
    void createApproveFlow(Integer tempType, Integer businessId, Integer createMemberId, Member applyMember);
    void createApproveForPlatfrom(Integer tempId,Integer businessId,Integer createMemberId);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
@@ -22,7 +22,7 @@
     * @return Integer
     */
    Integer create(CarUseBook carUseBook)  throws Exception ;
    void deleteById(Integer id,LoginUserInfo user);
    /**
     * ä¸»é”®åˆ é™¤
     *
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformBooksService.java
@@ -32,7 +32,7 @@
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id,LoginUserInfo user);
    /**
     * åˆ é™¤
     *
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -36,6 +36,7 @@
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id,LoginUserInfo user);
    void delete(Integer id);
    /**
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/UserActionService.java
@@ -1,8 +1,10 @@
package com.doumee.service.business;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.UserAction;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.model.UserAction;
import java.util.List;
/**
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -46,6 +46,7 @@
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id,LoginUserInfo user);
    /**
     * åˆ é™¤
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -364,10 +364,11 @@
     * @param tempType æ¨¡æ¿ç±»åž‹  0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约
     * @param businessId ä¸šåС䏻键 æ ¹æ® tempType
     * @param createMemberId æäº¤æµç¨‹äººå‘˜
     * @param applyMember ç”³è¯·äººå¯¹è±¡ï¼ˆå¦‚果为空,默认为提交人)
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId){
    public void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId,Member applyMember){
        //查询处理模板
        ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
                .eq(ApproveTempl::getType,tempType)
@@ -399,13 +400,10 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"申请人组织信息异常");
        }
        List<Approve> approveList = new ArrayList<>();
        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
        this.organizeApproveData(approveTempl,approveParamList,createMember,applyMember,businessId,approveList);
        if(CollectionUtils.isEmpty(approveList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误");
        }
        //处理抄送数据
        if(CollectionUtils.isNotEmpty(approveCopyList)){
            this.organizeApproveCopyData(approveTempl,approveCopyList,businessId,approveList);
@@ -446,7 +444,7 @@
        }
        List<Approve> approveList = new ArrayList<>();
        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
        this.organizeApproveData(approveTempl,approveParamList,createMember,null,businessId,approveList);
        if(CollectionUtils.isEmpty(approveList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误");
@@ -468,15 +466,18 @@
     * @param businessId
     * @param approveList
     */
    public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Integer businessId,List<Approve> approveList){
    public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Member applyMember,Integer businessId,List<Approve> approveList){
        if(applyMember ==null){
            applyMember = createMember;
        }
        //创建默认人信息
        Approve createUserApprove = new Approve();
        createUserApprove.setRemark("发起申请");
        createUserApprove.setCreateDate(new Date());
        createUserApprove.setIsdeleted(Constants.ZERO);
        createUserApprove.setTemplatId(approveTempl.getId());
        createUserApprove.setChekorId(createMember.getId());
        createUserApprove.setChekorId(applyMember.getId());
        createUserApprove.setCheckDate(createUserApprove.getCreateDate());
        createUserApprove.setStatus(Constants.approveStatus.pass);
        createUserApprove.setTitle("发起申请");
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java
@@ -335,7 +335,7 @@
                CarEvent::getPlateNos,
                pageWrap.getModel().getPlateNos())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),i->i.like(Member::getPhone,pageWrap.getModel().getKeyWords()).or().like(Member::getPhone,
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),i->i.like(Member::getName,pageWrap.getModel().getKeyWords()).or().like(Member::getPhone,
                        pageWrap.getModel().getKeyWords()))
                .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
                        Company::getName,
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -1,8 +1,10 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.dao.UserActionMapper;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -56,6 +58,8 @@
    @Autowired
    private CarUseBookMapper carUseBookMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private CarUseBookJoinMapper carUseBookJoinMapper;
@@ -148,7 +152,7 @@
        }
        carUseBookMapper.insert(carUseBook);
        //用车申请 å®¡æ‰¹è®°å½•创建
        approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId());
        approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId(),null);
        //发送微信公众号通知
        //发送微信公众号通知
        WxPlatNotice wxPlatNotice = new WxPlatNotice();
@@ -168,7 +172,32 @@
    public void deleteById(Integer id) {
        carUseBookMapper.deleteById(id);
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public  void deleteById(Integer id,LoginUserInfo user) {
        Date date = new Date();
        MPJLambdaWrapper<CarUseBook>  queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(CarUseBook.class);
        queryWrapper.select("t1.name",CarUseBook::getMemberName);
        queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
                .eq(CarUseBook::getId,id)
                .last("limit 1"  );
        CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
        if(model==null ||Constants.equalsInteger(Constants.ONE,model.getIsdeleted())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        carUseBookMapper.update(null,new UpdateWrapper<CarUseBook>().lambda()
                .set(CarUseBook::getIsdeleted,Constants.ONE)
                .set(CarUseBook::getEditDate,date)
                .set(CarUseBook::getEditor,user.getId())
                .eq(CarUseBook::getId,id));
        String[] params = new String[3];
        params[0] = user.getRealname();
        params[1]=DateUtil.getPlusTime2(date);
        params[2]=model.getCarCode()+"-【乘车人:"+model.getMemberNames()+" ã€‘-【预约人:"+model.getMemberName()+"】-【时间:"+DateUtil.getPlusTime2(model.getStartTime())+"-"+DateUtil.getPlusTime2(model.getEndTime())+"】";
        //记录删除日志
        UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.CAR_BOOK_DEL,userActionMapper,date,params, JSONObject.toJSONString(model));
    }
    @Override
    public void delete(CarUseBook carUseBook) {
        UpdateWrapper<CarUseBook> deleteWrapper = new UpdateWrapper<>(carUseBook);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
@@ -373,32 +373,18 @@
                .selectAs(Company::getType,DeviceEventDTO::getCompanyType);
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),w->
                        w.like(Member::getName,pageWrap.getModel().getKeyWords()).or().like(Member::getPhone,pageWrap.getModel().getKeyWords()))
                .eq( pageWrap.getModel().getQueryUserType()!=null&&Constants.equalsInteger(pageWrap.getModel().getQueryUserType(),Constants.ONE),
                        w.like(Member::getName,pageWrap.getModel().getKeyWords()).or().like(Member::getPhone,pageWrap.getModel().getKeyWords()));
        queryWrapper.eq( pageWrap.getModel().getQueryUserType()!=null&&Constants.equalsInteger(pageWrap.getModel().getQueryUserType(),Constants.ONE),
                        Company::getType, Constants.ZERO)
                .isNull( pageWrap.getModel().getQueryUserType()!=null&&Constants.equalsInteger(pageWrap.getModel().getQueryUserType(),Constants.ZERO),
                        Member::getCompanyId)
                        Member::getId)
                .eq( pageWrap.getModel().getQueryUserType()!=null&&Constants.equalsInteger(pageWrap.getModel().getQueryUserType(),Constants.TWO),
                        Company::getType, Constants.ONE)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
                        DeviceEvent::getEventType,
                        pageWrap.getModel().getEventType())
                .like(Objects.nonNull(pageWrap.getModel().getCompanyName()),Company::getName,
                        pageWrap.getModel().getCompanyName())
                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
                        DeviceEvent::getCreateDate,
                        pageWrap.getModel().getStartTime())
                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
                        DeviceEvent::getCreateDate,
                        pageWrap.getModel().getEndTime())
//                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),  DeviceEvent::getEventType, pageWrap.getModel().getEventType())
                .like(Objects.nonNull(pageWrap.getModel().getCompanyName()),Company::getName, pageWrap.getModel().getCompanyName())
                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()), DeviceEvent::getCreateDate, pageWrap.getModel().getStartTime())
                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),  DeviceEvent::getCreateDate, pageWrap.getModel().getEndTime())
                .orderByDesc(DeviceEvent::getCreateDate);
        queryWrapper.orderByDesc(DeviceEvent::getHappenTime);
        IPage<DeviceEventDTO> deviceEventDTOIPage = deviceEventJoinMapper.selectJoinPage(page, DeviceEventDTO.class, queryWrapper);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -8,6 +8,7 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.dao.UserActionMapper;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -34,7 +35,6 @@
import com.doumee.service.business.third.EmayService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -71,6 +71,8 @@
    @Autowired
    private HiddenDangerLogMapper hiddenDangerLogMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
@@ -255,20 +257,21 @@
        if(Objects.isNull(model)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到隐患数据");
        }
        if (!Constants.equalsInteger(model.getStatus(),Constants.ZERO)) {
       /* if (!Constants.equalsInteger(model.getStatus(),Constants.ZERO)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态已流转,请刷新查看!");
        }
        }*/
        HiddenDanger hiddenDanger  = new HiddenDanger();
        hiddenDanger.setIsdeleted(Constants.ONE);
        hiddenDanger.setId(id);
        hiddenDanger.setEditor(user.getId());
        Date date =new Date();
        hiddenDanger.setEditDate(new Date());
        hiddenDanger.setEditDate(date);
        hiddenDangerMapper.updateById(hiddenDanger);
        //存储 æ“ä½œæ—¥å¿—
        HiddenDangerLog hiddenDangerLog = new HiddenDangerLog();
        hiddenDangerLog.setIsdeleted(Constants.ZERO);
        hiddenDangerLog.setCreateDate(new Date());
        hiddenDangerLog.setCreateDate(date);
        hiddenDangerLog.setCreator(hiddenDanger.getEditor());
        hiddenDangerLog.setEditDate(hiddenDangerLog.getCreateDate());
        hiddenDangerLog.setEditor(hiddenDanger.getCreator());
@@ -276,6 +279,13 @@
        hiddenDangerLog.setHiddenDangerId(hiddenDanger.getId());
        hiddenDangerLog.setObjType(Constants.FIVE);
        hiddenDangerLogMapper.insert(hiddenDangerLog);
        String[] params = new String[3];
        params[0] = user.getRealname();
        params[1]=DateUtil.getPlusTime2(date);
        params[2]=model.getAreaName()+"-【"+model.getContent()+"】";
        //记录删除日志
        UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.HIDEN_DANGER_DEL,userActionMapper,date,params,JSONObject.toJSONString(model));
    }
    @Override
@@ -403,6 +413,7 @@
        IPage<HiddenDanger> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<HiddenDanger> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.selectAll(HiddenDanger.class)
                .selectAs(HiddenDangerParam::getName,HiddenDanger::getCategoryName)
                .select("t1.name", HiddenDanger::getMemberName)
@@ -505,12 +516,20 @@
                .lambda()
                .set(Notices::getReaded,Constants.ONE)
                .set(Notices::getStatus,Constants.ONE)
                .set(Notices::getInfo,hiddenDanger.getStatus().equals(Constants.ONE)?"已整改":"已退回")
                .set(Notices::getParam2,hiddenDanger.getStatus())
                .set(Notices::getParam4,hiddenDanger.getLoginUserInfo().getMemberId())
                .eq(Notices::getObjId,hiddenDanger.getId())
                .eq(Notices::getObjType,Constants.THREE)
                .eq(Notices::getUserId,hiddenDanger.getLoginUserInfo().getMemberId())
        );
                .eq(Notices::getUserId,hiddenDanger.getLoginUserInfo().getMemberId()));
        //发起人代办标题修改为处理结果
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>()
                .lambda()
                .set(Notices::getInfo,hiddenDanger.getStatus().equals(Constants.ONE)?"已整改":"已退回")
                .set(Notices::getParam2,hiddenDanger.getStatus())
                .eq(Notices::getObjId,hiddenDanger.getId())
                .eq(Notices::getObjType,Constants.THREE)
                .eq(Notices::getParam3,hiddenDanger.getMemberId().toString()) );
        SystemUser memberUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
                .eq(SystemUser::getDeleted, Constants.ZERO)
@@ -561,6 +580,7 @@
        if(!(hiddenDanger.getStatus().equals(Constants.ONE)||hiddenDanger.getStatus().equals(Constants.TWO))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态错误,请刷新查看!");
        }
        hiddenDanger.setMemberId(model.getMemberId());//发起人
    }
    private void dealFileBiz(HiddenDanger hiddenDanger) {//整改前文件
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -1,8 +1,10 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.dao.UserActionMapper;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -58,6 +60,10 @@
    @Autowired
    private PlatformBooksMapper platformBooksMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private PlatformJobMapper platformJobMapper;
    @Autowired
    private NoticesJoinMapper noticesJoinMapper;
@@ -113,7 +119,32 @@
    public void deleteById(Integer id) {
        platformBooksMapper.deleteById(id);
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void deleteById(Integer id,LoginUserInfo user) {
        PlatformBooks model =findById(id);
        if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Date date =new Date();
        platformBooksMapper.update(null,new UpdateWrapper<PlatformBooks>().lambda()
                .set(PlatformBooks::getIsdeleted,Constants.ONE)
                .set(PlatformBooks::getEditDate,date)
                .set(PlatformBooks::getEditor,user.getId())
                .eq(PlatformBooks::getId,id));
        platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda()
                .set(PlatformJob::getIsdeleted,Constants.ONE)
                .set(PlatformJob::getEditDate,new Date())
                .set(PlatformJob::getEditor,user.getId())
                .eq(PlatformJob::getBookId,id)
                .eq(PlatformJob::getIsdeleted,Constants.ZERO));
        String[] params = new String[3];
        params[0] = user.getRealname();
        params[1]=DateUtil.getPlusTime2(date);
        params[2]=model.getContractNum()+"-【司机:"+model.getDriverName()+" "+model.getDriverPhone()+"】-【车牌好: "+model.getPlateNum()+"】";
        //记录删除日志
        UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.PLATFROM_BOOK_DEL,userActionMapper,date,params, JSONObject.toJSONString(model));
    }
    @Override
    public void delete(PlatformBooks platformBooks) {
        UpdateWrapper<PlatformBooks> deleteWrapper = new UpdateWrapper<>(platformBooks);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -10,7 +10,7 @@
import com.doumee.core.haikang.model.param.request.ParkReservationDelRequest;
import com.doumee.core.haikang.model.param.respose.ParkReservationAddResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.service.business.third.WmsService;
import com.doumee.dao.business.dao.UserActionMapper;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -75,6 +75,8 @@
    @Autowired
    private PlatformJobMapper platformJobMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private TmsService tmsService;
@@ -147,6 +149,30 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class})
    public  void deleteById(Integer id,LoginUserInfo user) {
        Date date = new Date();
        PlatformJob job = platformJobMapper.selectById(id);
        if(job==null ||Constants.equalsInteger(Constants.ONE,job.getIsdeleted())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(! Constants.equalsInteger(Constants.PlatformJobStatus.CANCEL.getKey(),job.getStatus())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,只能删除已取消的作业任务!");
        }
        platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda()
                        .set(PlatformJob::getIsdeleted,Constants.ONE)
                        .set(PlatformJob::getEditDate,date)
                        .set(PlatformJob::getEditor,user.getId())
                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                        .eq(PlatformJob::getId,id));
        String[] params = new String[3];
        params[0] = user.getRealname();
        params[1]=DateUtil.getPlusTime2(date);
        params[2]=job.getBillCode()+"-【司机:"+job.getDriverName()+" "+job.getDrivierPhone()+"】-【车牌号:"+job.getCarCodeFront()+"】";
        //记录删除日志
        UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.PLATFROM_JOB_DEL,userActionMapper,date,params,JSONObject.toJSONString(job));
    }
    @Override
    public void delete(Integer id) {
        platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda()
                        .set(PlatformJob::getIsdeleted,Constants.ONE)
@@ -205,6 +231,7 @@
        IPage<PlatformJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<PlatformJob> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper
                .selectAll(PlatformJob.class)
                .selectAs(Platform::getName,PlatformJob::getPlatformName)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/UserActionServiceImpl.java
@@ -1,14 +1,16 @@
package com.doumee.service.business.impl;
import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.dao.UserActionMapper;
import com.doumee.dao.business.model.UserAction;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.UserActionMapper;
import com.doumee.dao.business.join.UserActionJoinMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.UserAction;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.UserActionService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -21,6 +23,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -77,7 +80,24 @@
            this.updateById(userAction);
        }
    }
    public static void saveUserActionBiz(LoginUserInfo user, Integer bizId, Constants.UserActionType type, UserActionMapper userActionMapper, Date date, String[] params, String modelInfo) {
        String info = type.getInfo();
        if(params!=null){
            for (int i = 0; i < params.length; i++) {
                info = info.replace("${param"+(i+1)+"}",params[i]);
            }
        }
       UserAction userAction=new UserAction();
        userAction.setIsdeleted(Constants.ZERO);
        userAction.setCreateDate(date);
        userAction.setCreator(user.getId());
        userAction.setBeforeStatus(Constants.ZERO);
        userAction.setType(type.getKey());
        userAction.setContent(modelInfo);
        userAction.setRemark(info);
        userAction.setMemberId(bizId+"");
        userActionMapper.insert(userAction);
    }
    @Override
    public UserAction findById(Integer id) {
        return userActionMapper.selectById(id);
@@ -114,6 +134,7 @@
                .like(StringUtils.isNotBlank(queryModel.getCreateName()),SystemUser::getRealname,queryModel.getCreateName())
                .like(StringUtils.isNotBlank(queryModel.getMemberName()),Member::getName,queryModel.getMemberName())
                .like(StringUtils.isNotBlank(queryModel.getMobile()),Member::getPhone,queryModel.getMobile())
                .like(StringUtils.isNotBlank(queryModel.getRemark()),Member::getPhone,queryModel.getRemark())
                .and(StringUtils.isNotBlank(queryModel.getCompanyName()),
                        p-> p.like(Company::getName, queryModel.getCompanyName())
                                .or()
@@ -121,6 +142,10 @@
                .eq(!Objects.isNull(queryModel.getMemberType()),Member::getType,queryModel.getMemberType())
                .eq(!Objects.isNull(queryModel.getBeforeStatus()),UserAction::getBeforeStatus,queryModel.getBeforeStatus())
                .eq(!Objects.isNull(queryModel.getType()),UserAction::getType,queryModel.getType())
                .ge(queryModel.getObjType() !=null &&queryModel.getObjType() == Constants.ZERO,UserAction::getType,Constants.UserActionType.CANCEL_FREEZE.getKey())
                .le(queryModel.getObjType() !=null &&queryModel.getObjType() == Constants.ZERO,UserAction::getType,Constants.UserActionType.NOT_HEAD.getKey())
                .ge(queryModel.getObjType() !=null &&queryModel.getObjType() == Constants.ONE,UserAction::getType,Constants.UserActionType.MEET_BOOK_DEL.getKey())
                .le(queryModel.getObjType() !=null &&queryModel.getObjType() == Constants.ONE,UserAction::getType,Constants.UserActionType.HIDEN_DANGER_DEL.getKey())
                .orderByDesc(UserAction::getCreateDate)
        ;
        IPage<UserAction> result =  userActionJoinMapper.selectJoinPage(page,UserAction.class,queryWrapper);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
@@ -172,6 +172,9 @@
        if (pageWrap.getModel().getIdNo() != null) {
            queryWrapper.lambda().eq(VisitEvent::getIdNo, pageWrap.getModel().getIdNo());
        }
        if (pageWrap.getModel().getInOrOut() != null) {
            queryWrapper.lambda().eq(VisitEvent::getInOrOut, pageWrap.getModel().getInOrOut());
        }
        if (pageWrap.getModel().getBeVisitedPersonName() != null) {
            queryWrapper.lambda().eq(VisitEvent::getBeVisitedPersonName, pageWrap.getModel().getBeVisitedPersonName());
        }
@@ -275,6 +278,9 @@
                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
                        VisitEvent::getEventType,
                        pageWrap.getModel().getEventType())
                .eq(Objects.nonNull(pageWrap.getModel().getInOrOut()),
                        VisitEvent::getInOrOut,
                        pageWrap.getModel().getInOrOut())
                .ge(StringUtils.isNotBlank(pageWrap.getModel().getStartTime()),
                        VisitEvent::getCreateDate,
                        pageWrap.getModel().getStartTime())
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -18,6 +18,7 @@
import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest;
import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.dao.business.dao.*;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -27,10 +28,6 @@
import com.doumee.dao.admin.response.InterestedListVO;
import com.doumee.dao.admin.response.PCWorkPlatformDataVO;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.dao.SmsConfigMapper;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.dto.ResetPasswordDTO;
import com.doumee.dao.business.join.DeviceJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
@@ -83,6 +80,8 @@
    private RetentionMapper retentionMapper;
    @Autowired
    private VisitsJoinMapper visitsMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private ApproveMapper approveMapper;
    @Autowired
@@ -287,7 +286,7 @@
        }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
            visits.setStatus(Constants.VisitStatus.waitCheck);
            visitsMapper.updateById(visits);
            approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
            approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId(),member);
        }else{
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!");
        }
@@ -344,7 +343,7 @@
            }
        }
        approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
        approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId(),null);
        return visits.getId();
    }
@@ -1137,6 +1136,32 @@
    public void deleteById(Integer id) {
        visitsMapper.deleteById(id);
    }
    @Override
    @Transactional(rollbackFor ={BusinessException.class,Exception.class})
    public  void deleteById(Integer id,LoginUserInfo user) {
        Visits model = visitsMapper.selectById(id);
        if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Date date = new Date();
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda()
                .set(Visits::getIsdeleted,Constants.ONE)
                .set(Visits::getEditDate,new Date())
                .set(Visits::getEditor,user.getId())
                .eq(Visits::getId,id));
        String[] params = new String[3];
        params[0] = user.getRealname();
        params[1]=DateUtil.getPlusTime2(date);
        if(Constants.equalsInteger(model.getType(),Constants.TWO)){
            params[2]=model.getCarNos()+"-【单位:"+model.getCompanyName()+" "+model.getName()+" "+model.getPhone()+"】-【时间:"+DateUtil.getPlusTime2(model.getStarttime())+"-"+DateUtil.getPlusTime2(model.getEndtime())+"】";
            //记录删除访客报备日志
            UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.VISIT_DEL,userActionMapper,date,params, JSONObject.toJSONString(model));
        }else{
            params[2]=model.getCompanyName()+"-【访客:"+model.getName()+" "+model.getPhone()+"】-【时间:"+DateUtil.getPlusTime2(model.getStarttime())+"-"+DateUtil.getPlusTime2(model.getEndtime())+"】";
            //记录删除访客申请日志
            UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.VISIT_DEL,userActionMapper,date,params, JSONObject.toJSONString(model));
        }
    }
    @Override
    public void delete(Visits visits) {
@@ -1180,6 +1205,7 @@
        queryWrapper.leftJoin("Member t3 on t.CREATE_MEMBER_ID=t3.id");
        queryWrapper.eq(Visits::getId,id);
        queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
        Visits result = visitsJoinMapper.selectJoinOne(Visits.class,queryWrapper);
        if(result!=null){
@@ -1190,6 +1216,8 @@
                List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(deviceQuery);
                result.setDeviceRoleList(deviceRoleList);
            }
        }else{
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        MPJLambdaWrapper<Visits> visitQuery = new MPJLambdaWrapper<>();
@@ -1373,7 +1401,7 @@
    @Override
    public VisitDetailVO getVisitDetail(Integer id,Integer memberId){
        Visits visits = visitsMapper.selectById(id);
        if(Objects.isNull(visits)){
        if(Objects.isNull(visits) || Constants.equalsInteger(visits.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Member member = memberMapper.selectById(visits.getReceptMemberId());
@@ -1501,7 +1529,7 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!visits.getStatus().equals(Constants.VisitStatus.signin)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"访客记录状态错误,请刷新重试");
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"仅支持【拜访中】状态进行该离场操作,请刷新重试");
        }
        VisitAppointmentOutRequest request = new VisitAppointmentOutRequest();
        request.setOrderId(visits.getHkId());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncNoticeServiceImpl.java
@@ -72,7 +72,7 @@
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                GetTodoListRequest param = new GetTodoListRequest();
                param.setComId("dfe");
//                param.setComId("dfe");//接全部的代办
                param.setUserId(username);
                param.setStatus(1);//只查待处理的数据
                param.setPageNo(curPage);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -460,7 +460,6 @@
     *  æ ¹æ®è®¿å®¢æŽ¨é€è®¿å®¢è®°å½•编码,处理访客记录、在场人员等信息
     */
    private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,  InoutDayCount inoutDayCount) {
        EventVisitIccmDataRequest model = request.getData();
        EventVisitIccmInvoiceParamRequest data =  request.getData().getVisitorInvoices();
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
@@ -502,6 +501,7 @@
                    updateVistis.setOutType(Constants.ZERO);
                    updateVistis.setOutInfo("访客正常签离");
                }
                delRetentionLis.add(visits.getMemberId());
            }else{
                //如果人员信息存在,切是访客通行,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件)
                delRetentionLis.add(visits.getMemberId());
@@ -561,6 +561,15 @@
        event.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime()));
        if(event.getCreateDate() == null){
            event.setCreateDate(new Date());
        }
        if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey())  {
            //如果是访客通行事件,进入进出事件
            if(request.getData()!=null&&request.getData().getParamValues()!=null &&
                    StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){
                event.setInOrOut("0");//进
            }else{
                event.setInOrOut("1");//出
            }
        }
        event.setVisitorWorkUint(detail.getUnit());
        event.setVisitorId(detail.getVisitorId());
@@ -816,7 +825,7 @@
        event.setEventCmd(request.getData().getEventCmd());
        event.setCardNo(request.getData().getCardNo());
        event.setCarAttributeName(request.getData().getCarAttributeName());
        event.setCarType(Constants.RetentionCarType.unknown);//默认未登记车辆
        if(request.getData().getInResult()!=null && request.getData().getInResult().getRlsResult() !=null ){
            //放行方式
            event.setReleaseWay(request.getData().getInResult().getRlsResult().getReleaseWay());
@@ -1076,13 +1085,24 @@
                        .selectAs(Platform::getName,PlatformJob::getPlatformName)
                        .selectAs(Platform::getLedContent,PlatformJob::getLedContent)
                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
//                        .eq(StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeFront,status.getPlateNo() )//前车牌号
//                        .eq(!StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeBack,status.getPlateNo() )//后车牌号
//                        .eq(StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeFront,status.getPlateNo() )//前车牌号
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO )
                        .eq(PlatformJob::getPlatformId,model.getPlatformId() )
                        .orderByDesc(PlatformJob::getCallDate)
                        .last("limit 1 "));
                if(job == null){
                    if(StringUtils.equals(status.getMotionStatus(),"enter")){
                        //如果月台当前没作业,直接提示车辆停错
                        Platform platform = platformMapper.selectJoinOne(Platform.class, new MPJLambdaWrapper<Platform>()
                                .selectAll(Platform.class)
                                .eq(Platform::getIsdeleted,Constants.ZERO )
                                .eq(PlatformJob::getId,model.getPlatformId() )
                                .last("limit 1 "));
                        if(platform!=null){
                            dealCarsAndPlatformErrorBiz(platform,status);
                        }
                    }
                    continue;//如果作业为空,跳过处理
                }
                PlatformJob update = new PlatformJob();
@@ -1330,6 +1350,56 @@
            platformBroadcastLogMapper.insert(logList);
        }
    }
    private void dealCarsAndPlatformErrorBiz( Platform model, EventPlatformCarsStatusInfoRequest status) {
        //处理车辆进入错误月台业务逻辑
        SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO();
        savePlatformWarnEventDTO.setPlatformJobId(model.getId());
        savePlatformWarnEventDTO.setPlatformId(model.getId());
        savePlatformWarnEventDTO.setCarCode(status.getPlateNo());
        savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.STOP_ERROR.getKey());
        platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO);
        int speed = 13;
        try {
            speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode());
        }catch (Exception e){
        }
        List<PlatformDevice> deviceList = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda()
                .eq(PlatformDevice::getPlatformId,model.getId())
                .eq(PlatformDevice::getIsdeleted,Constants.ZERO));
        if(deviceList ==null || deviceList.size() == 0){
            return;
        }
        String content =Constants.PlatformLedContent.WRONG_IN.getInfo();
        content = content.replace("${param2}",model.getName());
        content = content.replace("${param}",status.getPlateNo());
        List<String> broadcastList = new ArrayList<>();
        List<String> ledList = new ArrayList<>();
        String bNames = "";
        List<PlatformBroadcastLog> logList = new ArrayList<>();
        for(PlatformDevice device : deviceList){
            if(StringUtils.isBlank(device.getHkId())){
                continue;
            }
            if(Constants.equalsInteger(device.getType(),Constants.TWO)){
                //如果是广播点
                bNames += device.getName()+";";
                broadcastList.add(device.getHkId());
            }
        }
        if(broadcastList.size()>0){
            PlatformJob job = new PlatformJob();
            job.setId(-1);
            job.setCarCodeFront(status.getPlateNo());
            job.setPlatformId(model.getId());
            PlatformBroadcastLog log = dealBroadcastBiz(job,broadcastList,bNames,Constants.PlatformBroadcastContent.WRONG_IN.getInfo().replace("${param}",status.getPlateNo()));
            logList.add(log);
        }
        if(logList.size()>0){
            platformBroadcastLogMapper.insert(logList);
        }
    }
    /**
     * å¹¿æ’­é€šçŸ¥
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -187,12 +187,13 @@
                    // å¯¹ç›¸åº”状态下的数据进行【已签离】处理
                    if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signout)){
                        Visits update = new Visits();
                        //已失效
                        //已签离
                        update.setStatus(Constants.VisitStatus.signout);
                        update.setEditDate(date);
                        update.setId(c.getId());
                        update.setInDate(DateUtil.getISO8601DateByStr2(data.getVisitStartTime()));
                        update.setOutDate(DateUtil.getISO8601DateByStr2(data.getVisitEndTime()));
                        update.setOutInfo(model.getVisitorStatus().equals(5)?"过期自动签离":"查询已签离");
                        update.setRemark("已签离");
                        visitsMapper.updateById(update);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1739,11 +1739,11 @@
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.pass,Constants.VisitStatus.xfSuccess )));//待访问
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
        result.setRegisterVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.signout,Constants.VisitStatus.signin )));//已登记
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
        result.setLevelNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.signout )));//已签离
@@ -1791,6 +1791,7 @@
                result.getVisitRetentionDataList().add(t);
            });
        }
        result.setRetentionNum(result.getVisitRetentionDataList().size());
        return result;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
@@ -373,8 +373,16 @@
    private void dealCarPlatformAndDriverInfo(PlatformJob job,int type) {
        //查询车辆是否自有车,以及jobNum表示但求作业数量(非已离园的作业数)
        Cars car = carsMapper.selectOne(new QueryWrapper<Cars>()
                .select("*,(select count(1) from platform_job b where b.plate_num='"+job.getCarCodeFront()+"' and b.status in("+
                        Constants.PlatformJobStatus.LEAVED.getKey()+")) as jobNum")
                .select("*,(select count(1) from platform_job b where b.plate_num='"+job.getCarCodeFront()+"' " +
                        "and b.status in("+
                        Constants.PlatformJobStatus.WART_SIGN_IN.getKey()+","+
                        Constants.PlatformJobStatus.WART_SIGN_IN.getKey()+","+
                        Constants.PlatformJobStatus.WAIT_CALL.getKey()+","+
                        Constants.PlatformJobStatus.IN_WAIT.getKey()+","+
                        Constants.PlatformJobStatus.CALLED.getKey()+","+
                        Constants.PlatformJobStatus.TRANSFERING.getKey()+","+
                        Constants.PlatformJobStatus.EXCEPTION.getKey()+","+
                        Constants.PlatformJobStatus.WORKING.getKey()+")) as jobNum")
                .lambda()
                .eq(Cars::getIsdeleted,Constants.ZERO)
                .eq(Cars::getType,Constants.ONE)
@@ -383,8 +391,10 @@
            //如果是自有物流车
            job.setType(type==0?Constants.platformJobType.zycxh:Constants.platformJobType.zyczh);//自有车卸货/装货
            job.setCarCodeBack(job.getCarCodeFront());//自有车默认前后车牌一样
            if(retentionMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,Constants.THREE)
                    .eq(Retention::getCarNo,car.getCode()))>Constants.ZERO && car.getJobNum() == 0){
            if(job.getType() ==Constants.platformJobType.zyczh
                    && retentionMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,Constants.THREE)
                    .eq(Retention::getCarNo,car.getCode()))>Constants.ZERO
                    && car.getJobNum() == 0){
                //如果车辆在园
                job.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey());//在园无作业状态,则自动【已签到】处理
                job.setArriveDate(new Date());