| | |
| | | VUE_APP_API_PREFIX = '/admin_interface' |
| | | |
| | | # 项ç®åç§° |
| | | VUE_APP_TITLE = 'åææºæ
§ååºç³»ç»' |
| | | # VUE_APP_TITLE = 'åææºæ
§ååºç³»ç»' |
| | | VUE_APP_TITLE = 'ä¼å©å¤§å±ç³»ç»' |
| | |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| | | <meta name="viewport" content="width=device-width,initial-scale=1.0"> |
| | | <link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
| | | <title>åææºæ
§ååºç³»ç»</title> |
| | | <title>ä¼å©å¤§å±ç³»ç»</title> |
| | | </head> |
| | | <body> |
| | | <noscript> |
| | |
| | | export function memberSync (data) { |
| | | return request.post('/business/member/syncAll', data) |
| | | } |
| | | export function syncUserData (data) { |
| | | return request.post('/business/hksync/syncUserData', data) |
| | | } |
| | | export function delHkForce (data) { |
| | | return request.post('/business/member/delHkForce', data) |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="70%" |
| | | :visible.sync="visible" |
| | | append-to-body |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | > |
| | | <div class="list"> |
| | | <div class="list_item"> |
| | | <div class="list_item_label">æè®¿ä¿¡æ¯</div> |
| | | <div class="list_item_val" v-if="info" style="display: inline-block"> |
| | | <div class="list_item_val_item">æè®¿å¯¹æ¹ï¼{{info.receptMemberName}} - {{info.receptMemberDepartment}}</div> |
| | | <div class="list_item_val_item">é¢çº¦æ¶é´ï¼{{info.starttime}} è³ {{info.endtime}}</div> |
| | | <div class="list_item_val_item" v-if="info.inDate && info.outDate">ç¾å°æ¶é´ï¼{{info.inDate}} è³ {{info.outDate}}</div> |
| | | <div class="list_item_val_item" v-else>ç¾å°æ¶é´ï¼-</div> |
| | | <div class="list_item_val_item">æè®¿äºç±ï¼{{info.reason}}</div> |
| | | <div class="list_item_val_item">ç³è¯·äººåï¼{{info.name}} {{info.companyName}}</div> |
| | | <div class="list_item_val_item">ç³è¯·é¨ç¦ï¼{{info.deviceRoleList ? info.deviceRoleList.map(item => item.name).join(' | ') : '-'}}</div> |
| | | <div class="list_item_val_item">å建æ¶é´ï¼{{info.createDate}}</div> |
| | | </div> |
| | | <div class="list_item_val" v-if="info" style="display: inline-block;float: right"> |
| | | <div class="list_item_val_item" id="qrcode2" ref="qrcode2"></div> |
| | | </div> |
| | | </div> |
| | | <div class="list_item"> |
| | | <div class="list_item_label">访客信æ¯</div> |
| | | <div class="list_item_table" v-if="info"> |
| | | <el-table |
| | | :data="info.withUserList ? info.withUserList : []" |
| | | border |
| | | :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}" |
| | | style="width: 100%"> |
| | | <el-table-column prop="status" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.status === 0">æªç¾å°</span> |
| | | <span v-if="row.status === 1">å·²ç¾å°</span> |
| | | <span v-if="row.status === 2">å·²ç¾é</span> |
| | | <span v-if="row.status === 3">æ»ç</span> |
| | | <span v-if="row.status === 4">æªè®¿é®</span> |
| | | <span v-if="row.status === 5">èªå¨ç¾ç¦»</span> |
| | | <span v-if="row.status === 6">æªç¾é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | label="å§å"> |
| | | <template slot-scope="{row}"> |
| | | <span>{{row.name}}</span> |
| | | <span style="border-radius: 5px; padding: 2px 5px; box-sizing: border-box; border: 1px solid #0d68ff; color: #0d68ff; margin-left: 5px;" v-if="info.memberId === row.memberId">ç³è¯·äºº</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ§å«"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.sex === 1">ç·</span> |
| | | <span v-if="row.sex === 2">女</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="birthday" |
| | | label="å¹´é¾"> |
| | | <template slot-scope="{row}"> |
| | | <span>{{getAge(row.birthday)}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | prop="phone" |
| | | label="ææºå·"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è¯ä»¶ç±»å"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.idcardType === 111">身份è¯</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="160" |
| | | prop="idcardDecode" |
| | | label="身份è¯å·ç "> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | prop="companyName" |
| | | label="å
¬å¸"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | prop="carNos" |
| | | label="éè¡è½¦è¾"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | label="访客äºç»´ç "> |
| | | <template slot-scope="{row}"> |
| | | <div :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | label="人è¸ç
§ç"> |
| | | <template slot-scope="{row}"> |
| | | <el-image |
| | | v-if="row.faceImg" |
| | | style="width: 100px; height: 100px" |
| | | :src="info.prefixUrl + row.faceImg" |
| | | :preview-src-list="[info.prefixUrl + row.faceImg]"> |
| | | </el-image> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | width="150" |
| | | label="å¥åº·è¯"> |
| | | <template slot-scope="{row}"> |
| | | <el-image |
| | | v-if="row.imgurl" |
| | | style="width: 100px; height: 100px" |
| | | :src="info.prefixUrl + row.imgurl" |
| | | :preview-src-list="[info.prefixUrl + row.imgurl]"> |
| | | </el-image> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { queryById } from '@/api/business/visits' |
| | | import QRCode from "qrcodejs2"; |
| | | export default { |
| | | name: 'OperaVisitsIccmDesWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | list: [], |
| | | info: null, |
| | | innerVisible:false |
| | | } |
| | | }, |
| | | created () { |
| | | }, |
| | | methods: { |
| | | getAge (val) { |
| | | if (!val) return '' |
| | | const currentYear = new Date().getFullYear() // å½åç年份 |
| | | const calculationYear = new Date(val).getFullYear() // 计ç®ç年份 |
| | | const wholeTime = currentYear + val.substring(4) // å¨å²æ¶é´ |
| | | const calculationAge = currentYear - calculationYear // æç
§å¹´ä»½è®¡ç®çå¹´é¾ |
| | | // 夿æ¯å¦è¿äºçæ¥ |
| | | if (new Date().getTime() > new Date(wholeTime).getTime()) { |
| | | return calculationAge |
| | | } else { |
| | | return calculationAge - 1 |
| | | } |
| | | }, |
| | | crateQrcodeShow (div,qrcode1) { |
| | | if(qrcode1 ==null ||qrcode1 ==''){ |
| | | return; |
| | | } |
| | | this.qr = new QRCode(div, { |
| | | width: 90, |
| | | height: 90, |
| | | text: qrcode1 |
| | | }) |
| | | }, |
| | | |
| | | open (title, id) { |
| | | this.title = title |
| | | this.visible = true |
| | | queryById(id) |
| | | .then(res => { |
| | | console.log(res) |
| | | this.info = res |
| | | this.$nextTick(() => { |
| | | // this.$refs.qrcode2.innerHTML = '' |
| | | // this.crateQrcodeShow('qrcode2',res.qrcode) |
| | | if(this.info.withUserList ){ |
| | | this.info.withUserList.forEach(row => { |
| | | this.$refs['qrcode'+row.id].innerHTML = '' |
| | | this.crateQrcodeShow('qrcode'+row.id,row.qrcode) |
| | | }) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style> |
| | | .el-image-viewer__wrapper { |
| | | z-index: 3000 !important; |
| | | } |
| | | </style> |
| | | <style lang="scss" scoped> |
| | | .list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | .list_item { |
| | | width: 100%; |
| | | margin-bottom: 30px; |
| | | &:last-child { |
| | | margin-bottom: 0 !important; |
| | | } |
| | | .list_item_label { |
| | | font-size: 18px; |
| | | font-weight: 600; |
| | | color: #000000; |
| | | margin-bottom: 15px; |
| | | } |
| | | .list_item_info { |
| | | font-size: 14px; |
| | | color: #222222; |
| | | margin-bottom: 10px; |
| | | } |
| | | .list_item_status { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | .list_item_status_item { |
| | | width: 100%; |
| | | max-height: 100px; |
| | | position: relative; |
| | | margin-bottom: 30px; |
| | | .dian { |
| | | width: 15px; |
| | | height: 15px; |
| | | border-radius: 50%; |
| | | background: #ffb447; |
| | | position: absolute; |
| | | left: 0; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | .xian { |
| | | width: 1px; |
| | | height: calc(100% + 30px); |
| | | background: #ffb447; |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 7px; |
| | | transform: translate(-50%, 0); |
| | | } |
| | | .status_info { |
| | | /*width: 100%;*/ |
| | | height: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | margin-left: 30px; |
| | | box-sizing: border-box; |
| | | .status_info_a { |
| | | font-size: 16px; |
| | | color: black; |
| | | margin-bottom: 10px; |
| | | } |
| | | .status_info_b { |
| | | font-size: 13px; |
| | | color: #666666; |
| | | margin-bottom: 10px; |
| | | } |
| | | .status_info_c { |
| | | padding: 5px 10px; |
| | | background: #ececec; |
| | | font-size: 13px; |
| | | color: black; |
| | | border-radius: 5px; |
| | | box-sizing: border-box; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .list_item_val { |
| | | width: 100%; |
| | | margin-bottom: 15px; |
| | | &:last-child { |
| | | margin-bottom: 0 !important; |
| | | } |
| | | .list_item_val_item { |
| | | font-size: 14px; |
| | | color: #222222; |
| | | margin-bottom: 5px; |
| | | &:last-child { |
| | | margin-bottom: 0 !important; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | // æªç»å½ |
| | | if (response.data.code === 401) { |
| | | if (response.config.autoLogin !== false) { |
| | | window.location.href = process.env.VUE_APP_ROUTER_MODE === 'history' ? '/#/login' : '/login' |
| | | window.location.href = process.env.VUE_APP_ROUTER_MODE === 'history' ? 'admin/#/login' : 'admin/login' |
| | | } |
| | | return Promise.reject(response.data) |
| | | } |
| | |
| | | </template> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:member:delete','business:member:sync']"> |
| | | <ul class="toolbar" v-permissions="['business:member:delete','business:member:sync','business:member:syncdata']"> |
| | | <!-- <li><el-button type="primary">é¨ç¦ææ</el-button></li>--> |
| | | <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">忥</el-button></li> |
| | | <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">å é¤</el-button></li> |
| | | <li><el-button type="primary" v-permissions="['business:member:syncdata']" :loading="loading" @click="syncUserData()">ç«å³ä¸åå¾
忥åå·¥</el-button></li> |
| | | <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">忥</el-button></li> |
| | | <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">å é¤</el-button></li>--> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | |
| | | import cardOpeningRecord from '@/components/business/cardOpeningRecord' |
| | | import Tree from '@/components/common/Tree' |
| | | import { fetchList } from '@/api/business/company' |
| | | import { memberSync, roleAuth } from '@/api/business/member' |
| | | import { memberSync, roleAuth, syncUserData } from '@/api/business/member' |
| | | export default { |
| | | name: 'internalMember', |
| | | extends: BaseTable, |
| | |
| | | }) |
| | | .catch(() => {}) |
| | | }, |
| | | async syncUserData () { |
| | | this.$dialog.actionConfirm('该æä½å°è§¦åä¸åç人åä¿¡æ¯æ´æ°åéæ°ä¸åï¼è¯·è°¨æ
æä½', 'æ¨ç¡®è®¤ç«å³ä¸åå
¨é¨å¾
åæ¥äººåä¿¡æ¯åï¼') |
| | | .then(() => { |
| | | this.loading = true |
| | | syncUserData({}) |
| | | .then(res => { |
| | | this.$tip.apiSuccess(res || '忥æå') |
| | | this.search() |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false |
| | | }) |
| | | }) |
| | | .catch(() => {}) |
| | | }, |
| | | callback (row) { |
| | | this.searchForm.erpOrgId = row.erpId |
| | | this.searchForm.companyId = row.id |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:visitevent:query']"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="å§å/ææºå·" prop="keyWords"> |
| | | <el-input v-model="searchForm.keyWords" placeholder="请è¾å
¥å§å/ææºå·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="车çå·" prop="carNo"> |
| | | <el-input v-model="searchForm.carNo" placeholder="请è¾å
¥è½¦çå·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å
¬å¸åç§°" prop="visitorWorkUint"> |
| | | <el-input v-model="searchForm.visitorWorkUint" placeholder="请è¾å
¥å
¬å¸åç§°" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="äºä»¶ç±»å" prop="eventType"> |
| | | <el-select v-model="searchForm.eventType" placeholder="è¯·éæ©"> |
| | | <el-option label="访客ç»è®°" value="541200006"></el-option> |
| | | <el-option label="访客ç¾ç¦»" value="541200007"></el-option> |
| | | <el-option label="访客éè¡" value="541200060"></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> |
| | | </el-form-item> |
| | | <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> |
| | | </el-radio-group> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | </section> |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:visitevent:exportExcel']"> |
| | | <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-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> |
| | | <el-table-column prop="visitorWorkUint" label="å
¬å¸" min-width="100px"></el-table-column> |
| | | <el-table-column prop="carNo" label="车çå·" min-width="100px"></el-table-column> |
| | | <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 label="ææå¾" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <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> |
| | | </template> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import { timeForMat } from '@/utils/util' |
| | | export default { |
| | | name: 'VisitEvent', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination }, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | | searchForm: { |
| | | personName: '', |
| | | carNo: '', |
| | | keyWords: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | eventType: '', |
| | | visitorWorkUint: '', |
| | | radio: '0' |
| | | }, |
| | | time: [] |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: '访客äºä»¶æ¨éè®°å½è¡¨', |
| | | api: '/business/visitEvent', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | |
| | | this.changeRadio('0') |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | seleTime (e) { |
| | | this.searchForm.startTime = e[0] |
| | | this.searchForm.endTime = e[1] |
| | | this.searchForm.radio = null |
| | | this.search() |
| | | }, |
| | | changeRadio (e) { |
| | | if (e === '0') { |
| | | this.searchForm.startTime = timeForMat(0)[0] |
| | | this.searchForm.endTime = timeForMat(0)[1] |
| | | this.time = timeForMat(0) |
| | | } else if (e === '1') { |
| | | this.searchForm.startTime = timeForMat(6)[0] |
| | | this.searchForm.endTime = timeForMat(6)[1] |
| | | this.time = timeForMat(6) |
| | | } else if (e === '2') { |
| | | this.searchForm.startTime = timeForMat(29)[0] |
| | | this.searchForm.endTime = timeForMat(29)[1] |
| | | this.time = timeForMat(29) |
| | | } |
| | | this.search() |
| | | }, |
| | | reset () { |
| | | this.$refs.searchForm.resetFields() |
| | | this.time = [] |
| | | this.searchForm.radio = '0' |
| | | this.changeRadio('0') |
| | | this.search() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:visits:query']"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="å§å/ææºå·" prop="name"> |
| | | <el-input v-model="searchForm.name" placeholder="请è¾å
¥å§å/ææºå·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="身份è¯å·" prop="idcardNo"> |
| | | <el-input v-model="searchForm.idcardNo" placeholder="请è¾å
¥èº«ä»½è¯å·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å
¬å¸åç§°" prop="companyName"> |
| | | <el-input v-model="searchForm.companyName" placeholder="请è¾å
¥å
¬å¸åç§°" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="审æ¹ç¶æ" prop="status"> |
| | | <el-select v-model="searchForm.status" placeholder="è¯·éæ©"> |
| | | <el-option label="æªç¾å°" value="0"></el-option> |
| | | <el-option label="å·²ç¾å°" value="1"></el-option> |
| | | <el-option label="å·²ç¾é" value="2"></el-option> |
| | | <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> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:visits:exportExcel']" @click="exportExcel">导åº</el-button>--> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | </section> |
| | | </el-form> |
| | | <!-- è¡¨æ ¼åå页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:visits:sync']"> |
| | | <li><el-button type="primary" v-permissions="['business:visits:sync']" @click="$refs.OperaVisitsHkWindow.open('åæ¥è®¿å®¢è®°å½')">忥</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="name" label="访客å§å" min-width="100px"></el-table-column> |
| | | <el-table-column prop="phone" label="ææºå·" min-width="100px"></el-table-column> |
| | | <el-table-column prop="companyName" label="å
¬å¸åç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="receptMemberName" label="被访人" min-width="100px"></el-table-column> |
| | | <el-table-column prop="reason" label="æè®¿äºç±" min-width="100px"></el-table-column> |
| | | <el-table-column label="æè®¿æ¶é´" min-width="170px"> |
| | | <template slot-scope="{row}"> |
| | | <span>èµ·ï¼{{row.starttime}}</span><br/> |
| | | <span>æ¢ï¼{{row.endtime}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="é访人å" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span>{{row.memberNum || '-'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="é访车è¾" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.carNos">{{row.carNos.split(',').length}}</span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="status" fixed="right" label="ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.status === 0">æªç¾å°</span> |
| | | <span v-if="row.status === 1">å·²ç¾å°</span> |
| | | <span v-if="row.status === 2">å·²ç¾é</span> |
| | | <span v-if="row.status === 3">æ»ç</span> |
| | | <span v-if="row.status === 4">æªè®¿é®</span> |
| | | <span v-if="row.status === 5">èªå¨ç¾ç¦»</span> |
| | | <span v-if="row.status === 6">æªç¾é</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:visits:update', 'business:visits:delete'])" |
| | | label="æä½" |
| | | min-width="100" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.OperaVisitsIccmDecWindow.open('详æ
', row.id)" >æ¥ç详æ
</el-button> |
| | | <!-- <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">æ¥è¯¢å®¡æ¹ç»æ</el-button>--> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | > |
| | | </pagination> |
| | | <!-- 详æ
--> |
| | | <OperaVisitsIccmDecWindow ref="OperaVisitsIccmDecWindow" /> |
| | | <OperaVisitsHkWindow ref="OperaVisitsHkWindow" @success="search()" /> |
| | | </template> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaVisitsHkWindow from '@/components/business/OperaVisitsHkWindow' |
| | | import OperaVisitsIccmDecWindow from '@/components/business/OperaVisitsIccmDesWindow' |
| | | export default { |
| | | name: 'Visits', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaVisitsIccmDecWindow,OperaVisitsHkWindow }, |
| | | data () { |
| | | return { |
| | | // æç´¢ |
| | | searchForm: { |
| | | name: '', |
| | | companyName: '', |
| | | idcardNo: '', |
| | | status: '' |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: '访客ç³è¯·ä¿¡æ¯è¡¨', |
| | | api: '/business/visits', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | } |
| | | </script> |
| | |
| | | // 详ç»é
置请åèhttps://cli.vuejs.org/zh/config/#vue-config-js |
| | | // const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1) |
| | | const path = require('path') |
| | | module.exports = { |
| | | publicPath: process.env.VUE_APP_CONTEXT_PATH, |
| | | outputDir: 'admin', |
| | |
| | | // target: 'http://218.23.218.228:8018/admin_interface', |
| | | // http://218.23.218.228:9912/admin_interface |
| | | // http://facepay.huasunsolar.com/admin_interface |
| | | target: 'http://localhost:10028', |
| | | target: 'http://localhost/admin_interface ', |
| | | changeOrigin: true, |
| | | pathRewrite: { |
| | | [`^${[process.env.VUE_APP_API_PREFIX]}`]: '' |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | configureWebpack: { |
| | | resolve: { |
| | | alias: { |
| | | '@': path.resolve(__dirname, 'src') |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | @Autowired |
| | | private DataSyncConfig dataSyncConfig; |
| | | |
| | | /** |
| | | * æ¯åéæå䏿¬¡ä»æ¥ç访客é¢çº¦æ°æ® |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron= "0 0 23 * * ?") |
| | | public void syncVehicleUpdateData() throws Exception { |
| | | hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000)); |
| | | } |
| | | /** |
| | | * æ¯åéæå䏿¬¡ä»æ¥ç访客é¢çº¦æ°æ® |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(fixedRate= 3*60*1000) |
| | | public void syncVistAppointData() throws Exception { |
| | | if(Constants.DEALING_FROM_HK_VISIT){ |
| | | return ; |
| | | } |
| | | try { |
| | | Constants.DEALING_FROM_HK_VISIT =true; |
| | | hkSyncVisitFromHKService.syncVistAppointData(new Date()); |
| | | Constants.DEALING_FROM_HK_VISIT =false; |
| | | }catch (Exception e){ |
| | | // throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对ä¸èµ·ï¼æµ·åº·åæ¥æ°æ®å¤±è´¥~"); |
| | | }finally { |
| | | Constants.DEALING_FROM_HK_VISIT =false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¯10åéæå䏿¬¡ææ°è®¿å®¢ç»è®°ç¶æï¼é¢çº¦æååå·²ç»è®°ï¼ |
| | | * @throws Exception |
| | |
| | | * ä¸è½½æµ·åº·ç³»ç»å¾çæ°æ® |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(fixedRate= 60*1000) |
| | | // @Scheduled(fixedRate= 60*1000) |
| | | public void downloadHkImg() throws Exception { |
| | | if(dataSyncConfig.getNeedDealImg()!=null && dataSyncConfig.getNeedDealImg()){ |
| | | hkSyncImgService.downHKImgs(0); |
| | |
| | | hkSyncVisitService.syncVisitData(); |
| | | } |
| | | |
| | | /** |
| | | * æ¯åéæå䏿¬¡ä»æ¥ç访客é¢çº¦æ°æ® |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron= "0 0 23 * * ?") |
| | | public void syncVehicleUpdateData() throws Exception { |
| | | hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 宿¶å»ç»å
é¨äººå |
| | | */ |
| | | /** |
| | | * 宿¶å»ç»å
é¨äººå |
| | | */ |
| | | // @Scheduled(fixedRate= 60*1000) |
| | | public void memberFreeze() { |
| | | memberService.memberFreeze(); |
| | | } |
| | | /** |
| | | * æ¯å¤©æ¸
çè¶
è¿ä¸å¨çæ¥å£æ¥å¿æ°æ®ï¼æ¸
é¤åå®é²å¹³å°å¯¹æ¥çæ¥å£æ°æ®ï¼ |
| | | * @throws Exception |
| | | */ |
| | | // @Scheduled(cron= "0 0 23 * * ?") |
| | | public void clearThreeMonthLog() throws Exception { |
| | | interfaceLogService.clearThreeMonthLog(); |
| | | } |
| | | public void memberFreeze() { |
| | | memberService.memberFreeze(); |
| | | } |
| | | /** |
| | | * æ¯å¤©æ¸
çè¶
è¿ä¸å¨çæ¥å£æ¥å¿æ°æ®ï¼æ¸
é¤åå®é²å¹³å°å¯¹æ¥çæ¥å£æ°æ®ï¼ |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron= "0 0 23 * * ?") |
| | | public void remainLastLogs() throws Exception { |
| | | interfaceLogService.remainLastLogs(); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | compression: |
| | | enabled: true |
| | | mime-types: application/json |
| | | port: 10031 |
| | | port: 10033 |
| | | tomcat: |
| | | max-swallow-size: -1 |
| | | servlet: |
| | |
| | | package com.doumee.api.business; |
| | | |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.config.DataSyncConfig; |
| | | import com.doumee.core.annotation.pr.PreventRepeat; |
| | | import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; |
| | | import com.doumee.core.haikang.model.param.request.EventSubRequest; |
| | |
| | | import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmDataRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest; |
| | | import com.doumee.core.model.ApiResponse; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncPrivilegeServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.shiro.authz.annotation.RequiresPermissions; |
| | |
| | | public class HkSyncController extends BaseController { |
| | | |
| | | @Autowired |
| | | private HkSyncOrgUserToHKServiceImpl hkSyncOrgUserService; |
| | | @Autowired |
| | | private HkSyncDeviceServiceImpl hkSyncDeviceService; |
| | | @Autowired |
| | | private HkSyncParkServiceImpl hkSyncParkService; |
| | |
| | | @Autowired |
| | | private HkSyncPushServiceImpl hkSyncPushService; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦å¼åè
|
| | | */ |
| | | @Autowired |
| | | private DataSyncConfig dataSyncConfig; |
| | | |
| | | @ApiOperation("ç«å³åæ¥å¾
ä¸åäººåæ°æ®") |
| | | @PostMapping("/syncUserData") |
| | | @RequiresPermissions("business:member:syncdata") |
| | | public ApiResponse syncUserData(@RequestBody Member member) { |
| | | if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp) { |
| | | //妿æ¯ERPç³»ç»åæ¥ä¸å |
| | | hkSyncOrgUserService.syncUserData(); |
| | | } |
| | | return ApiResponse.success(null); |
| | | } |
| | | @PreventRepeat |
| | | @ApiOperation("ãæµ·åº·ãå
¨é忥é¨ç¦è®¾å¤æ¥å£") |
| | | @PostMapping("/syncDevices") |
| | |
| | | String result = hkSyncPushService.dealVisitEvent(param,response); |
| | | return ApiResponse.success(result); |
| | | } |
| | | @ApiOperation("ãæµ·åº·ã访客ICCMäºä»¶è®¢é
æ¨é对æ¥å¤çæ¥å£") |
| | | @PostMapping("/push/visitIccm") |
| | | public ApiResponse pushVisitIccm(@RequestBody EventVisitIccmRequest param, HttpServletResponse response) { |
| | | String result = hkSyncPushService.dealVisitEventIccm(param,response); |
| | | return ApiResponse.success(result); |
| | | } |
| | | // @PreventRepeat |
| | | @ApiOperation("ãæµ·åº·ãå车åºäºä»¶è®¢é
æ¨é对æ¥å¤çæ¥å£") |
| | | @PostMapping("/push/parks") |
| | |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | |
| | | @ApiOperation("æ ¹æ®ID ç¦å¯ç¨ ") |
| | | @PostMapping("/updateStatusById") |
| | | @RequiresPermissions("business:member:update") |
| | |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.dao.admin.response.VisitEventDTO; |
| | | import com.doumee.dao.business.model.CarEvent; |
| | | import com.doumee.dao.business.model.VisitEvent; |
| | | import com.doumee.dao.system.vo.VisitEventVo; |
| | | import com.doumee.service.business.VisitEventService; |
| | | import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.shiro.authz.annotation.RequiresPermissions; |
| | |
| | | |
| | | @Autowired |
| | | private VisitEventService visitEventService; |
| | | @Autowired |
| | | private HkSyncVisitServiceImpl hkSyncVisitService; |
| | | |
| | | @PreventRepeat |
| | | @ApiOperation("æ°å»º") |
| | |
| | | public ApiResponse findById(@PathVariable Integer id) { |
| | | return ApiResponse.success(visitEventService.findById(id)); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®æ¥æ(starttime)忥è¿è½¦æ°æ®") |
| | | @PostMapping("/syncByDate") |
| | | @RequiresPermissions("business:carevent:sync") |
| | | public ApiResponse syncByDate(@RequestBody VisitEvent param) { |
| | | hkSyncVisitService.syncVisitRecords(param.getCreateDate()); |
| | | return ApiResponse.success(null); |
| | | } |
| | | } |
| | |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®æ¥æ(starttime)åæ¥è®¿å®¢æ°æ®") |
| | | @ApiOperation("æ ¹æ®æ¥æ(starttime)åæ¥è®¿å®¢æ°æ®ICCMçæ¬") |
| | | @PostMapping("/syncByDate") |
| | | @RequiresPermissions("business:visits:sync") |
| | | public ApiResponse syncByDateIccm(@RequestBody Visits visits) { |
| | | hkSyncVisitFromHKService.syncVistAppointDataIccm(visits.getStarttime()); |
| | | return ApiResponse.success(null); |
| | | } |
| | | @ApiOperation("æ ¹æ®æ¥æ(starttime)åæ¥è®¿å®¢æ°æ®") |
| | | @PostMapping("/syncByDateV2") |
| | | @RequiresPermissions("business:visits:sync") |
| | | public ApiResponse syncByDate(@RequestBody Visits visits) { |
| | | hkSyncVisitFromHKService.syncVistAppointData(visits.getStarttime()); |
| | | return ApiResponse.success(null); |
| | |
| | | |
| | | param.setEventDest(path+"/visit"); |
| | | param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_IN.getKey() |
| | | ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()}); |
| | | ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey() }); |
| | | HKService.cancelEventSub(param);//å
åæ¶ |
| | | HKService.eventSub(param);//访客äºä»¶ |
| | | |
| | | param.setEventDest(path+"/visitIccm"); |
| | | param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey() |
| | | ,HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey() |
| | | ,HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey()}); |
| | | HKService.cancelEventSub(param);//å
åæ¶ |
| | | HKService.eventSub(param);//访客äºä»¶ |
| | | |
| | |
| | | param.setEventTypes(new Integer[]{HKConstants.EventTypes.DOOR_FACE_AUTH_FAIL.getKey(),HKConstants.EventTypes.DOOR_FACE_AUTH_SUCCESS.getKey()}); |
| | | HKService.cancelEventSub(param);//å
åæ¶ |
| | | HKService.eventSub(param);//é¨ç¦äºä»¶ |
| | | |
| | | } |
| | | /** |
| | | * åæ¶è®¢é
é¨ç¦äºä»¶ã访客äºä»¶ãåå车åºäºä»¶ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.task; |
| | | |
| | | |
| | | import com.doumee.config.DataSyncConfig; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.service.business.InterfaceLogService; |
| | | import com.doumee.service.business.MemberService; |
| | | import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.fhk.HkSyncVehicleFromHKServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.EnableScheduling; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 宿¶ä»»å¡ï¼åºå¼ï¼ |
| | | * @author jiangping |
| | | * @date 2021-10-10 14:40:35 |
| | | * https://www.bejson.com/othertools/cron/ cron 表达å¼çæå°å |
| | | */ |
| | | @Component |
| | | @EnableScheduling |
| | | public class ScheduleAdminTool { |
| | | |
| | | @Autowired |
| | | private HkSyncVisitFromHKServiceImpl hkSyncVisitFromHKService; |
| | | @Autowired |
| | | private HkSyncVehicleFromHKServiceImpl hkSyncVehicleFromHKService; |
| | | @Autowired |
| | | private InterfaceLogService interfaceLogService; |
| | | /** |
| | | * æ¯å¦å¼åè
|
| | | */ |
| | | @Autowired |
| | | private DataSyncConfig dataSyncConfig; |
| | | |
| | | /** |
| | | * æ¯å¤©å¢éæåè½¦è¾æ°æ® |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron= "0 0 23 * * ?") |
| | | public void syncVehicleUpdateData() throws Exception { |
| | | if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ |
| | | return; |
| | | } |
| | | hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000)); |
| | | } |
| | | /** |
| | | * æ¯åéæå䏿¬¡ä»æ¥ç访客é¢çº¦æ°æ® |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(fixedRate= 3*60*1000) |
| | | public void syncVistAppointData() throws Exception { |
| | | if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ |
| | | return; |
| | | } |
| | | if(Constants.DEALING_FROM_HK_VISIT){ |
| | | return ; |
| | | } |
| | | try { |
| | | Constants.DEALING_FROM_HK_VISIT =true; |
| | | hkSyncVisitFromHKService.syncVistAppointDataIccm(new Date()); |
| | | Constants.DEALING_FROM_HK_VISIT =false; |
| | | }catch (Exception e){ |
| | | // throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对ä¸èµ·ï¼æµ·åº·åæ¥æ°æ®å¤±è´¥~"); |
| | | }finally { |
| | | Constants.DEALING_FROM_HK_VISIT =false; |
| | | } |
| | | } |
| | | /** |
| | | * æ¯å¤©æ¸
çè¶
è¿ä¸å¨çæ¥å£æ¥å¿æ°æ®ï¼æ¸
é¤åå®é²å¹³å°å¯¹æ¥çæ¥å£æ°æ®ï¼ |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron= "0 0 23 * * ?") |
| | | public void remainLastLogs() throws Exception { |
| | | if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ |
| | | return; |
| | | } |
| | | interfaceLogService.remainLastLogs(); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | # application: |
| | | # name: doumeevisit |
| | | profiles: |
| | | active: proHS |
| | | active: proYL |
| | | |
| | | # JSONè¿åé
ç½® |
| | | jackson: |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8" ?> |
| | | <configuration> |
| | | <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <layout class="ch.qos.logback.classic.PatternLayout"> |
| | | <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern> |
| | | </layout> |
| | | </appender> |
| | | <!-- |
| | | <property name="log.path" value="/usr/local/jars/log/admin"></property> |
| | | --> |
| | | <property name="log.path" value="C:\\ylscreen\\jars\\logs\\admin"></property> |
| | | <property name="log.fileSize" value="100MB"></property> |
| | | <property name="log.historyDays" value="7"></property> |
| | | |
| | | <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>ERROR</level> |
| | | <!--å¹é
å°±èå»--> |
| | | <onMatch>DENY</onMatch> |
| | | <onMismatch>ACCEPT</onMismatch> |
| | | </filter> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <!--è·¯å¾--> |
| | | <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern> |
| | | <maxFileSize>${log.fileSize}</maxFileSize> |
| | | <maxHistory>${log.historyDays}</maxHistory> |
| | | <totalSizeCap>1GB</totalSizeCap> |
| | | </rollingPolicy> |
| | | </appender> |
| | | |
| | | <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
| | | <level>ERROR</level> |
| | | </filter> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <!--æ»å¨çç¥--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <!--è·¯å¾--> |
| | | <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern> |
| | | <maxFileSize>${log.fileSize}</maxFileSize> |
| | | <maxHistory>${log.historyDays}</maxHistory> |
| | | <totalSizeCap>1GB</totalSizeCap> |
| | | </rollingPolicy> |
| | | </appender> |
| | | <!-- 弿¥åå
¥æ¥å¿ --> |
| | | <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender"> |
| | | <!-- ä¸ä¸¢å¤±æ¥å¿.é»è®¤ç,妿éåç80%已满,åä¼ä¸¢å¼TRACTãDEBUGãINFO级å«çæ¥å¿ --> |
| | | <discardingThreshold >0</discardingThreshold> |
| | | <!-- æ´æ¹é»è®¤çéåçæ·±åº¦,该å¼ä¼å½±åæ§è½.é»è®¤å¼ä¸º256 --> |
| | | <queueSize>512</queueSize> |
| | | <!-- æ·»å éå çappender,æå¤åªè½æ·»å ä¸ä¸ª --> |
| | | <appender-ref ref ="fileInfoLog"/> |
| | | </appender> |
| | | <root level="info"> |
| | | <appender-ref ref="consoleLog"/> |
| | | <appender-ref ref="fileInfoLog"/> |
| | | <appender-ref ref="fileErrorLog"/> |
| | | </root> |
| | | </configuration> |
| | |
| | | public CountDataResponse countData(BaseRequest param){ |
| | | MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.select("count(1) as applyTotalNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(5,6,8)) as applyPassNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (5)) as visitInNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (6,8)) as visitOutNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(0)) as applyPassNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(0,4)) as visitorNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (1,3,6)) as visitInNum"); |
| | | queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (2,5)) as visitOutNum"); |
| | | queryWrapper.select("(select count(1) from car_event where TO_DAYS(create_date)=TO_DAYS(now()) and inout_type=0 and event_type="+ HKConstants.EventTypes.PARK_PASS_IN.getKey() +") as carInNum"); |
| | | queryWrapper.select("(select count(1) from car_event where TO_DAYS(create_date)=TO_DAYS(now()) and (inout_type !=0 ) and event_type="+ HKConstants.EventTypes.PARK_PASS_OUT.getKey() +") as carOutNum"); |
| | | queryWrapper.eq(Visits::getIsdeleted, Constants.ZERO ); |
| | | queryWrapper.apply("TO_DAYS(starttime)=TO_DAYS(now())" ); |
| | | queryWrapper.last("limit 1"); |
| | | CountDataResponse vModel =visitsMapper.selectJoinOne(CountDataResponse.class,queryWrapper); |
| | | vModel.setVisitorNum(vModel.getVisitInNum()+vModel.getVisitOutNum());//仿¥è®¿å®¢æ»æ° |
| | | // vModel.setVisitorNum(vModel.getVisitInNum()+vModel.getVisitOutNum());//仿¥è®¿å®¢æ»æ° |
| | | |
| | | MPJLambdaWrapper<CarEvent> wrapper = new MPJLambdaWrapper<>(); |
| | | wrapper.select("count(1) as memberCarNum"); |
| | | wrapper.exists("select b.id from cars b where b.code=t.plate_nos" ); |
| | | wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now())" ); |
| | | wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now()) and inout_type=0 and event_type="+ HKConstants.EventTypes.PARK_PASS_IN.getKey() ); |
| | | wrapper.last("limit 1"); |
| | | CountDataResponse cModel =carEventMapper.selectJoinOne(CountDataResponse.class,wrapper); |
| | | vModel.setMemberCarNum(vModel.getMemberCarNum());//仿¥å工车è¾è¿åºæ° |
| | | vModel.setVisitCarNum(vModel.getCarInNum() - vModel.getMemberCarNum());//仿¥é¢çº¦è½¦è¾è¿åºæ° |
| | | vModel.setMemberCarNum(Constants.formatIntegerNum(cModel.getMemberCarNum()));//仿¥å工车è¾è¿åºæ° |
| | | vModel.setVisitCarNum(vModel.getCarInNum() - cModel.getMemberCarNum());//仿¥é¢çº¦è½¦è¾è¿åºæ° |
| | | vModel.setCarNum(getCarInRecordCount()); |
| | | return vModel; |
| | | } |
| | |
| | | List<VisitDataListResponse> list = new ArrayList<>(); |
| | | MPJLambdaWrapper<VisitEvent> wrapper = new MPJLambdaWrapper<>(); |
| | | wrapper.selectAll(VisitEvent.class) ; |
| | | //åªæ¥è¯¢éè¡è®°å½ |
| | | wrapper.eq(VisitEvent::getEventType,HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey() ); |
| | | wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now())" ); |
| | | wrapper.last("limit 50"); |
| | | wrapper.orderByDesc(VisitEvent::getStartTime); |
| | |
| | | MPJLambdaWrapper<Visits> wrapper = new MPJLambdaWrapper<>(); |
| | | wrapper.select("count(id) as num, starttime"); |
| | | wrapper.apply("TO_DAYS(starttime)+"+days+" >= TO_DAYS(now()) " ); |
| | | wrapper.in(Visits::getStatus, 5,6,7); |
| | | wrapper.in(Visits::getStatus, 1,2,3,5,6); |
| | | wrapper.groupBy("TO_DAYS(starttime)"); |
| | | wrapper.orderByDesc(CarEvent::getCreateDate); |
| | | List<Visits> result =visitsMapper.selectJoinList(Visits.class,wrapper); |
| | |
| | | # application: |
| | | # name: doumeevisit |
| | | profiles: |
| | | active: devYL |
| | | active: proYL |
| | | |
| | | # JSONè¿åé
ç½® |
| | | jackson: |
| | |
| | | String cardUnloss= "/api/cis/v1/card/batch/unLoss";//æ¹éè§£æ |
| | | String taskPersoDetail= "/api/acps/v1/download_record/person/detail/search";//æ¥è¯¢è®¾å¤ééç人åæéä¸è½½è¯¦æ
|
| | | String appointmentRecords= "/api/visitor/v2/appointment/records";//æ¥è¯¢è®¿å®¢é¢çº¦è®°å½v2 |
| | | String appointmentRecordsIccm= "/api/iccm/v2/appointment/records";//iccmæ¥è¯¢è®¿å®¢é¢çº¦è®°å½V2 |
| | | String visitingRecords= "/api/visitor/v2/visiting/records";//æ¥è¯¢è®¿å®¢æ¥è®¿è®°å½v2 |
| | | String vehicleList= "/api/resource/v2/vehicle/advance/vehicleList";//æ¥è¯¢è½¦è¾å表v2 |
| | | String vehicleTimeRangeList= "/api/resource/v1/vehicle/timeRange";//å¢éè·åè½¦è¾æ°æ® |
| | | String facePictureCheck= "/api/frs/v1/face/picture/check";//人è¸è¯å |
| | | String acsDeviceStatus= "/api/nms/v1/online/acs_device/get";//è·åé¨ç¦è®¾å¤å¨çº¿ç¶æ |
| | | String tempCarInRecords= "/api/pms/v1/tempCarInRecords/page";//æ¥è¯¢åºå
车åè½¦ä¿¡æ¯ |
| | | String appointmentEventQuery= "/api/iccm/v1/event/query";//æ¥è¯¢åºå
车åè½¦ä¿¡æ¯ |
| | | } |
| | | |
| | | /** |
| | |
| | | PARK_PASS_OUT(771760134, "åºåºæ¾è¡äºä»¶" ), |
| | | VISIT_SIGN_IN(1392513025, "访客ç»è®°" ), |
| | | VISIT_SIGN_OUT(1392513026, "访客ç¾ç¦»" ), |
| | | VISIT_SIGN_ICCM_IN(541200006, "访客ç»è®°" ), |
| | | VISIT_SIGN_ICCM_OUT(541200007, "访客ç¾ç¦»" ), |
| | | VISIT_SIGN_ICCM_PASS(541200060, "访客éè¡" ), |
| | | DOOR_FACE_AUTH_FAIL(197163, "人è¸è®¤è¯å¤±è´¥" ), |
| | | DOOR_FACE_AUTH_SUCCESS(196893, "人è¸è®¤è¯éè¿" ) |
| | | ; |
| | |
| | | saveInterfaceLog(body,result,path); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * è·å访客é¢çº¦è®°å½å表 |
| | | * @param body |
| | | * @return |
| | | */ |
| | | public static String appointmentRecordsIccm(String body) { |
| | | Map<String, String> path = getPath(HKConstants.InterfacePath.appointmentRecordsIccm); |
| | | String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", null);// post请æ±application/jsonç±»ååæ° |
| | | saveInterfaceLog(body,result,path); |
| | | return result; |
| | | } |
| | | /** |
| | | * è·å访客è¿åºåºäºä»¶æ¥è¯¢å页 |
| | | * @param body |
| | | * @return |
| | | */ |
| | | public static String appointmentEventQuery(String body) { |
| | | Map<String, String> path = getPath(HKConstants.InterfacePath.appointmentEventQuery); |
| | | String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", null);// post请æ±application/jsonç±»ååæ° |
| | | saveInterfaceLog(body,result,path); |
| | | return result; |
| | | } |
| | | /** |
| | | * è·åå
¨éç»ç»å表 |
| | | * @param body |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class AppointmentEventListRequest { |
| | | private String visitorId;// String false 访客idï¼è®¿å®¢äººåidï¼è®¿å®¢äººååç§°ï¼è®¾å¤èµæºcodeä¸è½åæ¶ä¸ºç©ºï¼ |
| | | private String visitorName;// String false 访客åç§° |
| | | private String resourceCode ;//String false 设å¤èµæºcode |
| | | private String eventTimeBegin;// String true äºä»¶å¼å§æ¶é´ |
| | | private String eventTimeEnd ;//String true äºä»¶ç»ææ¶é´ |
| | | private int pageNo;// integer True pageNoè¦æ±å¤§äº0ä¸è¶
è¿2147483647 |
| | | private int pageSize;// integer True pageSizeè¦æ±å¤§äº0ä¸ä¸è¶
è¿1000 |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class EventVisitIccmDataRequest { |
| | | |
| | | /** |
| | | * é¢çº¦è®°å½ä¿¡æ¯ |
| | | */ |
| | | private EventVisitIccmInvoiceParamRequest visitorInvoices; |
| | | /** |
| | | * è¢«è®¿äººä¿¡æ¯ |
| | | */ |
| | | private EventVisitIccmTargetParamRequest targetPerson; |
| | | /** |
| | | * è¢«è®¿äººä¿¡æ¯ |
| | | */ |
| | | private EventVisitIccmValuesParamRequest paramValues; |
| | | |
| | | /** |
| | | * æè®¿äººä¿¡æ¯ |
| | | */ |
| | | private List<EventVisitIccmDetailParamRequest> visitorInformationList; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EventVisitIccmDetailParamRequest { |
| | | |
| | | private String visitorId;// eda8994f399544aaaee6eca64ed79827, #访客id |
| | | private String visitorName;// å°å, #访客åç§° |
| | | private Integer sex;// 1, #访客æ§å« |
| | | private String phone;// 18229602833, #è®¿å®¢ææºå· |
| | | private String unit;// , #访客åä½ |
| | | private Integer certType;// 111, #访客è¯ä»¶ç±»å |
| | | private String certNo;// , #访客è¯ä»¶å·ç |
| | | private String certPicUrl;// , #访客è¯ä»¶ç
§base64 |
| | | private String faceUrl;// , #人è¸base64 |
| | | private String plateNo;// , #访客个人信æ¯éç车ç |
| | | private String createTime;// 2023-02-16T20;//19;//46.382+08;//00, |
| | | private String updateTime;// 2023-02-16T20;//19;//46.382+08;//00, |
| | | private String visitNum;// 0, |
| | | private String isBlocked;// 0, #æ¯å¦æé» |
| | | private String tempCardNo;// 123456, #ç»å®ç临æ¶å¡å· |
| | | private String companionPerson;// 0, #æ¯å¦ä¸ºéè¡äººï¼0䏿¯1æ¯ |
| | | private String cardNo;// 1676549986273, #访客å¡å· |
| | | private String appointmentCode;// 5998, #访客ç |
| | | private String facePic;// /pic?ad00=3001led-do671a*o0d1=4686*2l4767184156*8tp===119***sb9=defce2d7736fc--*49e3=pi17fo=0-510090, #访客人è¸å¾ç |
| | | private String faceDeviceId;// 894c1bfa-e8a7-419a-84d1-1a1fb5f3896a #å¾ç设å¤id |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EventVisitIccmInfoRequest { |
| | | private String eventId;// String äºä»¶å¯ä¸æ è¯ æ¯ 64 |
| | | private String srcIndex;// String äºä»¶æºç¼å·ï¼ç©çè®¾å¤æ¯èµæºç¼å· æ¯ 64 |
| | | private String srcType;// String äºä»¶æºç±»å æ¯ 16 |
| | | private Integer eventType ;//Number äºä»¶ç±»å æ¯ |
| | | private String srcName;// String äºä»¶æºåç§° å¦ 64 |
| | | private Integer status ;//Number äºä»¶ç¶æ æ¯ 0-ç¬æ¶1-å¼å§2-忢3-äºä»¶èå²4-äºä»¶èå¨ç»ææ´æ°5-弿¥å¾çä¸ä¼ |
| | | private Integer timeout ;//Number èå²è¶
æ¶æ¶é´ æ¯ åä½ï¼ç§ |
| | | private String happenTime ;//String äºä»¶åçæ¶é´ï¼è®¾å¤æ¶é´ï¼ æ¯ 64 |
| | | private String srcParentIndex ;//String äºä»¶åççäºä»¶æºç¶è®¾å¤ç¼å· å¦ 64 |
| | | private EventVisitIccmDataRequest data; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EventVisitIccmInvoiceParamRequest { |
| | | |
| | | private String invoicesId;// 5bc15cabf24141c6ab3da357e29e5d53, #访客åid |
| | | private String invoicesNo;// FK20230220090002, #访客åå· |
| | | private String visitorId;// eda8994f399544aaaee6eca64ed79827, #访客id |
| | | private String visitorTypeId;// , #访客类åid |
| | | private String deptId;// fe3d4470fa824449b8dcdf34e833890e, #访é®é¨é¨id |
| | | private String campusId;// 39ce5586087c4d78873ff187396acf5b, #ååºid |
| | | private String visitReason;// 7744d9691f1e45b7b4a06394280e45a3, #访é®äºç±id |
| | | private String visitReasonRemark;// , #访é®äºç±å¤æ³¨ |
| | | private String visitTargetId;// 2cb0bd1b312941569c43f64d781b7cf7, #被访人id |
| | | private String companionIds;// , #åè¡äººid,éå·åå² |
| | | private String type;// 0, #ç±»åï¼0ï¼é¢çº¦ï¼1ï¼é约 |
| | | private String appointmentType;// 0, #é¢çº¦ç±»åï¼0ï¼æ®éé¢çº¦ï¼1ï¼å¿«éé¢çº¦ï¼2;//å
ç»è®°é¢çº¦; 3;// ç¬¬ä¸æ¹é¢çº¦ ; 4;//访客æºé¢çº¦; 5;// ä¼ç®¡è®¿å®¢é¢çº¦; 6;// å¿«éé约; 7;//æ®éé约; 8;//级èé约; 9;//级èå¿«éé¢çº¦; 10;//级èé¢çº¦ |
| | | private String workflowInstanceId;// f1b53b54414641d58cd7cd332105d723, #æµç¨id |
| | | private String approveRemark;// , #æµç¨å®¡æ¹å¤æ³¨ |
| | | private String ifInfoAbnormal;// 0, |
| | | private String beginTime;// 2023-02-20T10;//00;//00.000+08;//00, #访é®å¼å§æ¶é´ |
| | | private String finishTime;// 2023-02-20T23;//30;//00.000+08;//00, #访é®ç»ææ¶é´ |
| | | private String invoicesStatus;// 3, #访客åç¶æ(0;//å¾
审æ¹,1;//å¾
访é®,2;//已驳å,3;//å·²ä½åº,4;//已忶,5;//已宿) |
| | | private String workflowInitiatorId;// eda8994f399544aaaee6eca64ed79827, #æµç¨å起人id |
| | | private String workflowInitiatorType;// 0, #æµç¨å起人类å(0;//访客,1;//åå·¥) |
| | | private String operator;// eda8994f399544aaaee6eca64ed79827, #æä½äºº |
| | | private String operatorType;// 0, #æä½äººç±»å(0;//访客,1;//åå·¥) |
| | | private String extendJson;// , #æ©å±å段 |
| | | private String authIssueStatus;// 0, #æéä¸åç¶æ(0;//æªä¸å,1;//ä¸åæå,2;//ä¸å失败,3;//æéæ¸
é¤,4;//æéåæ¶) |
| | | private String createTime;// 2023-02-20T09;//43;//39.479+08;//00, #å建æ¶é´ |
| | | private String updateTime;// 2023-02-20T19;//42;//32.640+08;//00, |
| | | private String campusName;// åç¬åè½¦åºæµè¯, #ååºåç§° |
| | | private String deptName;// é»è®¤é¨é¨, #é¨é¨åç§° |
| | | private String visitorTypeName;// æ®é访客, #访客类å |
| | | private String sceneNames;// æµè¯7, #æéåºæ¯åç§°ï¼å¤ä¸ªéå·åé |
| | | private String visitReasonName;// å塿´½è°, #访é®äºç±åç§° |
| | | private String regionId;//eda8994f399544aaaee6eca64ed79827,#åºåidï¼2.2æ¯æï¼2.3åºå¼è¯¥å段 |
| | | private String regionName;//滨æ±,#åºååç§°ï¼2.2æ¯æï¼2.3åºå¼è¯¥å段 |
| | | private String campusRegionIds;//pda8994f399544aaaee6eca64ed79828,#åºåidï¼2.3æ¯æ |
| | | private String campusRegionNames;//æµ·åº·ä¸æ, #åºååç§°ï¼2.3æ¯æ |
| | | private String isRepast;//1 #访客就é¤,0;//å¦,1;//æ¯ |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class EventVisitIccmParamRequest { |
| | | |
| | | |
| | | private String sendTime;// P String äºä»¶ä»æ¥æ¶è
ï¼ç¨åºå¤çåï¼ååºçæ¶é´ æ¯ 32 äºä»¶åéæ¶é´ |
| | | private String ability;// P String äºä»¶ç±»å« æ¯ 64 æ è¯å车åºäºä»¶ |
| | | private String[] uids;// String[] ç¨æ·id å¦ ä¸é |
| | | private String[] clients ;//String[] ç»ä»¶æ è¯ å¦ ä¸é |
| | | private List<EventVisitIccmInfoRequest> events;// P Events[] äºä»¶ä¿¡æ¯ æ¯ ä¸é |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EventVisitIccmRequest { |
| | | |
| | | // private String parkIndexCodes ;// string False å车åºå¯ä¸æ è¯éå å¤ä¸ªå¼ä½¿ç¨è±æéå·åéï¼ä¸è¶
è¿1000个 |
| | | |
| | | private String method ;// String æ¹æ³åï¼ç¨äºæ è¯æ¥æç¨é æ¯ 16 äºä»¶åºå®OnEventNotify |
| | | private EventVisitIccmParamRequest params ;// Params äºä»¶åæ°ä¿¡æ¯ æ¯ ä¸é å
·ä½åæ°ä¿¡æ¯ |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EventVisitIccmTargetParamRequest { |
| | | |
| | | private String personId;// 2cb0bd1b312941569c43f64d781b7cf7, #被访人id |
| | | private String personNumber;// 10001, #è¢«è®¿äººå·¥å· |
| | | private String name;// Lhk管çå, #被访人ç¼å· |
| | | private String sex;// 1, #被访人æ§å« |
| | | private String jobNo;// 10001, #è¢«è®¿äººå·¥å· |
| | | private String pinyin;// lhkguanliyuan, #被访人æ¼é³ |
| | | private String mobile;// 17700001111, #è¢«è®¿äººææºå· |
| | | private String orgId;// root000000, #被访人ç»ç»id |
| | | private String certType;// 111, #被访人è¯ä»¶ç±»å |
| | | private String certificateNo;// 330282202302160001, #被访人è¯ä»¶å·ç |
| | | private String orgPathName;// é»è®¤ç»ç», #被访人ç»ç» |
| | | private String userName;// Lhk管çå, #è¢«è®¿äººç¨æ·å |
| | | private String createTime;// 2023-02-16T10;//10;//51.683+08;//00, |
| | | private String updateTime;// 2023-02-20T19;//40;//54.138+08;//00 |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.request.event.visit; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EventVisitIccmValuesParamRequest { |
| | | |
| | | private String type;// 1, #äºä»¶æºç±»åï¼1访客æº2ä¿å®äººå·¥3é¨ç¦4å车åºåºå
¥å£5api6被访人 |
| | | private String eventType;// 541200007, #541200006[ç¾å°æ¶æ¯éç¥],541200007[ç¾ç¦»æ¶æ¯éç¥],541200009[访客æ»ç]ï¼541200060[éè¡äºä»¶] |
| | | private String sourceName;// 1å·é¨ç¦, #é¨ç¦åç§° |
| | | private String eventId;// demoData, #äºä»¶id |
| | | private String eventTypeName;// demoData, #äºä»¶ç±»ååç§° |
| | | private String happenTime;// 23/6/2 0002 11;//36, #åçæ¶é´ |
| | | private String srcParentIndex;// demoData, #ç¶ç±»èµæº indexcode |
| | | private String srcIndex;// demoData, #åç±»indexcode |
| | | private String srcName;// demoData, #设å¤åç§° |
| | | private String srcType;// demoData, #èµæºç±»å |
| | | private String extEventCardNo;// demoData, #å¡å· |
| | | private String extEventInOut;// demoData, #é¨ç¦ç¹å¯ä¸æ¥å
¥ç¼ç |
| | | private String extEventPictureURL;// demoData, #å¾ççurl |
| | | private String svrIndexCode;// demoData, #å¾çæå¡å¨å¯ä¸ç¼ç |
| | | private String extEventReaderKind;// demoData, #读å¡å¨ç±»å« |
| | | private String extEventReaderID;// demoData, #读å¡å¨id |
| | | private String userType;// demoData, #人åç±»åï¼0æªç¥ï¼1æ®éï¼2æ¥å®¾ï¼3é»ååï¼4管çå |
| | | private String visitorNames;// demoData, #访客å§å,å¤ä¸ªéå·æ¼æ¥ |
| | | private String phones;// demoData, #ææºå·,å¤ä¸ªéå·æ¼æ¥ |
| | | private String certificateNos;// demoData, #身份è¯,å¤ä¸ªéå·æ¼æ¥ |
| | | private String certTypes;// 333, #è¯ä»¶ç±»å,å¤ä¸ªéå·æ¼æ¥ |
| | | private String invoicesIds;// 5a9e731d6b9043feb665282786dd8914, #访客åid,å¤ä¸ªéå·æ¼æ¥ |
| | | private String defineEventType;// 9, #äºä»¶ç±»å |
| | | private String plateNos;// demoData, #车çå·ç ,å¤ä¸ªéå·æ¼æ¥ |
| | | private String parkName;// demoData, #å车åºåç§° |
| | | private String parkIndex;// demoData, #å车åºç¼å· |
| | | private String gateName;// demoData,#åºå
¥å£åç§° |
| | | private String gateIndex;// demoData, #åºå
¥å£ç¼å· |
| | | private String inOrOut;// 1,#è¿åºç±»åï¼1è¿å
¥2åºå» |
| | | private String accessType;// 1, #äºä»¶ç±»åï¼1é¨ç¦äºä»¶2车è¾äºä»¶ |
| | | private String regionName;// demoData#åºååç§°, |
| | | private String typeId;//1 #å端跳转urlçtypeId |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.respose; |
| | | |
| | | import com.alibaba.fastjson.annotation.JSONField; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class AppointmentEventInfoResponse { |
| | | |
| | | |
| | | private String visitorName;// String false 访客å§å |
| | | private String visitorSex ;//String false æ§å«,1ç·,2女 |
| | | private String cardNum;// String false å¡å· |
| | | private String cardType;// String false å¡ç±»å,0-身份è¯å· 2-ICå¡å· |
| | | private String deviceIndexCode;// String false 设å¤ç¼ç |
| | | private String deviceType;// String false 设å¤ç±»å |
| | | private String deviceDesc;// String false è®¾å¤æè¿° |
| | | private String eventName;// String false äºä»¶åç§° |
| | | private String eventId ;//String false äºä»¶id |
| | | private String phoneNum ;//String false ææºå· |
| | | private String carNumber ;//String false 车çå· |
| | | private String identityId;// String false è¯ä»¶ç±»å |
| | | private String identityNum ;//String false è¯ä»¶å·ç |
| | | private String visitorPhotoUri;// String false 访客头å |
| | | private String identityPhotoUri;// String false è¯ä»¶ç
§ç |
| | | private String eventTime;// String false äºä»¶æ¶é´ |
| | | private String visitorId;// String false 访客id |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.respose; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class AppointmentIccmInfoResponse { |
| | | |
| | | |
| | | private String campusId;// String false ååºid |
| | | private String campusName;// String false ååºåç§° |
| | | private String deptId ;//String false é¨é¨id |
| | | private String deptName;// String false é¨é¨åç§° |
| | | private String visitorTypeId;// String false 访客类åid |
| | | private String visitorTypeName;// String false 访客类å |
| | | private String appointRecordId;// String false 访客é¢çº¦è®°å½id |
| | | private String orderId;// String false 访客åå· |
| | | private String visitPurpose;//String false æ¥è®¿äºç±id |
| | | private String visitPurposeName;// String false æ¥è®¿äºç± |
| | | private String visitEndTime;// String false 访é®ç»ææ¶é´ |
| | | private String receptionistId ;//String false 被访人id |
| | | private String receptionistName;// String false 被访人å§å |
| | | private String visitStartTime ;//String false 访é®å¼å§æ¶é´ |
| | | private String oneOrPeople;// String false éè¡ç çç¥ 0ï¼ä¸äººä¸ç 1ï¼å¤äººä¸ç |
| | | |
| | | private List<AppointmentResInfoResponse> designatedResources;// object False æéä¸åæå®çèµæºç¹éå |
| | | private String[] privilegeGroupNames;// string[] False æéç»åç§°éå |
| | | private List<AppointmentVisitorInfoResponse> visitorList;// Array false 访客å表 |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.haikang.model.param.respose; |
| | | |
| | | import com.alibaba.fastjson.annotation.JSONField; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import io.swagger.models.auth.In; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class AppointmentVisitorInfoResponse { |
| | | |
| | | |
| | | private String appointRecordId ;//string False é¢çº¦è®°å½IDï¼å¯ä½ä¸ºä¿®æ¹é¢çº¦ç便® |
| | | private Boolean companion;// Boolean false æ¯å¦åè¡äºº |
| | | private String visitorId ;//String false 访客id |
| | | private String phoneNo ;//String false è®¿å®¢ææºå· |
| | | private String visitorName;// String false 访客å§å |
| | | private Integer gender;// Number false æ§å«(1:ç·,2:女) |
| | | private String svrIndexCode;// String false å¾çå卿å¡çå¯ä¸æ è¯ |
| | | private String picUri;// String false 访客头å,å¾ççç¸å¯¹URL |
| | | private String identityUri;// String false è¯ä»¶ç
§,å¾ççç¸å¯¹URL |
| | | private String identitySvrCode;// String false è¯ä»¶ç
§å¯¹åºå¾çæå¡å¨serviceNodes |
| | | private String plateNo;// String false 访客车çå· |
| | | private String certificateNo;// String false è¯ä»¶å· |
| | | private String visitorWorkUnit ;//String false æ¥è®¿åä½ |
| | | private Integer visitorStatus ;//Number false è®¿å®¢ç¶æ(0:æªç¾å°,1:å·²ç¾å°,2:å·²ç¾é,3:æ»ç,4:æªè®¿é®,5:èªå¨ç¾ç¦»,6:æªç¾é) |
| | | private String certificateType ;//;//Number false è¯ä»¶ç±»å |
| | | private String isCompanion;// Boolean false æ¯å¦åè¡äºº |
| | | private String appointmentCode ;//String false 访客ç |
| | | @JsonProperty(value = "QRCode") |
| | | @JSONField(name = "QRCode") |
| | | private String qrCode ;//String false 卿äºç»´ç å
容 |
| | | } |
| | |
| | | return null; |
| | | } |
| | | /** |
| | | *海康访客é¢çº¦è®°å½æ¥è¯¢ICCMçæ¬ï¼åé¡µï¼ |
| | | * @return |
| | | */ |
| | | public static BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>> appointmentRecordsIccm(AppointmentListRequest param){ |
| | | log.info("ãæµ·åº·è®¿å®¢é¢çº¦è®°å½æ¥è¯¢ICCMçæ¬ã================å¼å§===="+JSONObject.toJSONString(param)); |
| | | try { |
| | | String res = HKTools.appointmentRecordsIccm(JSONObject.toJSONString(param)); |
| | | TypeReference typeReference = |
| | | new TypeReference<BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>>>(){}; |
| | | BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType()); |
| | | logResult(result,"海康访客é¢çº¦è®°å½æ¥è¯¢ICCMçæ¬"); |
| | | return result; |
| | | }catch (Exception e){ |
| | | log.error("ãæµ·åº·è®¿å®¢é¢çº¦è®°å½æ¥è¯¢ICCMçæ¬ã================失败====ï¼\n"+ e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | /** |
| | | *海康访客äºä»¶ä»½é¢æ¥è¯¢ICCMçæ¬ï¼åé¡µï¼ |
| | | * @return |
| | | */ |
| | | public static BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>> appointmentEventQuery(AppointmentEventListRequest param){ |
| | | log.info("ãæµ·åº·è®¿å®¢äºä»¶ä»½é¢æ¥è¯¢ICCMçæ¬ã================å¼å§===="+JSONObject.toJSONString(param)); |
| | | try { |
| | | String res = HKTools.appointmentEventQuery(JSONObject.toJSONString(param)); |
| | | TypeReference typeReference = |
| | | new TypeReference<BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>>>(){}; |
| | | BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType()); |
| | | logResult(result,"海康访客äºä»¶ä»½é¢æ¥è¯¢ICCMçæ¬"); |
| | | return result; |
| | | }catch (Exception e){ |
| | | log.error("ãæµ·åº·è®¿å®¢äºä»¶ä»½é¢æ¥è¯¢ICCMçæ¬ã================失败====ï¼\n"+ e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | /** |
| | | *æ¥è¯¢è®¿å®¢æ¥è®¿è®°å½ï¼å·²ç»è®°ï¼ï¼åé¡µï¼ |
| | | * @return |
| | | */ |
| | |
| | | * @return |
| | | */ |
| | | public static BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> vehicleTimeRangeList(TimeRangeListRequest param){ |
| | | log.info("ãæµ·åº·å¢éäººåæ¥è¯¢ã================å¼å§===="+JSONObject.toJSONString(param)); |
| | | log.info("ãæµ·åº·å¢éè½¦è¾æ¥è¯¢ã================å¼å§===="+JSONObject.toJSONString(param)); |
| | | try { |
| | | String res = HKTools.vehicleTimeRangeList(JSONObject.toJSONString(param)); |
| | | TypeReference typeReference = |
| | | new TypeReference< BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> >(){}; |
| | | BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType()); |
| | | logResult(result,"海康å¢éäººåæ¥è¯¢"); |
| | | logResult(result,"海康å¢éè½¦è¾æ¥è¯¢"); |
| | | return result; |
| | | }catch (Exception e){ |
| | | log.error("ãæµ·åº·å¢éäººåæ¥è¯¢ã================失败====ï¼\n"+ e.getMessage()); |
| | | log.error("ãæµ·åº·å¢éè½¦è¾æ¥è¯¢ã================失败====ï¼\n"+ e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | |
| | | int signout = 8; |
| | | int invalid =9; |
| | | } |
| | | public interface VisitIccmStatus{ |
| | | //è®¿å®¢ç¶æ(0:æªç¾å°,1:å·²ç¾å°,2:å·²ç¾é,3:æ»ç,4:æªè®¿é®,5:èªå¨ç¾ç¦»,6:æªç¾é) |
| | | int waitSign = 0; |
| | | int signin= 1; |
| | | int signout = 2; |
| | | int noleave =3; |
| | | int novisit =4; |
| | | int autoOut =5; |
| | | int noSignout =6; |
| | | } |
| | | public interface EmpowerStatus{ |
| | | //ä¸å¡éææä¸åç¶æ 0å¾
ä¸å 1å·²ä¸å 2ä¸åæå 3已忶 4ä¸å失败 5ä»»å¡ä¸è½½å·²ç»æ |
| | | int wait = 0; |
| | |
| | | long count(InterfaceLog interfaceLog); |
| | | |
| | | void clearThreeMonthLog(); |
| | | |
| | | void remainLastLogs(); |
| | | } |
| | |
| | | import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmDataRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest; |
| | | import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse; |
| | | import com.doumee.dao.business.model.ParkBook; |
| | |
| | | void syncMemberFailData(); |
| | | |
| | | void syncMemberDelData(); |
| | | |
| | | void syncVistAppointDataIccm(Date date); |
| | | |
| | | void syncVisitRecords(Date createDate); |
| | | |
| | | String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response); |
| | | } |
| | |
| | | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.InterfaceLogMapper; |
| | | import com.doumee.dao.business.model.InterfaceLog; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.yaml.snakeyaml.scanner.Constant; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | .apply("to_days(create_date)+15 < to_days(now())") |
| | | .like(InterfaceLog::getUrl,"/artemis/api/")); |
| | | } |
| | | @Override |
| | | public void remainLastLogs(){ |
| | | InterfaceLog log = interfaceLogMapper.selectOne(new QueryWrapper<InterfaceLog>() |
| | | .select("max(id) as id").last("limit 1")); |
| | | //åªä¿çè¿10wæ¡æ°æ® |
| | | if(log!=null) { |
| | | interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda() |
| | | .lt(InterfaceLog::getId, Constants.formatIntegerNum(log.getId()) - 100000)); |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | }catch (BusinessException e){ |
| | | throw e; |
| | | }finally { |
| | | saveInterfaceLog(param,"/visitBiz/resource/approveApply",null,Constants.ZERO); |
| | | // saveInterfaceLog(param,"/visitBiz/resource/approveApply",null,Constants.ZERO); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.doumee.core.haikang.model.param.request.*; |
| | | import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmDataRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest; |
| | | import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse; |
| | | import com.doumee.core.haikang.model.param.respose.TaskAdditionResponse; |
| | |
| | | public String dealVisitEvent(EventVisitRequest param, HttpServletResponse response){ |
| | | return null; |
| | | } |
| | | @Override |
| | | public String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){ |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String dealParkEvent(EventParkRequest param, HttpServletResponse response){ |
| | |
| | | @Override |
| | | public void syncVistAppointData(Date date){ |
| | | } |
| | | @Override |
| | | public void syncVistAppointDataIccm(Date date){ |
| | | } |
| | | public void syncVehicleData(){ |
| | | } |
| | | @Override |
| | |
| | | public void syncVisitData() { |
| | | } |
| | | @Override |
| | | public void syncVisitRecords(Date createDate){ |
| | | } |
| | | @Override |
| | | public void getOutTimeVisitRecord(){ |
| | | } |
| | | @Override |
| | |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.CarEventMapper; |
| | | import com.doumee.dao.business.CarsMapper; |
| | | import com.doumee.dao.business.ParksMapper; |
| | | import com.doumee.dao.business.VisitsMapper; |
| | | import com.doumee.dao.business.join.ParkBookJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | |
| | | private ParkBookJoinMapper parkBookMapper; |
| | | @Autowired |
| | | private CarEventMapper carEventMapper; |
| | | @Autowired |
| | | private CarsMapper carsMapper; |
| | | @Autowired |
| | | private VisitsMapper visitsMapper; |
| | | @Override |
| | | public void syncParkBookData() { |
| | | if(Constants.DEALING_HK_PARKBOOK){ |
| | |
| | | c.setParkIndex(model.getParkSyscode()); |
| | | c.setParkName(model.getParkName()); |
| | | c.setEventId(model.getCrossRecordSyscode()); |
| | | if(StringUtils.isNotBlank(model.getPlateNo())){ |
| | | Cars car = carsMapper.selectOne(new QueryWrapper<Cars>().lambda() |
| | | .eq(Cars::getIsdeleted,Constants.ZERO) |
| | | .eq(Cars::getCode,model.getPlateNo()) |
| | | .last("limit 1" )); |
| | | if(car!=null){ |
| | | //妿æ¯å
é¨äººå |
| | | c.setMemberId(car.getMemberId()); |
| | | } |
| | | |
| | | Visits visits = visitsMapper.selectOne(new QueryWrapper<Visits>().lambda() |
| | | .eq(Visits::getIsdeleted,Constants.ZERO) |
| | | .eq(Visits::getCarNos,model.getPlateNo()) |
| | | .last("limit 1" )); |
| | | if(visits!=null){ |
| | | //妿æ¯è®¿å®¢ |
| | | c.setMemberId(visits.getMemberId()); |
| | | } |
| | | } |
| | | c.setGateIndex(model.getEntranceSyscode()); |
| | | c.setGateName(model.getEntranceName()); |
| | | c.setIsdeleted(Constants.ZERO); |
| | |
| | | import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.parks.EventParkInfoRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitDataRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest; |
| | | import com.doumee.core.haikang.model.param.request.event.visit.*; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){ |
| | | log.info("ãæµ·åº·è®¿å®¢äºä»¶æ¨éã==========å¼å§=======ï¼\n"+JSONObject.toJSONString(param)); |
| | | String result = null; |
| | | try { |
| | | if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ |
| | | return null; |
| | | } |
| | | //é¨ç¦äºä»¶éå |
| | | List<EventVisitIccmInfoRequest> events = param.getParams().getEvents(); |
| | | List<VisitEvent> list = new ArrayList<>(); |
| | | List<Integer> delRetentionLis = new ArrayList<>(); |
| | | List<Retention> retentionList = new ArrayList<>(); |
| | | for(EventVisitIccmInfoRequest request : events){ |
| | | if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){ |
| | | continue; |
| | | } |
| | | if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){ |
| | | continue; |
| | | } |
| | | //海康访客记å½ç¼ç |
| | | dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,list); |
| | | } |
| | | if(list.size()>0){ |
| | | //æå
¥é¨ç¦è®°å½ |
| | | visitEventMapper.insertBatchSomeColumn(list); |
| | | } |
| | | if(delRetentionLis.size()>0){ |
| | | //å
å é¤åæçå¨åºäººå(æ®éè®¿å®¢ï¼ |
| | | retentionMapper.delete(new UpdateWrapper<Retention>().lambda() |
| | | .eq(Retention::getType,Constants.memberType.visitor) |
| | | .in(Retention::getMemberId,delRetentionLis)); |
| | | } |
| | | if(retentionList.size()>0){ |
| | | //åæå
¥ææ°çå¨å人å |
| | | retentionMapper.insertBatchSomeColumn(retentionList); |
| | | } |
| | | log.error("ãæµ·åº·è®¿å®¢äºä»¶æ¨éã========æå======="); |
| | | }catch (Exception e){ |
| | | |
| | | log.error("ãæµ·åº·è®¿å®¢äºä»¶æ¨éã========失败=======ï¼\n"+e.getMessage()); |
| | | } |
| | | saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true); |
| | | return null; |
| | | |
| | | } |
| | | /** |
| | | * 海康访客äºä»¶æ¨é |
| | | * @param param |
| | | * @param response |
| | | * @return |
| | | */ |
| | | @Override |
| | | public String dealVisitEvent(EventVisitRequest param, HttpServletResponse response){ |
| | | log.info("ãæµ·åº·è®¿å®¢äºä»¶æ¨éã==========å¼å§=======ï¼\n"+JSONObject.toJSONString(param)); |
| | | String result = null; |
| | |
| | | /** |
| | | * æ ¹æ®è®¿å®¢æ¨é访客记å½ç¼ç ï¼å¤ç访客记å½ãå¨åºäººåçä¿¡æ¯ |
| | | */ |
| | | private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,List<VisitEvent> list) { |
| | | EventVisitIccmInvoiceParamRequest data = request.getData().getVisitorInvoices(); |
| | | Integer memberId = null; |
| | | if(request.getData().getTargetPerson().getPersonId()!=null){ |
| | | Member m = memberMapper.selectOne(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getHkId,request.getData().getTargetPerson().getPersonId()) |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .last( "limit 1")); |
| | | if(m!=null){ |
| | | memberId = m.getId(); |
| | | } |
| | | } |
| | | for(EventVisitIccmDetailParamRequest model : request.getData().getVisitorInformationList()){ |
| | | |
| | | Visits updateVistis = new Visits(); |
| | | MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(Visits.class); |
| | | queryWrapper.selectAs(Member::getType,Visits::getMemberType); |
| | | queryWrapper.eq(Visits::getHkId,model.getVisitorId() ); |
| | | queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId ); |
| | | queryWrapper.last("limit 1"); |
| | | Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper); |
| | | if(visits !=null) { |
| | | //å¦æäººåä¿¡æ¯åå¨ï¼åå é¤ä¹åçææè¿åºæ°æ®ï¼æ è®ºæ¤æ¬¡æ¨éæ¯è¿åè¿æ¯åºåºæ¨éäºä»¶ï¼ |
| | | delRetentionLis.add(visits.getMemberId()); |
| | | if (dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk) { |
| | | //妿æ¯ä¼å©å¤§å±é¡¹ç®ï¼ä¸åå¤ç |
| | | return; |
| | | } |
| | | updateVistis.setId(visits.getId()); |
| | | if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) { |
| | | //妿æ¯è®¿å®¢ç»è®°ï¼å½å
¥äººåçå¨åºæ°æ®è®°å½ |
| | | retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType())); |
| | | //æ¥è®¿æ¶é´ |
| | | updateVistis.setStatus(Constants.VisitIccmStatus.signin); |
| | | updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); |
| | | updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); |
| | | updateVistis.setEditDate(new Date()); |
| | | //æ´æ°è®¿å®¢æ¥è®¿æè
ç¾ç¦»æ¶é´ä¿¡æ¯ |
| | | visitsMapper.updateById(updateVistis); |
| | | //æ´æ°ææ°æ¥è®¿æ¶é´ |
| | | Member member = new Member(); |
| | | member.setLastVisitDate(updateVistis.getInDate()); |
| | | member.setId(visits.getMemberId()); |
| | | memberMapper.updateById(member); |
| | | } else if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey()) { |
| | | //妿æ¯è®¿å®¢ç¾ç¦»äºä»¶ |
| | | updateVistis.setStatus(Constants.VisitIccmStatus.signout); |
| | | updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); |
| | | updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); |
| | | updateVistis.setOutType(Constants.ZERO); |
| | | updateVistis.setOutInfo("访客æ£å¸¸ç¾ç¦»"); |
| | | updateVistis.setEditDate(new Date()); |
| | | //æ´æ°è®¿å®¢æ¥è®¿æè
ç¾ç¦»æ¶é´ä¿¡æ¯ |
| | | visitsMapper.updateById(updateVistis); |
| | | }else{ |
| | | updateVistis.setStatus(visits.getStatus()); |
| | | } |
| | | }else{ |
| | | //æ°å¢è®¿å®¢ç»è®°æ°æ® |
| | | addNewVisitInfo(request,model,updateVistis.getStatus()); |
| | | } |
| | | //å°è£
é¨ç¦äºä»¶ä¿¡æ¯è¡¨å¯¹è±¡ |
| | | list.add(getVisitEventModelByRequest(request,model)); |
| | | } |
| | | } |
| | | |
| | | private void addNewVisitInfo(EventVisitIccmInfoRequest request, EventVisitIccmDetailParamRequest model,Integer status) { |
| | | try{ |
| | | Visits c = new Visits(); |
| | | c.setHkId(model.getVisitorId()); |
| | | c.setCode(model.getAppointmentCode()); |
| | | c.setName(model.getVisitorName()); |
| | | c.setHkStatus(Constants.ONE); |
| | | c.setHkDate(new Date()); |
| | | c.setIsdeleted(Constants.ZERO); |
| | | c.setCreateDate(c.getHkDate()); |
| | | c.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, model.getCertNo())); |
| | | c.setIdcardDecode(Constants.getTuominStr(model.getCertNo())); |
| | | c.setIdcardType( model.getCertType()); |
| | | c.setStarttime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getBeginTime())); |
| | | c.setEndtime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getFinishTime())); |
| | | c.setReason(request.getData().getVisitorInvoices().getVisitReason()); |
| | | c.setStatus(status); |
| | | c.setType(Constants.ONE); |
| | | if(StringUtils.isNotBlank(request.getData().getTargetPerson().getPersonId())){ |
| | | //被访é®äºº |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId |
| | | ,request.getData().getTargetPerson().getPersonId()).last("limit 1")); |
| | | c.setReceptMemberId(member!=null?member.getId():null); |
| | | } |
| | | c.setCompanyName(model.getUnit()); |
| | | c.setPhone(model.getPhone()); |
| | | c.setCarNos(model.getPlateNo()); |
| | | if(StringUtils.isNotBlank(model.getCertNo())){ |
| | | //被访é®äºº |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getType,Constants.ONE) |
| | | .eq(Member::getIdcardNo , c.getIdcardNo()) |
| | | .last("limit 1")); |
| | | if(member == null){ |
| | | member = new Member(); |
| | | member.setName(model.getVisitorName()); |
| | | member.setPhone(model.getPhone()); |
| | | member.setSex(model.getSex()); |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setType(Constants.ONE); |
| | | member.setIdcardNo(c.getIdcardNo()); |
| | | member.setIdcardDecode(c.getIdcardDecode()); |
| | | member.setVisitCompanyName(model.getUnit()); |
| | | member.setCreateDate(new Date()); |
| | | if(StringUtils.isNotBlank(model.getFacePic())){ |
| | | member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic()); |
| | | member.setFaceServerIndexCode(model.getFaceDeviceId()); |
| | | } |
| | | memberMapper.insert(member); |
| | | }else{ |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setEditDate(new Date()); |
| | | member.setName(model.getVisitorName()); |
| | | member.setPhone(model.getPhone()); |
| | | member.setSex(model.getSex()); |
| | | member.setVisitCompanyName(model.getUnit()); |
| | | if(StringUtils.isNotBlank(model.getFacePic())){ |
| | | member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic()); |
| | | member.setFaceServerIndexCode(model.getFaceDeviceId()); |
| | | } |
| | | memberMapper.updateById(member); |
| | | } |
| | | c.setMemberId(member.getId()); |
| | | visitsMapper.insert(c); |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("====================访客æ¨éæ°å¢è®¿å®¢è®°å½å¤±è´¥:"+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | private void dealVisitDataByRequst(EventVisitInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) { |
| | | EventVisitDataRequest model = request.getData(); |
| | | MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); |
| | |
| | | updateVistis.setId(visits.getId()); |
| | | if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){ |
| | | //妿æ¯è®¿å®¢ç»è®°ï¼å½å
¥äººåçå¨åºæ°æ®è®°å½ |
| | | retentionList.add(getRetentionModelByVisitRequest(visits,request)); |
| | | retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType())); |
| | | //æ¥è®¿æ¶é´ |
| | | updateVistis.setStatus(Constants.VisitStatus.signin); |
| | | updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime())); |
| | |
| | | } |
| | | } |
| | | |
| | | private VisitEvent getVisitEventModelByRequest(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) { |
| | | if(request.getData().getTargetPerson() ==null){ |
| | | request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest()); |
| | | } |
| | | VisitEvent event = new VisitEvent(); |
| | | event.setIsdeleted(Constants.ZERO); |
| | | event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); |
| | | event.setVisitorWorkUint(detail.getUnit()); |
| | | event.setVisitorId(detail.getVisitorId()); |
| | | event.setVisitorCode(detail.getAppointmentCode()); |
| | | event.setTimeout(request.getTimeout()); |
| | | event.setSvrIndexCode(request.getSrcIndex()); |
| | | event.setHappenTime(request.getHappenTime()); |
| | | event.setStatus(request.getStatus()); |
| | | event.setEndTime(request.getData().getVisitorInvoices().getFinishTime()); |
| | | event.setStartTime(request.getData().getVisitorInvoices().getBeginTime()); |
| | | event.setSrcType(request.getSrcType()); |
| | | event.setSrcParentIndex(request.getSrcParentIndex()); |
| | | event.setSrcName(request.getSrcName()); |
| | | event.setSrcIndex(request.getSrcIndex()); |
| | | event.setSex(detail.getSex()); |
| | | event.setPurpose(request.getData().getVisitorInvoices().getVisitReason()); |
| | | event.setPhone(detail.getPhone()); |
| | | event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId()); |
| | | event.setBeVisitedPersonName(request.getData().getTargetPerson().getName()); |
| | | event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName()); |
| | | event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName()); |
| | | event.setPhotoUrl(getHkImgUrl(detail.getFacePic())); |
| | | event.setPersonName(detail.getVisitorName()); |
| | | event.setCarNo(detail.getPlateNo()); |
| | | |
| | | event.setIdType(detail.getCertType()); |
| | | String idnum = detail.getCertNo(); |
| | | if(StringUtils.isNotBlank(idnum)){ |
| | | //身份è¯å·åå¨å¯æ |
| | | event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份è¯å·å å¯ |
| | | //è±æææºå·æ¾ç¤ºn |
| | | event.setIdcardDecode(Constants.getTuominStr(idnum)); |
| | | } |
| | | event.setEventType(request.getEventType()); |
| | | event.setEventId(request.getEventId()); |
| | | return event; |
| | | } |
| | | private VisitEvent getVisitEventModelByRequest(EventVisitInfoRequest request) { |
| | | VisitEvent event = new VisitEvent(); |
| | | event.setIsdeleted(Constants.ZERO); |
| | |
| | | return event; |
| | | } |
| | | |
| | | private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) { |
| | | private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) { |
| | | Retention retention = new Retention(); |
| | | retention.setIsdeleted(Constants.ZERO); |
| | | retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); |
| | | retention.setCreateDate(DateUtil.getISO8601DateByStr(happentTime)); |
| | | retention.setClasses(visits.getClasses()); |
| | | retention.setCode(visits.getCode()); |
| | | retention.setIdcardNo(visits.getIdcardNo()); |
| | |
| | | retention.setType(visits.getMemberType()); |
| | | retention.setCompanyId(visits.getCompanyId()); |
| | | retention.setCompanyName(visits.getCompanyName()); |
| | | retention.setEventCode(request.getSrcType()+""); |
| | | retention.setEventCode(srcType); |
| | | retention.setEventDate(retention.getCreateDate()); |
| | | retention.setFaceImg(visits.getFaceImg()); |
| | | retention.setImgurl(visits.getImgurl()); |
| | |
| | | //åæå
¥ææ°çå¨å人å |
| | | retentionMapper.insertBatchSomeColumn(retentionList); |
| | | } |
| | | log.error("ãæµ·åº·å车åºäºä»¶æ¨éã========æå======="); |
| | | log.info("ãæµ·åº·å车åºäºä»¶æ¨éã========æå======="); |
| | | }catch (Exception e){ |
| | | |
| | | log.error("ãæµ·åº·å车åºäºä»¶æ¨éã========失败=======ï¼\n"+e.getMessage()); |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.config.DataSyncConfig; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | |
| | | import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest; |
| | | import com.doumee.core.haikang.model.param.respose.*; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.ImageBase64Util; |
| | | import com.doumee.core.utils.*; |
| | | import com.doumee.core.wx.wxPlat.WxPlatNotice; |
| | | import com.doumee.dao.business.DeviceRoleMapper; |
| | | import com.doumee.dao.business.RetentionMapper; |
| | | import com.doumee.dao.business.VisitEventMapper; |
| | | import com.doumee.dao.business.join.VisitsJoinMapper; |
| | | import com.doumee.dao.business.model.DeviceRole; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Retention; |
| | | import com.doumee.dao.business.model.Visits; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 海康访客ä¸å¡Serviceå®ç° |
| | |
| | | @Service |
| | | @Slf4j |
| | | public class HkSyncVisitServiceImpl extends HkSyncBaseServiceImpl { |
| | | |
| | | @Autowired |
| | | private DataSyncConfig dataSyncConfig; |
| | | @Autowired |
| | | private VisitsJoinMapper visitsMapper; |
| | | @Autowired |
| | | private VisitEventMapper visitEventMapper; |
| | | @Autowired |
| | | private RetentionMapper retentionMapper; |
| | | @Autowired |
| | |
| | | List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper); |
| | | return list; |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void syncParkRecords(Date date){ |
| | | try { |
| | | if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼å½å䏿¯ææµ·åº·æ°æ®åæ¥æä½~"); |
| | | } |
| | | AppointmentEventListRequest param = new AppointmentEventListRequest(); |
| | | //ï¼å
¨éåæ¥ï¼ |
| | | boolean hasNext = true; |
| | | int curTotal = 0; |
| | | int curPage = 1; |
| | | //æ¥è¯¢ä»å¤©ç |
| | | Date start = Utils.Date.getStart(date); |
| | | Date end = new Date(); |
| | | if(DateUtil.daysBetweenDates(end,start) >1){ |
| | | end = Utils.Date.getEnd(date); |
| | | } |
| | | param.setEventTimeBegin(DateUtil.getISO8601Timestamp2( start)); |
| | | param.setEventTimeBegin(DateUtil.getISO8601Timestamp2( end)); |
| | | |
| | | List<VisitEvent> allHkList = new ArrayList<>(); |
| | | while (hasNext){ |
| | | //å页éåå¾ªç¯æ¥è¯¢ææé¨ç¦è®¾å¤æ°æ® |
| | | param.setPageNo(curPage); |
| | | param.setPageSize(100); |
| | | BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>> response = HKService.appointmentEventQuery(param); |
| | | if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) ){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对ä¸èµ·ï¼æµ·åº·åæ¥æ°æ®å¤±è´¥~"); |
| | | } |
| | | if(response.getData() == null || response.getData().getTotal() ==0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªåæ¥å°ä»»ä½ä¿¡æ¯ï¼"); |
| | | } |
| | | BaseListPageResponse<AppointmentEventInfoResponse> r = response.getData(); |
| | | curTotal += 100; |
| | | if(curTotal >= r.getTotal()){ |
| | | hasNext = false; |
| | | } |
| | | if(r.getList() == null || r.getList().size()==0){ |
| | | hasNext =false; |
| | | }else{ |
| | | allHkList.addAll(getNewCarEventModelBYList(r.getList())); |
| | | } |
| | | curPage++; |
| | | } |
| | | if(allHkList .size() == 0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªåæ¥å°ä»»ä½ä¿¡æ¯ï¼"); |
| | | } |
| | | //æ¸
空åæå½å¤©çæ°æ® |
| | | visitEventMapper.delete(new UpdateWrapper<VisitEvent>().lambda() |
| | | .ge(VisitEvent::getCreateDate,start) |
| | | .le(VisitEvent::getCreateDate,end)); |
| | | if(allHkList.size()>0){ |
| | | int sublistSize = 500; |
| | | |
| | | int startIndex = 0; |
| | | int endIndex = sublistSize; |
| | | |
| | | while (startIndex < allHkList.size()) { |
| | | if (endIndex > allHkList.size()) { |
| | | endIndex = allHkList.size(); |
| | | } |
| | | |
| | | List<VisitEvent> sublist = allHkList.subList(startIndex, endIndex); |
| | | if(sublist.size()>0){ |
| | | visitEventMapper.insertBatchSomeColumn(sublist);//æå
¥æ°æ°æ® |
| | | } |
| | | startIndex = endIndex; |
| | | endIndex += sublistSize; |
| | | } |
| | | } |
| | | |
| | | }catch (BusinessException e){ |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | private List<VisitEvent> getNewCarEventModelBYList(List<AppointmentEventInfoResponse> list ) { |
| | | List<VisitEvent> newList = new ArrayList<>(); |
| | | if(list == null || list.size()==0){ |
| | | return newList; |
| | | } |
| | | for(AppointmentEventInfoResponse model :list){ |
| | | VisitEvent c = new VisitEvent(); |
| | | c.setHappenTime(model.getEventTime()); |
| | | c.setCreateDate(DateUtil.getISO8601DateByStr2(model.getEventTime())); |
| | | c.setPersonName(model.getVisitorName()); |
| | | c.setSex(Integer.parseInt(model.getVisitorSex())); |
| | | c.setCarNo(model.getCarNumber()); |
| | | c.setIdNo(model.getIdentityNum()); |
| | | c.setIdType(Integer.parseInt(model.getIdentityId())); |
| | | c.setPhone(model.getPhoneNum()); |
| | | c.setRemark(model.getCardNum()); |
| | | c.setPhotoUrl(model.getIdentityPhotoUri()); |
| | | c.setVisitorId(model.getVisitorId()); |
| | | c.setIsdeleted(Constants.ZERO); |
| | | c.setEventTypeName(model.getEventName()); |
| | | |
| | | newList.add(c); |
| | | } |
| | | return newList; |
| | | } |
| | | |
| | | } |
| | |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.model.CarEvent; |
| | | import com.doumee.dao.business.model.Cars; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Visits; |
| | |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private ParksMapper parksMapper; |
| | | @Autowired |
| | | private CarEventMapper carEventMapper; |
| | | @Autowired |
| | | private CarsMapper carsMapper; |
| | | @Autowired |
| | |
| | | //被访é®äºº |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1")); |
| | | c.setMemberId(member!=null?member.getId():null); |
| | | if(member!=null){ |
| | | carEventMapper.update(null,new UpdateWrapper<CarEvent>().lambda() |
| | | .set(CarEvent::getMemberId,member.getId()) |
| | | .eq(CarEvent::getPlateNos,c.getCode()) |
| | | .apply("member_id is null or member_id=''") |
| | | ); |
| | | } |
| | | } |
| | | Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda().eq(Cars::getHkId,model.getVehicleId()).last("limit 1")); |
| | | if(cars!=null){ |
| | |
| | | //被访é®äºº |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1")); |
| | | c.setMemberId(member!=null?member.getId():null); |
| | | if(member!=null){ |
| | | carEventMapper.update(null,new UpdateWrapper<CarEvent>().lambda() |
| | | .set(CarEvent::getMemberId,member.getId()) |
| | | .eq(CarEvent::getPlateNos,c.getCode()) |
| | | .apply("member_id is null or member_id=''") |
| | | ); |
| | | } |
| | | } |
| | | newList.add(c); |
| | | } |
| | | return newList; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import com.doumee.core.haikang.model.param.BaseListPageResponse; |
| | | import com.doumee.core.haikang.model.param.BaseResponse; |
| | | import com.doumee.core.haikang.model.param.request.AppointmentListRequest; |
| | | import com.doumee.core.haikang.model.param.respose.AppointmentIccmInfoResponse; |
| | | import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse; |
| | | import com.doumee.core.haikang.model.param.respose.AppointmentVisitorInfoResponse; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | |
| | | /** |
| | | * åæ¥æµ·åº·ç»ç»ä¿¡æ¯å°ä¸å¡ç³»ç» |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void syncVistAppointDataIccm(Date date){ |
| | | try { |
| | | if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼å½å䏿¯ææµ·åº·æ°æ®åæ¥æä½~"); |
| | | } |
| | | AppointmentListRequest param = new AppointmentListRequest(); |
| | | //è·åERPç»ç»ä¿¡æ¯ï¼å
¨éåæ¥ï¼ |
| | | boolean hasNext = true; |
| | | int curTotal = 0; |
| | | int curPage = 1; |
| | | //æ¥è¯¢ä»å¤©ç |
| | | Date start =Utils.Date.getStart(date); |
| | | Date end = Utils.Date.getEnd(new Date()); |
| | | param.setVisitStartTimeBegin(DateUtil.getISO8601Timestamp2( start)); |
| | | param.setVisitStartTimeEnd(DateUtil.getISO8601Timestamp2( end)); |
| | | |
| | | List<Visits> allHkList = new ArrayList<>(); |
| | | while (hasNext){ |
| | | //å页éåå¾ªç¯æ¥è¯¢ææé¨ç¦è®¾å¤æ°æ® |
| | | param.setPageNo(curPage); |
| | | param.setPageSize(100); |
| | | BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>> response = HKService.appointmentRecordsIccm(param); |
| | | if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) ){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对ä¸èµ·ï¼æµ·åº·åæ¥æ°æ®å¤±è´¥~"); |
| | | } |
| | | if(response.getData() == null || response.getData().getTotal() ==0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªåæ¥å°ä»»ä½ä¿¡æ¯ï¼"); |
| | | } |
| | | BaseListPageResponse<AppointmentIccmInfoResponse> r = response.getData(); |
| | | curTotal += 100; |
| | | if(curTotal >= r.getTotal()){ |
| | | hasNext = false; |
| | | } |
| | | if(r.getList() == null || r.getList().size()==0){ |
| | | hasNext =false; |
| | | }else{ |
| | | allHkList.addAll(getNewVisitModelBYListIccm(r.getList())); |
| | | } |
| | | curPage++; |
| | | } |
| | | if(allHkList .size() == 0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªåæ¥å°ä»»ä½ä¿¡æ¯ï¼"); |
| | | } |
| | | //æ¸
空åæå½å¤©çæ°æ® |
| | | visitsMapper.delete(new UpdateWrapper<Visits>().lambda() |
| | | .ge(Visits::getStarttime,start) |
| | | .eq(Visits::getType,Constants.ONE) |
| | | .le(Visits::getStarttime,end)); |
| | | visitsMapper.insertBatchSomeColumn(allHkList);//æå
¥æ°æ°æ® |
| | | }catch (BusinessException e){ |
| | | throw e; |
| | | } |
| | | } |
| | | /** |
| | | * åæ¥æµ·åº·ç»ç»ä¿¡æ¯å°ä¸å¡ç³»ç» |
| | | */ |
| | |
| | | } |
| | | } |
| | | |
| | | private List<Visits> getNewVisitModelBYListIccm(List<AppointmentIccmInfoResponse> list ) { |
| | | List<Visits> newList = new ArrayList<>(); |
| | | if(list == null || list.size()==0){ |
| | | return newList; |
| | | } |
| | | for(AppointmentIccmInfoResponse data :list){ |
| | | if(data.getVisitorList()==null || data.getVisitorList().size() ==0){ |
| | | continue; |
| | | } |
| | | for(AppointmentVisitorInfoResponse model : data.getVisitorList()){ |
| | | Visits c = new Visits(); |
| | | c.setHkId(model.getVisitorId()); |
| | | c.setCode(model.getQrCode()); |
| | | c.setName(model.getVisitorName()); |
| | | c.setHkStatus(Constants.ONE); |
| | | c.setHkDate(new Date()); |
| | | c.setIsdeleted(Constants.ZERO); |
| | | c.setCreateDate(c.getHkDate()); |
| | | c.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, model.getCertificateNo())); |
| | | c.setIdcardDecode(Constants.getTuominStr(model.getCertificateNo())); |
| | | c.setIdcardType(Integer.parseInt(model.getCertificateType())); |
| | | c.setStarttime(DateUtil.getISO8601DateByStr2(data.getVisitStartTime())); |
| | | c.setEndtime(DateUtil.getISO8601DateByStr2(data.getVisitEndTime())); |
| | | c.setReason(data.getVisitPurpose()); |
| | | c.setStatus(model.getVisitorStatus()); |
| | | c.setType(Constants.ONE); |
| | | if(StringUtils.isNotBlank(data.getReceptionistId())){ |
| | | //被访é®äºº |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,data.getReceptionistId()).last("limit 1")); |
| | | c.setReceptMemberId(member!=null?member.getId():null); |
| | | } |
| | | c.setCompanyName(model.getVisitorWorkUnit()); |
| | | c.setPhone(model.getPhoneNo()); |
| | | c.setCarNos(model.getPlateNo()); |
| | | if(StringUtils.isNotBlank(model.getCertificateNo())){ |
| | | //被访é®äºº |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getType,Constants.ONE) |
| | | .eq(Member::getIdcardNo , c.getIdcardNo()) |
| | | .last("limit 1")); |
| | | if(member == null){ |
| | | member = new Member(); |
| | | member.setName(model.getVisitorName()); |
| | | member.setPhone(model.getPhoneNo()); |
| | | member.setSex(model.getGender()); |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setType(Constants.ONE); |
| | | member.setIdcardNo(c.getIdcardNo()); |
| | | member.setIdcardDecode(c.getIdcardDecode()); |
| | | member.setVisitCompanyName(model.getVisitorWorkUnit()); |
| | | member.setCreateDate(new Date()); |
| | | if(StringUtils.isNotBlank(model.getPicUri())){ |
| | | member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri()); |
| | | member.setFaceServerIndexCode(model.getSvrIndexCode()); |
| | | } |
| | | memberMapper.insert(member); |
| | | }else{ |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setEditDate(new Date()); |
| | | member.setName(model.getVisitorName()); |
| | | member.setPhone(model.getPhoneNo()); |
| | | member.setSex(model.getGender()); |
| | | member.setVisitCompanyName(model.getVisitorWorkUnit()); |
| | | if(StringUtils.isNotBlank(model.getPicUri())){ |
| | | member.setFaceServerIndexCode(model.getSvrIndexCode()); |
| | | member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri()); |
| | | } |
| | | memberMapper.updateById(member); |
| | | } |
| | | c.setMemberId(member.getId()); |
| | | |
| | | } |
| | | newList.add(c); |
| | | } |
| | | |
| | | } |
| | | return newList; |
| | | } |
| | | private List<Visits> getNewVisitModelBYList(List<AppointmentInfoResponse> list ) { |
| | | List<Visits> newList = new ArrayList<>(); |
| | | if(list == null || list.size()==0){ |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | import com.doumee.dao.system.dto.LoginDTO; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | /** |
| | |
| | | * @author Eva.Caesar Liu |
| | | * @date 2023/03/21 14:49 |
| | | */ |
| | | |
| | | String loginByPassword (LoginDTO dto, HttpServletRequest request); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | spring: |
| | | # æ°æ®æºé
ç½® |
| | | datasource: |
| | | url: jdbc:mysql://127.0.0.1:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | username: test1 |
| | | password: Doumee@168 |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | type: com.alibaba.druid.pool.DruidDataSource |
| | | redis: |
| | | # database: 0 |
| | | host: 127.0.0.1 |
| | | port: 6379 |
| | | password: |
| | | timeout: 5000 # è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥ |
| | | jackson: |
| | | time-zone: GMT+8 |
| | | date-format: yyyy-MM-dd HH:mm:ss |
| | | |
| | | #rocketmq: |
| | | # namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080 |
| | | # groupId: GID-wakatest |
| | | # topic: waka-test |
| | | # username: 4derRb4Sw5EkqUMI |
| | | # password: v50N97wf4av8Q8I4 |
| | | |
| | | knife4j: |
| | | enable: true |
| | | basic: |
| | | enable: true |
| | | username: admin |
| | | password: 111111 |
| | | |
| | | debug_model: false |
| | | ########################åæ¥æ°æ®æ¨¡å¼ ######################## |
| | | data-sync: |
| | | org-user-data-origin: 2 #ç»ç»æ°æ® 0èªå»º 2以海康为主 1åæERPç³»ç» |
| | | visitor-data-origin: 2 #è®¿å®¢æ°æ® 0èªå»º 2以海康为主 1åæERPç³»ç» |
| | | need-deal-img: false #æ¯å¦éè¦å¤çå¾çæ°æ® |
| | | |
| | | # Swaggeré
ç½® |
| | | swagger: |
| | | host: 127.0.0.1 |
| | | title: ${project.name}æ¥å£ææ¡£ |
| | | description: ${project.name}æ¥å£ææ¡£ |
| | | enabled: true |
| | | context-path: |
| | | # ç¦ç¨swaggeræ¶çéå®åå°å |
| | | redirect-uri: / |
| | | |
| | | ########################微信æ¯ä»ç¸å
³é
ç½®######################## |
| | | wx: |
| | | pay: |
| | | appId: wxfab6da18632e28de |
| | | appSecret: 4ee3b22afa90287834319fc3c1635271 |
| | | mchId: 1229817002 |
| | | mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM |
| | | notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify |
| | | keyPath: /usr/local/apiclient_cert.p12 |
| | | |
| | | tencent: |
| | | map: |
| | | remoteHost: https://apis.map.qq.com |
| | | appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ |
| | | |
| | | |
| | | des_pwd: 123456SDFKDJF |
| | | |
| | | ## MQTT## |
| | | mqtt: |
| | | host: tcp://192.168.10.198:1883 |
| | | userName: root |
| | | passWord: 123456 |
| | | qos: 1 |
| | | clientId: ClientId_local #ClientId_localå¿
é¡»å¯ä¸ æ¯å¦ä½ å·²ç»å®äºå«ABC é£ä½ å°±ä¸ç´å«ABC å
¶ä»å°æ¹å°±ä¸è¦ä½¿ç¨ABCäº |
| | | timeout: 10 |
| | | keepalive: 20 |
| | | topic1: A/pick/warn/# #ç¬¦å·æ¯ä»£è¡¨æ´ä¸ªwarnä¸é¢çå
¨é¨åä¸»é¢ æ²¡æçè§£çè¯ å¯ä»¥ç¾åº¦ä»ç»çè§£ä¸ä¸ |
| | | topic2: A/cmd/resp |
| | | topic3: ABCF |
| | | topic4: ABCH |
| | |
| | | spring: |
| | | # æ°æ®æºé
ç½® |
| | | datasource: |
| | | url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/dm_visit_yl?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | username: doumee |
| | | password: rtjgfEr@&0c0m |
| | | url: jdbc:mysql://127.0.0.1:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai |
| | | username: test1 |
| | | password: Doumee@168 |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | type: com.alibaba.druid.pool.DruidDataSource |
| | | redis: |
| | |
| | | username: admin |
| | | password: 111111 |
| | | |
| | | debug_model: true |
| | | debug_model: false |
| | | ########################åæ¥æ°æ®æ¨¡å¼ ######################## |
| | | data-sync: |
| | | org-user-data-origin: 2 #ç»ç»æ°æ® 0èªå»º 2以海康为主 1åæERPç³»ç» |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8" ?> |
| | | <configuration> |
| | | <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <layout class="ch.qos.logback.classic.PatternLayout"> |
| | | <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern> |
| | | </layout> |
| | | </appender> |
| | | <property name="log.path" value="/usr/local/jars/log/web"></property> |
| | | <property name="log.fileSize" value="100MB"></property> |
| | | <property name="log.historyDays" value="7"></property> |
| | | |
| | | <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>ERROR</level> |
| | | <!--å¹é
å°±èå»--> |
| | | <onMatch>DENY</onMatch> |
| | | <onMismatch>ACCEPT</onMismatch> |
| | | </filter> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <!--è·¯å¾--> |
| | | <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern> |
| | | <maxFileSize>${log.fileSize}</maxFileSize> |
| | | <maxHistory>${log.historyDays}</maxHistory> |
| | | <totalSizeCap>1GB</totalSizeCap> |
| | | </rollingPolicy> |
| | | </appender> |
| | | |
| | | <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
| | | <level>ERROR</level> |
| | | </filter> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <!--æ»å¨çç¥--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <!--è·¯å¾--> |
| | | <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern> |
| | | <maxFileSize>${log.fileSize}</maxFileSize> |
| | | <maxHistory>${log.historyDays}</maxHistory> |
| | | <totalSizeCap>1GB</totalSizeCap> |
| | | </rollingPolicy> |
| | | </appender> |
| | | <!-- 弿¥åå
¥æ¥å¿ --> |
| | | <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender"> |
| | | <!-- ä¸ä¸¢å¤±æ¥å¿.é»è®¤ç,妿éåç80%已满,åä¼ä¸¢å¼TRACTãDEBUGãINFO级å«çæ¥å¿ --> |
| | | <discardingThreshold >0</discardingThreshold> |
| | | <!-- æ´æ¹é»è®¤çéåçæ·±åº¦,该å¼ä¼å½±åæ§è½.é»è®¤å¼ä¸º256 --> |
| | | <queueSize>512</queueSize> |
| | | <!-- æ·»å éå çappender,æå¤åªè½æ·»å ä¸ä¸ª --> |
| | | <appender-ref ref ="fileInfoLog"/> |
| | | </appender> |
| | | <root level="info"> |
| | | <appender-ref ref="consoleLog"/> |
| | | <appender-ref ref="fileInfoLog"/> |
| | | <appender-ref ref="fileErrorLog"/> |
| | | </root> |
| | | </configuration> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="utf-8" ?> |
| | | <configuration> |
| | | <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <layout class="ch.qos.logback.classic.PatternLayout"> |
| | | <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern> |
| | | </layout> |
| | | </appender> |
| | | <property name="log.path" value="/usr/local/jars/log/erp"></property> |
| | | <property name="log.fileSize" value="100MB"></property> |
| | | <property name="log.historyDays" value="7"></property> |
| | | |
| | | <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>ERROR</level> |
| | | <!--å¹é
å°±èå»--> |
| | | <onMatch>DENY</onMatch> |
| | | <onMismatch>ACCEPT</onMismatch> |
| | | </filter> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <!--è·¯å¾--> |
| | | <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern> |
| | | <maxFileSize>${log.fileSize}</maxFileSize> |
| | | <maxHistory>${log.historyDays}</maxHistory> |
| | | <totalSizeCap>1GB</totalSizeCap> |
| | | </rollingPolicy> |
| | | </appender> |
| | | |
| | | <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
| | | <level>ERROR</level> |
| | | </filter> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <!--æ»å¨çç¥--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <!--è·¯å¾--> |
| | | <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern> |
| | | <maxFileSize>${log.fileSize}</maxFileSize> |
| | | <maxHistory>${log.historyDays}</maxHistory> |
| | | <totalSizeCap>1GB</totalSizeCap> |
| | | </rollingPolicy> |
| | | </appender> |
| | | <!-- 弿¥åå
¥æ¥å¿ --> |
| | | <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender"> |
| | | <!-- ä¸ä¸¢å¤±æ¥å¿.é»è®¤ç,妿éåç80%已满,åä¼ä¸¢å¼TRACTãDEBUGãINFO级å«çæ¥å¿ --> |
| | | <discardingThreshold >0</discardingThreshold> |
| | | <!-- æ´æ¹é»è®¤çéåçæ·±åº¦,该å¼ä¼å½±åæ§è½.é»è®¤å¼ä¸º256 --> |
| | | <queueSize>512</queueSize> |
| | | <!-- æ·»å éå çappender,æå¤åªè½æ·»å ä¸ä¸ª --> |
| | | <appender-ref ref ="fileInfoLog"/> |
| | | </appender> |
| | | <root level="info"> |
| | | <appender-ref ref="consoleLog"/> |
| | | <appender-ref ref="fileInfoLog"/> |
| | | <appender-ref ref="fileErrorLog"/> |
| | | </root> |
| | | </configuration> |
| | |
| | | <module>openapi</module> |
| | | <module>admin_timer</module> |
| | | <module>admin_sys_timer</module> |
| | | <module>dmvisit_screen</module> |
| | | </modules> |
| | | |
| | | |