From dc79419f90bd4b9622e06320e15e3e056c13d89b Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期二, 15 十月 2024 19:07:27 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
---
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 17
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PositionServiceImpl.java | 146 +++++++++
admin/src/views/business/position.vue | 82 +++++
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java | 13
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PositionCloudController.java | 99 ++++++
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Position.java | 84 +++++
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PositionMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PositionService.java | 99 ++++++
admin/src/components/business/OperaMemberWindow.vue | 43 ++
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java | 40 +-
admin/src/views/business/relativeMember.vue | 78 +++-
admin/src/components/business/OperaPositionWindow.vue | 75 ++++
admin/src/api/business/position.js | 42 ++
admin/src/views/business/internalMember.vue | 80 +++-
14 files changed, 829 insertions(+), 81 deletions(-)
diff --git a/admin/src/api/business/position.js b/admin/src/api/business/position.js
new file mode 100644
index 0000000..bbf959c
--- /dev/null
+++ b/admin/src/api/business/position.js
@@ -0,0 +1,42 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+
+export function fetchList (data) {
+ return request.post('/visitsAdmin/cloudService/business/position/list', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/visitsAdmin/cloudService/business/position/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/visitsAdmin/cloudService/business/position/updateById', data)
+}
+export function sort (data) {
+ return request.post('/visitsAdmin/cloudService/business/position/updateSort', data)
+}
+
+// 鍒嗛〉鏌ヨ
+export function positionGetList (data) {
+ return request.post('/visitsAdmin/cloudService/business/position/page', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/visitsAdmin/cloudService/business/position/delete/${id}`)
+}
+
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/visitsAdmin/cloudService/business/position/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/components/business/OperaMemberWindow.vue b/admin/src/components/business/OperaMemberWindow.vue
index b356deb..7b12553 100644
--- a/admin/src/components/business/OperaMemberWindow.vue
+++ b/admin/src/components/business/OperaMemberWindow.vue
@@ -11,6 +11,12 @@
娉細浠呮敮鎸侀�夋嫨 銆恵{ companyType === 0 ? '鐩稿叧鏂圭粍缁�' : '鍐呴儴缁勭粐' }}銆�
</div>
</el-form-item>
+ <el-form-item label="閫夋嫨宀椾綅锛�" prop="positionId" >
+ <el-select v-model="form.positionId" clearable filterable placeholder="璇烽�夋嫨">
+ <el-option v-for="item in positionList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
<el-form-item label="鎵嬫満鍙�" prop="phone">
<el-input v-model="form.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim />
<div style="color: #F56C6C;font-size: 12px">娉細鍛樺伐鎵嬫満鍙峰皢浣滀负骞冲彴鐧诲綍璐﹀彿锛屽垵濮嬪瘑鐮佷负绯荤粺榛樿瀵嗙爜閰嶇疆椤�</div>
@@ -27,6 +33,19 @@
<el-form-item label="宸ュ彿" prop="code">
<el-input v-model="form.code" placeholder="璇疯緭鍏ュ憳宸ュ伐鍙�" v-trim />
</el-form-item>
+ <el-form-item label="鍏ヨ亴鏃ユ湡" prop="jobDate">
+ <el-date-picker
+ v-model="form.jobDate"
+ value-format="yyyy-MM-dd"
+ type="date">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏄惁鍏氬憳" prop="isDangyuan">
+ <el-radio-group v-model="form.radio" @input="isDangyuan">
+ <el-radio :label="0">闈炲厷鍛�</el-radio>
+ <el-radio :label="1">鍏氬憳</el-radio>
+ </el-radio-group>
+ </el-form-item>
<el-form-item label="浜鸿劯鐓х墖" prop="faceImgFull">
<div class="upload_wrap">
<UploadFaceImg :file="{ 'imgurlfull': form.faceImgFull, 'imgurl': form.faceImg }" :uploadData="uploadData"
@@ -48,11 +67,12 @@
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
import UploadFaceImg from '@/components/common/UploadFaceImg'
import { checkMobile, validIdCardNo, validIdCardNoNew } from '@/utils/form'
+import { fetchList as positionList } from '@/api/business/position'
export default {
name: 'OperaCompanyWindow',
extends: BaseOpera,
components: { GlobalWindow, UploadAvatarImage, UploadFaceImg },
- data() {
+ data () {
return {
uploadData: {
folder: 'member'
@@ -64,6 +84,7 @@
},
companyType: 0,
department: [],
+ positionList: [],
// 琛ㄥ崟鏁版嵁
form: {
id: null,
@@ -79,6 +100,9 @@
idcardType: 0,
phone: '',
faceImg: '',
+ jobDate: null,
+ isDangyuan: 0,
+ positionId: null,
faceImgFull: ''
},
// 楠岃瘉瑙勫垯
@@ -91,14 +115,14 @@
}
}
},
- created() {
+ created () {
this.config({
api: '/business/member.js',
'field.id': 'id'
})
},
methods: {
- handleChangeCompany(value) {
+ handleChangeCompany (value) {
if (this.form.company && this.form.company.length > 1) {
this.form.companyId = this.form.company[this.form.company.length - 1]
}
@@ -108,11 +132,12 @@
* @title 绐楀彛鏍囬
* @target 缂栬緫鐨勫璞�
*/
- open(title, target, depart, companyType) {
+ open (title, target, depart, companyType) {
this.title = title
this.department = depart
this.visible = true
this.companyType = companyType
+ this.positionList()
// 鏂板缓
if (target == null) {
this.$nextTick(() => {
@@ -140,8 +165,14 @@
}
})
},
+ getPositionList () {
+ positionList({})
+ .then(res => {
+ this.positionList = res
+ })
+ },
// 涓婁紶鍥剧墖
- uploadAvatarSuccess(file) {
+ uploadAvatarSuccess (file) {
this.form.faceImg = file.imgurl
this.form.faceImgFull = file.imgurlfull
}
@@ -171,4 +202,4 @@
line-height: 24px;
}
}
-</style>
\ No newline at end of file
+</style>
diff --git a/admin/src/components/business/OperaPositionWindow.vue b/admin/src/components/business/OperaPositionWindow.vue
new file mode 100644
index 0000000..541c67c
--- /dev/null
+++ b/admin/src/components/business/OperaPositionWindow.vue
@@ -0,0 +1,75 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="500px"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="宀椾綅鍚嶇О" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ矖浣嶅悕绉�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
+ <el-input v-model="form.sortnum" type="number" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+ </el-form-item>
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim :rows="3" maxlength="500"/>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaPositionWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ memberList: [],
+ form: {
+ id: null,
+ name: null,
+ remark: null,
+ sortnum: null
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ュ悕绉�' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, target) {
+ this.title = title
+ this.visible = true
+ // 鏂板缓缁勭粐
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ for (const key in this.form) {
+ this.form[key] = target[key]
+ }
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
index ba0ad77..a8cd27e 100644
--- a/admin/src/views/business/internalMember.vue
+++ b/admin/src/views/business/internalMember.vue
@@ -5,6 +5,12 @@
<el-form-item label="" prop="keyword">
<el-input v-model="searchForm.keyword" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�/宸ュ彿" @keypress.enter.native="search"></el-input>
</el-form-item>
+ <el-form-item label="" prop="positionId" >
+ <el-select v-model="searchForm.positionId" clearable filterable placeholder="宀椾綅">
+ <el-option v-for="item in positionList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
<el-form-item label="" prop="hasFace">
<el-select v-model="searchForm.hasFace" @keypress.enter.native="search" clearable placeholder="鏄惁鏈変汉鑴�">
<el-option label="鏃�" value="0"></el-option>
@@ -17,11 +23,10 @@
<el-option label="鍚�" value="0"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="" prop="status">
- <el-select v-model="searchForm.status" @keypress.enter.native="search" clearable placeholder="鐘舵��">
- <el-option label="姝e父" value="0"></el-option>
- <el-option label="绂佺敤" value="1"></el-option>
- <el-option label="鎷夐粦/鍐荤粨" value="2"></el-option>
+ <el-form-item label="" prop="workStatus">
+ <el-select v-model="searchForm.workStatus" @keypress.enter.native="search" clearable placeholder="鍦ㄨ亴鐘舵��">
+ <el-option label="鍦ㄨ亴" value="0"></el-option>
+ <el-option label="绂昏亴" value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="" prop="hkStatus">
@@ -66,10 +71,17 @@
</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="110px">
+ <el-table-column fixed="left" prop="name" label="濮撳悕" min-width="110px">
<template slot-scope="{row}">
<span>{{ row.name }}</span>
<span class="zhuguan" v-if="row.headStatus == 1">涓荤</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="浜鸿劯淇℃伅" min-width="100px">
+ <template slot-scope="{row}">
+ <el-image v-if="row.faceImgFull" style="width: 60px; height: 60px" :src="row.faceImgFull"
+ :preview-src-list="[row.faceImgFull]">
+ </el-image>
</template>
</el-table-column>
<el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
@@ -81,13 +93,21 @@
</template>
</el-table-column>
<el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
- <el-table-column prop="status" label="鐘舵��" min-width="100px">
+ <el-table-column prop="postionName" label="宀椾綅" min-width="100px"></el-table-column>
+ <el-table-column prop="isDangyuan" label="鏄惁鍏氬憳" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.isDangyuan == 0" style="color: green">鏄�</span>
+ <span v-else >鍚�</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="jobDate" label="鍏ヨ亴鏃ユ湡" min-width="100px"></el-table-column>
+<!-- <el-table-column prop="status" label="鐘舵��" min-width="100px">
<template slot-scope="{row}">
<span v-if="row.status == 0" style="color: green">姝e父</span>
<span v-if="row.status == 1" style="color: red">绂佺敤</span>
<span v-if="row.status == 2" style="color: red">鎷夐粦/鍐荤粨</span>
</template>
- </el-table-column>
+ </el-table-column>-->
<el-table-column label="閮ㄩ棬绫诲瀷" min-width="100px">
<template slot-scope="{row}">
<span v-if="row.companyType == 0">鐩稿叧鏂圭粍缁�</span>
@@ -148,13 +168,6 @@
</el-table-column>
<el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
<el-table-column prop="editDate" label="鏈�鍚庢搷浣滄椂闂�" min-width="150px"></el-table-column>
- <el-table-column fixed="right" label="浜鸿劯淇℃伅" min-width="100px">
- <template slot-scope="{row}">
- <el-image v-if="row.faceImgFull" style="width: 60px; height: 60px" :src="row.faceImgFull"
- :preview-src-list="[row.faceImgFull]">
- </el-image>
- </template>
- </el-table-column>
<el-table-column
v-if="containPermissions(['business:member:update', 'business:member:delete', 'business:empower:create'])"
label="鎿嶄綔" min-width="280" fixed="right">
@@ -194,12 +207,13 @@
import OperaMemberRoleWindow from '@/components/business/OperaMemberRoleWindow'
import OperaMemberImportWindow from '@/components/business/OperaMemberImportWindow'
import { fetchList } from '@/api/business/company'
+import { fetchList as alllist } from '@/api/business/position'
import { memberSync, roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
export default {
name: 'internalMember',
extends: BaseTable,
components: { TableLayout1, Pagination, Tree, cardOpeningRecord, OperaMemberWindow, OperaMemberRoleWindow, OperaMemberImportWindow },
- data() {
+ data () {
return {
TreeList: [],
// 鎼滅储
@@ -207,12 +221,14 @@
name: '',
status: '',
hkStatus: '',
- includeChild: false,
+ includeChild: true,
canVisit: '',
keyword: '',
type: 2,
companyType: 1,
erpOrgId: '',
+ workStatus: '',
+ positionId: '',
companyId: '',
hasFace: ''
},
@@ -221,10 +237,11 @@
working: false,
canvisiting: false,
companyTree: [],
+ positionList: [],
department: []
}
},
- created() {
+ created () {
this.config({
module: '浜哄憳淇℃伅琛�',
api: '/business/member',
@@ -233,9 +250,10 @@
})
// this.search()
this.getfindCompanyTreePage()
+ this.getPositionList()
},
methods: {
- startEmpowerBatch() {
+ startEmpowerBatch () {
if (this.tableData.selectedRows.length === 0) {
this.$tip.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�')
return
@@ -248,7 +266,13 @@
})
this.$refs.OperaMemberRoleWindow.open('鍐呴儴鍛樺伐涓嬪彂鏉冮檺', ids, names, this.searchForm.companyType)
},
- empower(id) {
+ getPositionList () {
+ alllist({})
+ .then(res => {
+ this.positionList = res
+ })
+ },
+ empower (id) {
var that = this
this.$confirm('纭畾閲嶆柊鎺堟潈鍚�?', '鎻愮ず', {
confirmButtonText: '纭畾',
@@ -265,7 +289,7 @@
})
},
// 鑾峰彇缁勭粐鏍�
- getfindCompanyTreePage() {
+ getfindCompanyTreePage () {
fetchList()
.then(res => {
if (res && res.length > 0) {
@@ -277,7 +301,7 @@
}
})
},
- getDepartmentTree(tree) {
+ getDepartmentTree (tree) {
if (tree == null) {
return []
}
@@ -293,7 +317,7 @@
}
if (newItem.type === this.searchForm.companyType) {
- //newItem.disabled =false
+ // newItem.disabled =false
} else {
newItem.disabled = true
}
@@ -301,7 +325,7 @@
})
},
// 鍚屾淇℃伅
- async synchronous() {
+ async synchronous () {
this.$dialog.actionConfirm('璇ユ搷浣滈檷瑙﹀彂鍏ㄥ憳淇℃伅鏇存柊鍜岄噸鏂颁笅鍙戯紒璇疯皑鎱庢搷浣�', '鎮ㄧ‘璁ゅ叏閲忓悓姝ュ唴閮ㄤ汉鍛樹俊鎭悧锛�')
.then(() => {
this.loading = true
@@ -319,7 +343,7 @@
})
.catch(() => { })
},
- async updateHead(row, type) {
+ async updateHead (row, type) {
this.$dialog.actionConfirm('鎮ㄧ‘璁よ繘琛屽綋鍓嶆搷浣滃悧锛�', '閮ㄩ棬涓荤璁剧疆鎿嶄綔鎻愮ず')
.then(() => {
this.heading = true
@@ -337,7 +361,7 @@
.catch(() => { })
})
},
- changeWorkStatus(e, row) {
+ changeWorkStatus (e, row) {
this.working = true
updateWorkStatus({ id: row.id, workStatus: e })
.then(res => {
@@ -352,7 +376,7 @@
})
.catch(() => { })
},
- changeCanvisit(e, row) {
+ changeCanvisit (e, row) {
this.canvisiting = true
updateCanVisit({ id: row.id, canVisit: e })
.then(res => {
@@ -367,7 +391,7 @@
})
.catch(() => { })
},
- callback(row) {
+ callback (row) {
console.log(row)
this.searchForm.erpOrgId = row.erpId
this.searchForm.companyId = row.id
diff --git a/admin/src/views/business/position.vue b/admin/src/views/business/position.vue
new file mode 100644
index 0000000..3f48eea
--- /dev/null
+++ b/admin/src/views/business/position.vue
@@ -0,0 +1,82 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="120px" inline>
+ <el-form-item label="" prop="name">
+ <el-input v-model="searchForm.name" clearable placeholder="宀椾綅鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:position:create','business:position:delete']">
+ <li><el-button type="primary" @click="$refs.OperaPositionWindow.open('鏂板缓宀椾綅',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:position:create']">鏂板缓</el-button></li>
+ <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:position:delete']">鎵归噺鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="宀椾綅" min-width="200px"></el-table-column>
+ <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="200px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:position:update', 'business:position:delete' ])"
+ label="鎿嶄綔"
+ min-width="250"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" icon="el-icon-edit" @click="$refs.OperaPositionWindow.open('缂栬緫宀椾綅',row,searchForm.type)" v-permissions="['business:position:update']">缂栬緫</el-button>
+ <el-button type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:position:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaPositionWindow ref="OperaPositionWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaPositionWindow from '@/components/business/OperaPositionWindow'
+export default {
+ name: 'areaSet',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaPositionWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ title: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '宀椾綅閰嶇疆',
+ api: '/business/position',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ }
+}
+</script>
diff --git a/admin/src/views/business/relativeMember.vue b/admin/src/views/business/relativeMember.vue
index 026d7f3..f5a6676 100644
--- a/admin/src/views/business/relativeMember.vue
+++ b/admin/src/views/business/relativeMember.vue
@@ -5,6 +5,13 @@
<el-form-item label="" prop="keyword">
<el-input v-model="searchForm.keyword" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�/宸ュ彿" @keypress.enter.native="search"></el-input>
</el-form-item>
+
+ <el-form-item label="" prop="positionId" >
+ <el-select v-model="searchForm.positionId" clearable filterable placeholder="宀椾綅">
+ <el-option v-for="item in positionList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
<el-form-item label="" prop="hasFace">
<el-select v-model="searchForm.hasFace" @keypress.enter.native="search" placeholder="鏄惁鏈変汉鑴�">
<el-option label="鏃�" value="0"></el-option>
@@ -17,11 +24,10 @@
<el-option label="鍚�" value="0"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="" prop="status">
- <el-select v-model="searchForm.status" @keypress.enter.native="search" placeholder="鐘舵��">
- <el-option label="姝e父" value="0"></el-option>
- <el-option label="绂佺敤" value="1"></el-option>
- <el-option label="鎷夐粦/鍐荤粨" value="2"></el-option>
+ <el-form-item label="" prop="workStatus">
+ <el-select v-model="searchForm.workStatus" @keypress.enter.native="search" clearable placeholder="鍦ㄨ亴鐘舵��">
+ <el-option label="鍦ㄨ亴" value="0"></el-option>
+ <el-option label="绂昏亴" value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="" prop="hkStatus">
@@ -70,10 +76,17 @@
</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="110px">
+ <el-table-column fixed="left" prop="name" label="濮撳悕" min-width="110px">
<template slot-scope="{row}">
<span>{{ row.name }}</span>
<span class="zhuguan" v-if="row.headStatus == 1">涓荤</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="浜鸿劯淇℃伅" min-width="100px">
+ <template slot-scope="{row}">
+ <el-image v-if="row.faceImgFull" style="width: 60px; height: 60px" :src="row.faceImgFull"
+ :preview-src-list="[row.faceImgFull]">
+ </el-image>
</template>
</el-table-column>
<el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
@@ -85,13 +98,21 @@
</template>
</el-table-column>
<el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
- <el-table-column prop="status" label="鐘舵��" min-width="100px">
+ <el-table-column prop="postionName" label="宀椾綅" min-width="100px"></el-table-column>
+ <el-table-column prop="isDangyuan" label="鏄惁鍏氬憳" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.statusisDangyuan == 0" style="color: green">鏄�</span>
+ <span v-else >鍚�</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="jobDate" label="鍏ヨ亴鏃ユ湡" min-width="100px"> </el-table-column>
+<!-- <el-table-column prop="status" label="鐘舵��" min-width="100px">
<template slot-scope="{row}">
<span v-if="row.status == 0" style="color: green">姝e父</span>
<span v-if="row.status == 1" style="color: red">绂佺敤</span>
<span v-if="row.status == 2" style="color: red">鎷夐粦/鍐荤粨</span>
</template>
- </el-table-column>
+ </el-table-column>-->
<el-table-column label="閮ㄩ棬绫诲瀷" min-width="100px">
<template slot-scope="{row}">
<span v-if="row.companyType == 0">鐩稿叧鏂圭粍缁�</span>
@@ -152,13 +173,6 @@
</el-table-column>
<el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
<el-table-column prop="editDate" label="鏈�鍚庢搷浣滄椂闂�" min-width="150px"></el-table-column>
- <el-table-column fixed="right" label="浜鸿劯淇℃伅" min-width="100px">
- <template slot-scope="{row}">
- <el-image v-if="row.faceImgFull" style="width: 60px; height: 60px" :src="row.faceImgFull"
- :preview-src-list="[row.faceImgFull]">
- </el-image>
- </template>
- </el-table-column>
<el-table-column
v-if="containPermissions(['business:member:update', 'business:member:delete', 'business:empower:create'])"
label="鎿嶄綔" min-width="280" fixed="right">
@@ -200,12 +214,13 @@
import OperaTrainTimeImportWindow from '@/components/business/OperaTrainTimeImportWindow'
import OperaMemberRoleWindow from '@/components/business/OperaMemberRoleWindow'
import { fetchList } from '@/api/business/company'
+import { fetchList as positionList } from '@/api/business/position'
import { memberSync, roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
export default {
name: 'internalMember',
extends: BaseTable,
components: { TableLayout1, Pagination, Tree, cardOpeningRecord, OperaMemberWindow, OperaMemberRoleWindow, OperaMemberImportWindow, OperaTrainTimeImportWindow },
- data() {
+ data () {
return {
TreeList: [],
// 鎼滅储
@@ -219,6 +234,8 @@
type: 2,
companyType: 0,
erpOrgId: '',
+ workStatus: '',
+ positionId: '',
companyId: '',
hasFace: ''
},
@@ -230,7 +247,7 @@
department: []
}
},
- created() {
+ created () {
this.config({
module: '浜哄憳淇℃伅琛�',
api: '/business/member',
@@ -239,9 +256,10 @@
})
// this.search()
this.getfindCompanyTreePage()
+ this.getPositionList()
},
methods: {
- startEmpowerBatch() {
+ startEmpowerBatch () {
if (this.tableData.selectedRows.length === 0) {
this.$tip.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�')
return
@@ -254,7 +272,13 @@
})
this.$refs.OperaMemberRoleWindow.open('鍐呴儴鍛樺伐涓嬪彂鏉冮檺', ids, names, this.searchForm.companyType)
},
- empower(id) {
+ getPositionList () {
+ positionList({})
+ .then(res => {
+ this.positionList = res
+ })
+ },
+ empower (id) {
var that = this
this.$confirm('纭畾閲嶆柊鎺堟潈鍚�?', '鎻愮ず', {
confirmButtonText: '纭畾',
@@ -271,7 +295,7 @@
})
},
// 鑾峰彇缁勭粐鏍�
- getfindCompanyTreePage() {
+ getfindCompanyTreePage () {
fetchList()
.then(res => {
if (res && res.length > 0) {
@@ -283,7 +307,7 @@
}
})
},
- getDepartmentTree(tree) {
+ getDepartmentTree (tree) {
if (tree == null) {
return []
}
@@ -298,7 +322,7 @@
newItem.children = this.getDepartmentTree(newItem.children)
}
if (newItem.type === this.searchForm.companyType) {
- //newItem.disabled =false
+ // newItem.disabled =false
} else {
newItem.disabled = true
}
@@ -306,7 +330,7 @@
})
},
// 鍚屾淇℃伅
- async synchronous() {
+ async synchronous () {
this.$dialog.actionConfirm('璇ユ搷浣滈檷瑙﹀彂鍏ㄥ憳淇℃伅鏇存柊鍜岄噸鏂颁笅鍙戯紒璇疯皑鎱庢搷浣�', '鎮ㄧ‘璁ゅ叏閲忓悓姝ュ唴閮ㄤ汉鍛樹俊鎭悧锛�')
.then(() => {
this.loading = true
@@ -324,7 +348,7 @@
})
.catch(() => { })
},
- async updateHead(row, type) {
+ async updateHead (row, type) {
this.$dialog.actionConfirm('鎮ㄧ‘璁よ繘琛屽綋鍓嶆搷浣滃悧锛�', '閮ㄩ棬涓荤璁剧疆鎿嶄綔鎻愮ず')
.then(() => {
this.heading = true
@@ -342,7 +366,7 @@
.catch(() => { })
})
},
- changeWorkStatus(e, row) {
+ changeWorkStatus (e, row) {
this.working = true
updateWorkStatus({ id: row.id, workStatus: e })
.then(res => {
@@ -357,7 +381,7 @@
})
.catch(() => { })
},
- changeCanvisit(e, row) {
+ changeCanvisit (e, row) {
this.canvisiting = true
updateCanVisit({ id: row.id, canVisit: e })
.then(res => {
@@ -372,7 +396,7 @@
})
.catch(() => { })
},
- callback(row) {
+ callback (row) {
this.searchForm.erpOrgId = row.erpId
this.searchForm.companyId = row.id
this.search()
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PositionCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PositionCloudController.java
new file mode 100644
index 0000000..b0a1e9c
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PositionCloudController.java
@@ -0,0 +1,99 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Position;
+import com.doumee.service.business.PositionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Api(tags = "宀椾綅淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/position")
+public class PositionCloudController extends BaseController {
+
+ @Autowired
+ private PositionService positionService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @CloudRequiredPermission("business:position:create")
+ public ApiResponse create(@RequestBody Position position,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ position.setLoginUserInfo(this.getLoginUser(token));
+ return ApiResponse.success(positionService.create(position));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @CloudRequiredPermission("business:position:delete")
+ public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ positionService.deleteById(id,this.getLoginUser(token));
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @CloudRequiredPermission("business:position:delete")
+ public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ String [] idArray = ids.split(",");
+ List<Integer> idList = new ArrayList<>();
+ for (String id : idArray ){
+ idList.add(Integer.valueOf(id));
+ }
+ positionService.deleteByIdInBatch(idList,this.getLoginUser(token));
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @CloudRequiredPermission("business:position:update")
+ public ApiResponse updateById(@RequestBody Position position,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ position.setLoginUserInfo(this.getLoginUser(token));
+ positionService.updateById(position);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @CloudRequiredPermission("business:position:query")
+ public ApiResponse<PageData<Position>> findPage (@RequestBody PageWrap<Position> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ return ApiResponse.success(positionService.findPage(pageWrap));
+ }
+ @ApiOperation("鏌ヨ鍏ㄩ儴")
+ @PostMapping("/list")
+ @CloudRequiredPermission("business:position:query")
+ public ApiResponse<List<Position>> findList (@RequestBody Position pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ return ApiResponse.success(positionService.findList(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @CloudRequiredPermission("business:position:exportExcel")
+ public void exportExcel (@RequestBody PageWrap<Position> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ ExcelExporter.build(Position.class).export(positionService.findPage(pageWrap).getRecords(), "璁垮浜嬬敱淇℃伅琛�", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @CloudRequiredPermission("business:position:query")
+ public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+ return ApiResponse.success(positionService.findById(id));
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PositionMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PositionMapper.java
new file mode 100644
index 0000000..a46fd1b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PositionMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Position;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface PositionMapper extends BaseMapper<Position> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index a62910f..1cc108c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -160,6 +160,12 @@
@ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 0鍦ㄨ亴 1绂昏亴", example = "1")
@ExcelColumn(name="鍦ㄨ亴鐘舵�� 0鍦ㄨ亴 1绂昏亴")
private Integer workStatus;
+ @ApiModelProperty(value = "鏄惁鍏氬憳 0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍏氬憳 0鍚� 1鏄�")
+ private Integer isDangyuan;
+ @ApiModelProperty(value = "宀椾綅缂栫爜锛屽叧鑱攑ositionbiao", example = "1")
+ @ExcelColumn(name="宀椾綅缂栫爜")
+ private Integer positionId;
@ApiModelProperty(value = "ERP鏍囪瘑", example = "1")
@ExcelColumn(name="ERP鏍囪瘑")
private String erpId;
@@ -167,6 +173,10 @@
@ApiModelProperty(value = "ERP鍚屾鏃堕棿")
@ExcelColumn(name="ERP鍚屾鏃堕棿")
private Date erpDate;
+ @ApiModelProperty(value = "鍏ヨ亴濡傛湡")
+ @ExcelColumn(name="鍏ヨ亴濡傛湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date jobDate;
@ApiModelProperty(value = "ERP鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�", example = "1")
@ExcelColumn(name="ERP鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
@@ -289,6 +299,9 @@
@ApiModelProperty(value = "鏈�鍚庢搷浣滃唴瀹�")
@TableField(exist = false)
private String optRemark;
+ @ApiModelProperty(value = "宀椾綅鍚嶇О")
+ @TableField(exist = false)
+ private String positionName;
@ApiModelProperty(value = "鍩硅寮�濮嬫椂闂�")
@TableField(exist = false)
private Date trainStartTime;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Position.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Position.java
new file mode 100644
index 0000000..f10b48d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Position.java
@@ -0,0 +1,84 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("宀椾綅淇℃伅琛�")
+@TableName("`position`")
+public class Position extends LoginUserModel {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "鍚嶇О")
+ @ExcelColumn(name="鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤")
+ @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+ private Integer status;
+
+ @ApiModelProperty(value = "鎺掑簭鐮�")
+ @ExcelColumn(name="鎺掑簭鐮�")
+ private Integer sortnum;
+
+ @ApiModelProperty(value = "鍥炬爣")
+ @ExcelColumn(name="鍥炬爣")
+ private String imgurl;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍛樺伐宀椾綅")
+ @ExcelColumn(name="绫诲瀷0鍛樺伐宀椾綅")
+ private Integer type;
+
+ @ApiModelProperty(value = "鐖剁骇缂栫爜锛堣嚜鍏宠仈锛�")
+ @ExcelColumn(name="鐖剁骇缂栫爜锛堣嚜鍏宠仈锛�")
+ private Integer parentId;
+
+ @ApiModelProperty(value = "瀛愰泦鍒嗙被")
+ @TableField(exist = false)
+ private List<Position> childList;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PositionService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PositionService.java
new file mode 100644
index 0000000..732796c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PositionService.java
@@ -0,0 +1,99 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Position;
+
+import java.util.List;
+
+/**
+ * 璁垮浜嬬敱淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+public interface PositionService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param position 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Position position);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id, LoginUserInfo userInfo);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param position 瀹炰綋瀵硅薄
+ */
+ void delete(Position position, LoginUserInfo userInfo);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids, LoginUserInfo userInfo);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param position 瀹炰綋瀵硅薄
+ */
+ void updateById(Position position);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param positions 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Position> positions);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Position
+ */
+ Position findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param position 瀹炰綋瀵硅薄
+ * @return Position
+ */
+ Position findOne(Position position);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param position 瀹炰綋瀵硅薄
+ * @return List<Position>
+ */
+ List<Position> findList(Position position);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Position>
+ */
+ PageData<Position> findPage(PageWrap<Position> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param position 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Position position);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 0d64ceb..2418a69 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -327,7 +327,7 @@
if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢佃瘽鍙风爜鏍煎紡鏈夎");
}
- if (StringUtils.isBlank(member.getIdcardNo())||!IdcardUtil.isValidCard(member.getIdcardNo())){
+ if (StringUtils.isNotBlank(member.getIdcardNo()) && !IdcardUtil.isValidCard(member.getIdcardNo())){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"韬唤璇佸彿鏍煎紡鏈夎");
}
if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
@@ -396,7 +396,8 @@
}
if (StringUtils.isNotBlank(member.getIdcardNoNew())){
String encrptNo = (DESUtil.encrypt(Constants.EDS_PWD, member.getIdcardNoNew()));//韬唤璇佸彿鍔犲瘑
- if(!isDebug && !StringUtils.equals(model.getIdcardNo(),encrptNo)&& !IdcardUtil.isValidCard(member.getIdcardNoNew())){
+ if(!isDebug && StringUtils.isNotBlank(member.getIdcardNoNew()) &&
+ !StringUtils.equals(model.getIdcardNo(),encrptNo)&& !IdcardUtil.isValidCard(member.getIdcardNoNew())){
//濡傛灉鍙戠敓鏀瑰彉锛屽苟涓斾笉鍚堟硶锛屾彁绀哄紓甯�
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"淇敼鐨勬柊韬唤璇佸彿鏍煎紡鏈夎");
}
@@ -1109,6 +1110,8 @@
queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
queryWrapper.selectAll(Member.class)
.selectAs(Company::getName,Member::getCompanyName) ;
+ queryWrapper.selectAs(Position::getName,Member::getPositionName);
+ queryWrapper.leftJoin(Position.class,Position::getId,Member::getPositionId);
if(StringUtils.isNotBlank(member.getName())){
queryWrapper.like(Member::getName,member.getName());
}
@@ -1140,6 +1143,8 @@
.eq(Member::getType,Constants.TWO)
.exists("select b.id from car_driver b where b.isdeleted=0 and b.member_id=t.id");
+ queryWrapper.selectAs(Position::getName,Member::getPositionName);
+ queryWrapper.leftJoin(Position.class,Position::getId,Member::getPositionId);
if(null != member.getType()) {
queryWrapper.eq(Member::getType,member.getType());
}
@@ -1353,6 +1358,8 @@
queryWrapper.select(" ( select count(1) from member_card mc where mc.isdeleted = 0 and mc.member_id = t.id ) as memberCardCount ");
queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Member::getEditor);
queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+ queryWrapper.selectAs(Position::getName,Member::getPositionName);
+ queryWrapper.leftJoin(Position.class,Position::getId,Member::getPositionId);
queryWrapper.eq(Member::getType,pageWrap.getModel().getType());
// queryWrapper.eq(Objects.nonNull(model.getCompanyId()),Member::getCompanyId,model.getCompanyId())
queryWrapper.in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,
@@ -1451,6 +1458,8 @@
queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
queryWrapper.selectAll(Member.class)
.selectAs(Company::getName,Member::getCompanyName)
+ .selectAs(Position::getName,Member::getPositionName)
+ .leftJoin(Position.class,Position::getId,Member::getPositionId)
.selectAs(Member::getLastVisitDate,Member::getLastVisitDate)
.select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 and v.status in (7,8) ) as visitTimes");
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Member::getName,pageWrap.getModel().getName())
@@ -1500,6 +1509,8 @@
.eq(Objects.nonNull(pageWrap.getModel().getCode()),Member::getCode,pageWrap.getModel().getCode())
.orderByDesc(Member::getCreateDate);
+ queryWrapper.selectAs(Position::getName,Member::getPositionName);
+ queryWrapper.leftJoin(Position.class,Position::getId,Member::getPositionId);
IPage<Member> memberIPage = memberJoinMapper.selectJoinPage(page, Member.class,queryWrapper);
return PageData.from(memberIPage);
@@ -1696,6 +1707,8 @@
.selectAll(Member.class)
.selectAs(Company::getName,Member::getCompanyName)
.leftJoin(Company.class,Company::getId,Member::getCompanyId)
+ .selectAs(Position::getName,Member::getPositionName)
+ .leftJoin(Position.class,Position::getId,Member::getPositionId)
.eq(StringUtils.isNotBlank(checkVisitedDTO.getMobile()),Member::getPhone,checkVisitedDTO.getMobile())
.eq(StringUtils.isNotBlank(checkVisitedDTO.getName()),Member::getName,checkVisitedDTO.getName())
.eq(Member::getIsdeleted,Constants.ZERO)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PositionServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PositionServiceImpl.java
new file mode 100644
index 0000000..4b518a6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PositionServiceImpl.java
@@ -0,0 +1,146 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.PositionMapper;
+import com.doumee.dao.business.model.Position;
+import com.doumee.service.business.PositionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁垮浜嬬敱淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Service
+public class PositionServiceImpl implements PositionService {
+
+ @Autowired
+ private PositionMapper positionMapper;
+
+ @Override
+ public Integer create(Position model) {
+ model.setCreator(model.getLoginUserInfo().getId());
+ model.setEditor(model.getCreator());
+ model.setIsdeleted(Constants.ZERO);
+ model.setEditDate(new Date());
+ model.setCreateDate(model.getEditDate());
+ positionMapper.insert(model);
+ return model.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id, LoginUserInfo userInfo) {
+ Position update = new Position();
+ update.setEditor(userInfo.getId());
+ update.setEditDate(new Date());
+ update.setIsdeleted(Constants.ONE);
+ update.setId(id);
+ positionMapper.updateById(update);
+
+ }
+
+ @Override
+ public void delete(Position position, LoginUserInfo userInfo) {
+ UpdateWrapper<Position> deleteWrapper = new UpdateWrapper<>(position);
+ positionMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo userInfo) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ for(Integer id :ids){
+ deleteById(id,userInfo);
+ }
+ }
+
+ @Override
+ public void updateById(Position model) {
+ model.setEditor(model.getLoginUserInfo().getId());
+ model.setEditDate(new Date());
+ positionMapper.updateById(model);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Position> positions) {
+ if (CollectionUtils.isEmpty(positions)) {
+ return;
+ }
+ for (Position position: positions) {
+ this.updateById(position);
+ }
+ }
+
+ @Override
+ public Position findById(Integer id) {
+ return positionMapper.selectById(id);
+ }
+
+ @Override
+ public Position findOne(Position position) {
+ QueryWrapper<Position> wrapper = new QueryWrapper<>(position);
+ return positionMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Position> findList(Position position) {
+ QueryWrapper<Position> wrapper = new QueryWrapper<>(position);
+ wrapper.eq("isdeleted",Constants.ZERO);
+ return positionMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Position> findPage(PageWrap<Position> pageWrap) {
+ IPage<Position> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Position> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setIsdeleted(Constants.ZERO);
+ queryWrapper.lambda()
+ .eq(pageWrap.getModel().getId() != null, Position::getId, pageWrap.getModel().getId())
+ .eq(pageWrap.getModel().getCreator() != null, Position::getCreator, pageWrap.getModel().getCreator())
+ .ge(pageWrap.getModel().getCreateDate() != null, Position::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
+ .le(pageWrap.getModel().getCreateDate() != null, Position::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()))
+ .eq(pageWrap.getModel().getEditor() != null, Position::getEditor, pageWrap.getModel().getEditor())
+ .ge(pageWrap.getModel().getEditDate() != null, Position::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()))
+ .le(pageWrap.getModel().getEditDate() != null, Position::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
+ .eq(pageWrap.getModel().getIsdeleted() != null, Position::getIsdeleted, pageWrap.getModel().getIsdeleted())
+ .eq(pageWrap.getModel().getRemark() != null, Position::getRemark, pageWrap.getModel().getRemark())
+ .like(pageWrap.getModel().getName() != null, Position::getName, pageWrap.getModel().getName())
+ .eq(pageWrap.getModel().getSortnum() != null, Position::getSortnum, pageWrap.getModel().getSortnum())
+ .eq(pageWrap.getModel().getType() != null, Position::getType, pageWrap.getModel().getType())
+ .orderByAsc(Position::getSortnum)
+ ;
+ for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(positionMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(Position position) {
+ QueryWrapper<Position> wrapper = new QueryWrapper<>(position);
+ return positionMapper.selectCount(wrapper);
+ }
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
index 5985abd..e0b6ba6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -199,27 +199,31 @@
.eq(Device::getDoorId,request.getSrcIndex())
.eq(Device::getIsdeleted,Constants.ZERO)
.last("limit 1" ));
- if(d!=null && !(Constants.equalsInteger(d.getIsEntrance(),Constants.ONE) && Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE)){
- //濡傛灉鏄繘闂紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
- inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1);//鍏ュ満浜烘
- }else{
- inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1);//绂诲満浜烘
+ if(d!=null && !Constants.equalsInteger(d.getIsEntrance(),Constants.ONE)){
+ if(Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE){
+ //濡傛灉鏄繘闂紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
+ inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1);//鍏ュ満浜烘
+ }else{
+ inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1);//绂诲満浜烘
+ }
}
if(member !=null){
- delRetentionLis.add(member.getId());
- if(d!=null && !(Constants.equalsInteger(d.getIsEntrance(),Constants.ONE) && Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE)){
- //濡傛灉鏄繘闂紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
- retentionList.add(getRetentionModelByRequest(member,request));
- if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
- inoutDayCount.setInSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getInSelfMemberNum())+1);//鍐呴儴浜哄憳鍏ュ満浜烘
+ if(d!=null && !Constants.equalsInteger(d.getIsEntrance(),Constants.ONE)){
+ delRetentionLis.add(member.getId());
+ if( Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE){
+ //濡傛灉鏄繘闂紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
+ retentionList.add(getRetentionModelByRequest(member,request));
+ if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
+ inoutDayCount.setInSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getInSelfMemberNum())+1);//鍐呴儴浜哄憳鍏ュ満浜烘
+ }else{
+ inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1);//鐩稿叧鏂瑰叆鍦轰汉娆�
+ }
}else{
- inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1);//鐩稿叧鏂瑰叆鍦轰汉娆�
- }
- }else{
- if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
- inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1);//鍐呴儴浜哄憳鍑哄満浜烘
- }else{
- inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//鐩稿叧鏂瑰嚭鍦轰汉娆�
+ if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
+ inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1);//鍐呴儴浜哄憳鍑哄満浜烘
+ }else{
+ inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//鐩稿叧鏂瑰嚭鍦轰汉娆�
+ }
}
}
}
--
Gitblit v1.9.3