diff --git a/collect_information/.env.development b/collect_information/.env.development index edad538..1f4b2bd 100644 --- a/collect_information/.env.development +++ b/collect_information/.env.development @@ -1,3 +1,10 @@ # 配置文档参考 https://taro-docs.jd.com/docs/next/env-mode-config TARO_APP_ID="wx0acd1c4fcf94bdd3" +# TARO_APP_BASE_API="http://172.10.10.93:8765" TARO_APP_BASE_API="http://172.10.10.93:8765" + + + +# minio +TARO_APP_MINIO_URL=http://118.253.177.137:9000 +TARO_APP_MINIO_BUCKET=police-security-dev diff --git a/collect_information/.env.production b/collect_information/.env.production index be6f45e..d614d69 100644 --- a/collect_information/.env.production +++ b/collect_information/.env.production @@ -1 +1,6 @@ -# TARO_APP_ID="生产环境下的小程序appid" \ No newline at end of file +# TARO_APP_ID="wx0acd1c4fcf94bdd3" +TARO_APP_BASE_API="https://www.hnjinglian.cn:5678" + +# minio +TARO_APP_MINIO_URL=https://www.hnjinglian.cn:9002 +TARO_APP_MINIO_BUCKET=police-security diff --git a/collect_information/.env.test b/collect_information/.env.test deleted file mode 100644 index 0215b61..0000000 --- a/collect_information/.env.test +++ /dev/null @@ -1 +0,0 @@ -# TARO_APP_ID="测试环境下的小程序appid" \ No newline at end of file diff --git a/collect_information/project.config.json b/collect_information/project.config.json index 2d18dde..780ca20 100644 --- a/collect_information/project.config.json +++ b/collect_information/project.config.json @@ -5,11 +5,14 @@ "appid": "touristappid", "setting": { "urlCheck": false, - "es6": false, + "es6": true, "enhance": false, + "minified": true, + "minifyWXSS": true, + "minifyWXML": true, "compileHotReLoad": false, - "postcss": false, - "minified": false + "postcss": true, + "minified": true }, "compileType": "miniprogram" } diff --git a/collect_information/src/app.config.ts b/collect_information/src/app.config.ts index 3690c73..20ebb39 100644 --- a/collect_information/src/app.config.ts +++ b/collect_information/src/app.config.ts @@ -1,4 +1,4 @@ -import {MINI_PROGRAM_USER_CONFIG} from "@/config"; +import { MINI_PROGRAM_USER_CONFIG } from "@/config"; const tabBarItems = Object.values(MINI_PROGRAM_USER_CONFIG).map(item => item.tabBarList).flat() @@ -17,14 +17,24 @@ export default defineAppConfig({ 'myProject/projectDetails/projectDetails', 'securityUserForm/securityUserForm', ] - }, { + }, + { root: "subPages/police", pages: [ + 'dailyInspection/dailyInspection', 'myEnterprisesUnit/myEnterprisesUnit', 'myEnterprisesUnit/projectDetails/projectDetails' ] - } + }, + { + root: "subPages/select", + pages: [ + 'dailyLife/dailyLife', + 'signature/signature' + ] + }, ], + window: { backgroundTextStyle: 'light', navigationBarBackgroundColor: '#4e87ff', diff --git a/collect_information/src/app.ts b/collect_information/src/app.ts index 28f74dd..b9729bb 100644 --- a/collect_information/src/app.ts +++ b/collect_information/src/app.ts @@ -24,6 +24,40 @@ const App = createApp({ }) } }, + onShow(){ + const updateManager = Taro.getUpdateManager() + updateManager.onCheckForUpdate(function(res) { + // 请求完新版本信息的回调 + if (res.hasUpdate) { + // 新版本已经下载好,调用 applyUpdate 应用新版本并重启 + updateManager.applyUpdate() + } + }) + updateManager.onUpdateReady(function() { + // 新版本已经准备好,可以提示用户更新 + Taro.showModal({ + title: '更新提示', + content: '发现新版本,是否重启应用?', + success: function (res) { + if (res.confirm) { + // 新的版本已经准备好,调用 applyUpdate 应用新版本 + updateManager.applyUpdate() + } + } + }).then(res=>{ + console.log(res) + }) + }) + updateManager.onUpdateFailed(function() { + // 新版本下载失败,可进行一些提示用户的操作 + Taro.showModal({ + title: '已有新版本', + content: '请删除当前小程序,重新从搜索界面打开获取最新版本', + }).then(res => { + console.log(res) + }) + }) + } // 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖 }) diff --git a/collect_information/src/assets/images/01.png b/collect_information/src/assets/images/01.png deleted file mode 100644 index b66fa47..0000000 Binary files a/collect_information/src/assets/images/01.png and /dev/null differ diff --git a/collect_information/src/assets/images/banner.png b/collect_information/src/assets/images/banner.png new file mode 100644 index 0000000..f29618c Binary files /dev/null and b/collect_information/src/assets/images/banner.png differ diff --git a/collect_information/src/assets/images/popuptiobg.png b/collect_information/src/assets/images/popuptiobg.png new file mode 100644 index 0000000..8650666 Binary files /dev/null and b/collect_information/src/assets/images/popuptiobg.png differ diff --git a/collect_information/src/assets/images/project.png b/collect_information/src/assets/images/project.png index 8de6ed4..9aef305 100644 Binary files a/collect_information/src/assets/images/project.png and b/collect_information/src/assets/images/project.png differ diff --git a/collect_information/src/assets/images/rotate.png b/collect_information/src/assets/images/rotate.png new file mode 100644 index 0000000..1f52f3e Binary files /dev/null and b/collect_information/src/assets/images/rotate.png differ diff --git a/collect_information/src/assets/images/rotate1.png b/collect_information/src/assets/images/rotate1.png new file mode 100644 index 0000000..58adfbb Binary files /dev/null and b/collect_information/src/assets/images/rotate1.png differ diff --git a/collect_information/src/assets/images/回单.jpg b/collect_information/src/assets/images/回单.jpg new file mode 100644 index 0000000..20479b9 Binary files /dev/null and b/collect_information/src/assets/images/回单.jpg differ diff --git a/collect_information/src/assets/images/工单.jpg b/collect_information/src/assets/images/工单.jpg new file mode 100644 index 0000000..da046c5 Binary files /dev/null and b/collect_information/src/assets/images/工单.jpg differ diff --git a/collect_information/src/assets/images/排名.jpg b/collect_information/src/assets/images/排名.jpg new file mode 100644 index 0000000..96e4510 Binary files /dev/null and b/collect_information/src/assets/images/排名.jpg differ diff --git a/collect_information/src/assets/images/旋转.png b/collect_information/src/assets/images/旋转.png new file mode 100644 index 0000000..d3f7488 Binary files /dev/null and b/collect_information/src/assets/images/旋转.png differ diff --git a/collect_information/src/assets/images/法制宣传.jpg b/collect_information/src/assets/images/法制宣传.jpg new file mode 100644 index 0000000..21d0e0d Binary files /dev/null and b/collect_information/src/assets/images/法制宣传.jpg differ diff --git a/collect_information/src/assets/images/考核监督.jpg b/collect_information/src/assets/images/考核监督.jpg new file mode 100644 index 0000000..0f9f7cc Binary files /dev/null and b/collect_information/src/assets/images/考核监督.jpg differ diff --git a/collect_information/src/assets/images/警保风采.jpg b/collect_information/src/assets/images/警保风采.jpg new file mode 100644 index 0000000..8de01b4 Binary files /dev/null and b/collect_information/src/assets/images/警保风采.jpg differ diff --git a/collect_information/src/assets/logo/avatar1.png b/collect_information/src/assets/logo/avatar1.png new file mode 100644 index 0000000..09cb7a7 Binary files /dev/null and b/collect_information/src/assets/logo/avatar1.png differ diff --git a/collect_information/src/config/index.ts b/collect_information/src/config/index.ts index f9bd5c6..ba8500d 100644 --- a/collect_information/src/config/index.ts +++ b/collect_information/src/config/index.ts @@ -20,7 +20,7 @@ export const MINI_PROGRAM_USER_CONFIG: Record - + + + + 单位数量 + {{ numberStatistics.enterprisesUnitCount }} + + + 服务项目 + + {{ numberStatistics.serviceProjectCount }} + + + + 有保安证人员 + {{ numberStatistics.securityUserCount }} + + + 无保安证人员 + {{ numberStatistics.noCardSecurityUserCount }} + + 请选择 - + - {{ item.name }} + {{ item.name }} + diff --git a/collect_information/src/pages/police/index/index.vue.bak b/collect_information/src/pages/police/index/index.vue.bak new file mode 100644 index 0000000..944cb22 --- /dev/null +++ b/collect_information/src/pages/police/index/index.vue.bak @@ -0,0 +1,108 @@ + + + + + + diff --git a/collect_information/src/pages/police/mine/index.scss b/collect_information/src/pages/police/mine/index.scss index e69de29..22a7712 100644 --- a/collect_information/src/pages/police/mine/index.scss +++ b/collect_information/src/pages/police/mine/index.scss @@ -0,0 +1,71 @@ +.public { + height: 100vh; + background-color: #fff; +} +.public-container { + height: 320rpx; + display: flex; + align-items: center; + background-image: url('../../../assets/images/banner.png'); + background-repeat: no-repeat; + background-position: right; + overflow: hidden; + padding: 45rpx; + box-sizing: border-box; + .contacts { + height: 75rpx; + width: 75rpx; + border-radius: 50%; + border: solid 1px gray; + .image { + width: 100%; + height: 100%; + } + } + .tips-text { + display: flex; + font-size: 28rpx; + color: #fff; + line-height: 50rpx; + margin-left: 20rpx; + flex-direction: column; + justify-content: space-evenly; + } +} +.exit { + height: 100rpx; + line-height: 40px; + border-bottom: solid 0.5px #ebebf7; + box-sizing: border-box; + display: flex; + justify-content: space-between; + align-items: center; + color: #7d7d7d; + .exitItem { + display: flex; + align-items: center; + margin-left: 30rpx; + } + .exitItemIndex { + height: 40rpx; + width: 40rpx; + border-radius: 50%; + display: block; + line-height: 48rpx; + image { + width: 100%; + height: 100%; + } + } + .microscope { + width: 8px; + height: 8px; + display: inline-block; + border: solid 2px #ccc; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-bottom: white; + border-left: white; + } +} + diff --git a/collect_information/src/pages/police/mine/index.vue b/collect_information/src/pages/police/mine/index.vue index d00e9e3..2f180fa 100644 --- a/collect_information/src/pages/police/mine/index.vue +++ b/collect_information/src/pages/police/mine/index.vue @@ -1,9 +1,80 @@ diff --git a/collect_information/src/pages/projectManager/index/index.scss b/collect_information/src/pages/projectManager/index/index.scss index b802829..6ff67f6 100644 --- a/collect_information/src/pages/projectManager/index/index.scss +++ b/collect_information/src/pages/projectManager/index/index.scss @@ -1,48 +1,76 @@ +.nameTitle { + position: absolute; + top: 19%; + left: 55px; + height: 125rpx; + background-color: #fff; + width: 650rpx; + border-radius: 12rpx; + box-shadow: 0px 10px 10px -4px #e3e3e3; + display: flex; + justify-content: space-between; + align-items: center; + + .itemSchool { + border-right: solid 1.5rpx #dadada; + display: flex; + flex-direction: column; + align-items: center; + width: 25%; + font-size: 24px + } + + .itemSchool text:nth-child(1) { + margin-bottom: 10rpx; + color: #898a8a; + margin-left: -8px; + } +} +.nameTitle .itemSchool:nth-child(4) { + border-right: none; +} .swiperDemoItem { color: #3886d0; display: flex; padding: 20px 0 0 50px; overflow: hidden; height: 70rpx; + margin-top: 70px; .swiperDemoIndex { width: 15px; height: 45px; background-image: linear-gradient(to bottom, #5d9cf9, #317ad9); - //background: rgb(); border-radius: 20px; margin-right: 15px; } } - -.subModule { - display: flex; - align-items: center; - flex-wrap: wrap; - margin-right: -3px; - margin-left: -1px; - - .subModuleItem { - width: 33%; - height: 180rpx; +.Module { + background-color: #fff; + overflow: hidden; + .subModule { display: flex; - flex-direction: column; align-items: center; - justify-content: center; - padding-bottom: 10rpx; - border: 1px solid #ccc; - border-left: 0; - margin-top: -1px; - - .subModuleIndex { - width: 65rpx; - height: 65rpx; - - image { - width: 100%; - height: 100%; + flex-wrap: wrap; + .subModuleItem { + width: 246rpx; + height: 140rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-bottom: 10rpx; + .subModuleIndex { + width: 45rpx; + height: 45rpx; + image { + width: 100%; + height: 100%; + } } } } + } + diff --git a/collect_information/src/pages/projectManager/index/index.vue b/collect_information/src/pages/projectManager/index/index.vue index 7455202..e4c007c 100644 --- a/collect_information/src/pages/projectManager/index/index.vue +++ b/collect_information/src/pages/projectManager/index/index.vue @@ -3,56 +3,101 @@ - + + 1123 + + + 单位数量 + 51 + + + 服务项目 + 13123 + + + 有保安证人员 + 1000 + + + 无保安证人员 + 140 + + 请选择 - + - {{ item.name }} + {{ item.name }} + + diff --git a/collect_information/src/pages/projectManager/mine/index.scss b/collect_information/src/pages/projectManager/mine/index.scss index e69de29..321b2e7 100644 --- a/collect_information/src/pages/projectManager/mine/index.scss +++ b/collect_information/src/pages/projectManager/mine/index.scss @@ -0,0 +1,71 @@ +.mine { + height: 100vh; + background-color: #fff; +} +.mine-container { + height: 320rpx; + display: flex; + align-items: center; + background-image: url('../../../assets/images/banner.png'); + background-repeat: no-repeat; + background-position: right; + overflow: hidden; + padding: 45rpx; + box-sizing: border-box; + .contacts { + height: 75rpx; + width: 75rpx; + border-radius: 50%; + border: solid 1px gray; + .image { + width: 100%; + height: 100%; + } + } + .tips-text { + display: flex; + font-size: 28rpx; + color: #fff; + line-height: 50rpx; + margin-left: 20rpx; + flex-direction: column; + justify-content: space-evenly; + } +} +.exit { + height: 100rpx; + line-height: 40px; + border-bottom: solid 0.5px #ebebf7; + box-sizing: border-box; + display: flex; + justify-content: space-between; + align-items: center; + color: #7d7d7d; + .exitItem { + display: flex; + align-items: center; + margin-left: 30rpx; + } + .exitItemIndex { + height: 40rpx; + width: 40rpx; + border-radius: 50%; + display: block; + line-height: 48rpx; + image { + width: 100%; + height: 100%; + } + } + .microscope { + width: 8px; + height: 8px; + display: inline-block; + border: solid 2px #ccc; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-bottom: white; + border-left: white; + } +} + diff --git a/collect_information/src/pages/projectManager/mine/index.vue b/collect_information/src/pages/projectManager/mine/index.vue index 55e8097..f73c3d6 100644 --- a/collect_information/src/pages/projectManager/mine/index.vue +++ b/collect_information/src/pages/projectManager/mine/index.vue @@ -1,9 +1,80 @@ diff --git a/collect_information/src/pages/register/register.vue b/collect_information/src/pages/register/register.vue index 0368d69..288db6e 100644 --- a/collect_information/src/pages/register/register.vue +++ b/collect_information/src/pages/register/register.vue @@ -33,13 +33,7 @@ - - - + {{ streetCommunitySmallCommunityLabel || "请选择行政区划" }} @@ -55,8 +49,9 @@ v-model:visible="visible" v-model="TreeValue" title="选择地址" - :options="TreeData" @change="change" + lazy + :lazy-load="lazyLoad" text-key="label" > @@ -95,18 +90,28 @@ const formData = ref({ }); const show = ref(false) const visible = ref(false) + const TreeValue = ref[]>([]) -const TreeData = ref(['']); +// const TreeData = ref([]); + const streetCommunitySmallCommunityLabel = ref(""); -const getAdministrativeDivisionTree = async () => { - const resp = await api.get[]>('/common/administrativeDivisionTree') - TreeData.value = resp.data as any - console.log(resp.data) +const getAdministrativeDivisionTree = async (value:string) => { + const resp = await api.get[]>('/common/administrativeDivisionByParentCode',{parentCode:value}) + return resp.data as any } -const change = (value: string, pathNodes: Record[]) => { + + +const change = async (value: string, pathNodes: Record[]) => { streetCommunitySmallCommunityLabel.value = pathNodes.map((e) => e.text).join(","); TreeValue.value = value as any } +const lazyLoad = async (node:any, resolve:any)=>{ + if (node.root) { + await resolve(getAdministrativeDivisionTree ('0')) + } else { + await resolve(getAdministrativeDivisionTree (node.value)) + } +} const columns = ref([]) const unitsList = async () => { if (streetCommunitySmallCommunityLabel.value !== '') { @@ -126,7 +131,7 @@ const unitsList = async () => { const selectedLabel = ref('') -const confirm = ({selectedOptions, selectedValue}) => { +const confirm = ({selectedOptions}) => { Object.keys(selectedOptions).forEach((e) => { selectedLabel.value = selectedOptions[e].label formData.value.unitId = selectedOptions[e].value @@ -136,7 +141,7 @@ const confirm = ({selectedOptions, selectedValue}) => { } // 身份 -watch(() => formData.value.identity, (value) => { +watch(() => formData.value.identity, () => { formData.value.unitId = '' selectedLabel.value = '' }) @@ -155,7 +160,7 @@ const register = async () => { identity: formData.value.identity, unitId: formData.value.unitId } - const resp = await api.post('/miniProgramUser/register', miniProgramUserRegisterParams, {loading: true}) + const resp = await api.post('/mp/user/register', miniProgramUserRegisterParams, {loading: true}) Taro.showToast({ title: "注册成功", icon: 'success', @@ -165,7 +170,7 @@ const register = async () => { await Taro.setStorage({ key: "token", data: resp.data, - success(res) { + success() { Taro.navigateTo({ url: '/pages/login/login' }) @@ -209,10 +214,10 @@ const onChooseAvatar = (e) => { formData.value.avatar = avatarUrl } // 获取昵称 -const getNickname = (e) => { - formData.value.name = e.detail.value - console.log(formData.value.name) -} +// const getNickname = (e) => { +// formData.value.name = e.detail.value +// console.log(formData.value.name) +// } onMounted(async () => { await getAdministrativeDivisionTree() diff --git a/collect_information/src/picker-search/picker-search.json.ts b/collect_information/src/picker-search/picker-search.json.ts new file mode 100644 index 0000000..29210de --- /dev/null +++ b/collect_information/src/picker-search/picker-search.json.ts @@ -0,0 +1,3 @@ +export default { + "component": true +} diff --git a/collect_information/src/picker-search/picker-search.scss b/collect_information/src/picker-search/picker-search.scss new file mode 100644 index 0000000..f5ee090 --- /dev/null +++ b/collect_information/src/picker-search/picker-search.scss @@ -0,0 +1,85 @@ +.uiwu-flex-align { + align-items: center; +} + +.uiwu-flex { + display: flex; +} + +.uiwu-flex-space { + align-items: center; + justify-content: space-between; +} + +.uiwu-picker-search { + position: absolute; + height: 1031rpx; + left: 0; + right: 0; + bottom: 0; + background: url('../assets/images/popuptiobg.png') no-repeat 0 0 #fff; + background-size: 100% auto; + border-radius: 30rpx 30rpx 0 0; + + &-btn { + padding: 20rpx 30rpx 40rpx; + + text { + &:nth-child(1) { + color: #999; + } + + &:nth-child(2) { + color: #00bbff; + } + } + } + + &-input { + box-sizing: border-box; + height: 80rpx; + background: rgba(#f3f6fd, 0.6); + border-radius: 16rpx; + margin: 0 30rpx; + padding-left: 24rpx; + padding-right: 10rpx; + + input { + font-size: 28rpx; + width: 100%; + } + } + + .scroll-view { + width: 100%; + height: calc(100% - 212rpx); + margin-top: 30rpx; + } + + .radio-group { + padding: 0 50rpx 30rpx; + + &-item { + margin-bottom: 20rpx; + + text { + font-size: 28rpx; + color: #666; + } + + radio { + transform: scale(0.8); + } + } + } +} + +.searchButton { + height: 60rpx; + width: 200rpx; + border-radius: 10rpx; + line-height: 60rpx; + text-align: center; + color: #fff; + background-color: #00bbff; +} diff --git a/collect_information/src/picker-search/picker-search.vue b/collect_information/src/picker-search/picker-search.vue new file mode 100644 index 0000000..d23edcb --- /dev/null +++ b/collect_information/src/picker-search/picker-search.vue @@ -0,0 +1,90 @@ + + + diff --git a/collect_information/src/request/index.ts b/collect_information/src/request/index.ts index 8c22ad3..dd5e7ca 100644 --- a/collect_information/src/request/index.ts +++ b/collect_information/src/request/index.ts @@ -1,6 +1,6 @@ import Taro from "@tarojs/taro"; -import {ApiOptions} from "@/types/request"; -import {useUserStore} from "@/store/userStore"; +import { ApiOptions } from "@/types/request"; +import { useUserStore } from "@/store/userStore"; /** @@ -10,7 +10,7 @@ import {useUserStore} from "@/store/userStore"; const requestInterceptor = (chain: Taro.Chain) => { const requestParams = chain.requestParams const tokenInfo = useUserStore().getTokenInfo() - const {header} = requestParams; + const { header } = requestParams; const customHeader: Record = {} //添加token tokenInfo && (customHeader[tokenInfo.name] = tokenInfo.value); @@ -35,6 +35,9 @@ class CustomRequest { Taro.showLoading({ title: '请求中...', }).then() + // Taro.showLoading({ + // title: '请求中...', + // }) } Taro.request, object>({ url: this.BASE_API + url, @@ -77,7 +80,7 @@ class CustomRequest { }) } - get(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + get(url: string, params?: object, options: ApiOptions = { loading: false }): Promise> { options.header = { ...options.header, "content-type": 'application/x-www-form-urlencoded' @@ -85,11 +88,11 @@ class CustomRequest { return this.request(url, "GET", options, params) } - post(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + post(url: string, params?: object, options: ApiOptions = { loading: false }): Promise> { return this.request(url, "POST", options, params) } - delete(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + delete(url: string, params?: object, options: ApiOptions = { loading: false }): Promise> { options.header = { ...options.header, "content-type": 'application/x-www-form-urlencoded' @@ -97,7 +100,7 @@ class CustomRequest { return this.request(url, "DELETE", options, params) } - put(url: string, params?: object, options: ApiOptions = {loading: false}): Promise> { + put(url: string, params?: object, options: ApiOptions = { loading: false }): Promise> { return this.request(url, "PUT", options, params) } diff --git a/collect_information/src/store/daily.ts b/collect_information/src/store/daily.ts new file mode 100644 index 0000000..50b7752 --- /dev/null +++ b/collect_information/src/store/daily.ts @@ -0,0 +1,37 @@ +import { defineStore } from 'pinia' + +export const useDailyStore = defineStore('daily', { + state: () => ({ + userdailyinspection: [], + base64_1: '', + base64_2: '', + }), + actions: { + dailyinspectionList(data) { + this.userdailyinspection = [...data] + }, + change_base64_1(data) { + this.base64_1 = data + }, + change_base64_2(data) { + this.base64_2 = data + }, + clearSignData() { + this.base64_1 = '' + this.base64_2 = '' + }, + + }, + getters: { + getdailyinspection(state) { + return state.userdailyinspection + }, + get_base64_1(state) { + return state.base64_1 + }, + get_base64_2(state) { + return state.base64_2 + }, + + } +}) diff --git a/collect_information/src/subPages/police/dailyInspection/dailyInspection.scss b/collect_information/src/subPages/police/dailyInspection/dailyInspection.scss new file mode 100644 index 0000000..1d91809 --- /dev/null +++ b/collect_information/src/subPages/police/dailyInspection/dailyInspection.scss @@ -0,0 +1,149 @@ +page { + position: relative; +} + +.container { + width: 100%; + +} + +.picker { + padding: 30rpx 30rpx; + display: flex; + justify-content: space-between; +} + +.exit { + height: 100rpx; + line-height: 40px; + border-bottom: solid 0.5px #ebebf7; + box-sizing: border-box; + display: flex; + justify-content: space-between; + align-items: center; + + .exitItem { + display: flex; + align-items: center; + } + + .iconoscope { + z-index: 9999; + width: 8px; + height: 8px; + display: inline-block; + border: solid 2px #c2c2c2; + margin-left: 10px; + transform: rotate(45deg); + border-bottom: white; + border-left: white; + } +} + +.sigh_btns { + transform: rotate(-90deg); + transform-origin: center +} + +.sigh_btns_noRotate {} + + + +.input_width { + width: 400rpx; + height: 40rpx; + display: flex; + justify-content: space-between; + align-items: center +} + + + + + +.uiwu-flex-align { + align-items: center; +} + +.uiwu-flex { + display: flex; +} + +.uiwu-flex-space { + align-items: center; + justify-content: space-between; +} + +.uiwu-picker-search { + position: absolute; + height: 1031rpx; + left: 0; + right: 0; + bottom: 0; + background: url('../../../assets/images/popuptiobg.png') no-repeat 0 0 #fff; + background-size: 100% auto; + border-radius: 30rpx 30rpx 0 0; + + &-btn { + padding: 20rpx 30rpx 40rpx; + + text { + &:nth-child(1) { + color: #999; + } + + &:nth-child(2) { + color: rgb(73, 143, 242); + } + } + } + + &-input { + box-sizing: border-box; + height: 80rpx; + background: rgba(#f3f6fd, 0.6); + border-radius: 16rpx; + margin: 0 30rpx; + padding-left: 24rpx; + padding-right: 10rpx; + + input { + font-size: 28rpx; + width: 100%; + } + } + + .scroll-view { + width: 100%; + height: 800rpx; + margin-top: 30rpx; + } + + .radio-group { + padding: 0 50rpx 30rpx; + overflow-y: scroll; + + &-item { + margin-bottom: 20rpx; + + text { + font-size: 28rpx; + color: #666; + } + + radio { + transform: scale(0.8); + } + } + } +} + +.searchButton { + height: 60rpx; + width: 200rpx; + border-radius: 10rpx; + line-height: 60rpx; + text-align: center; + color: #fff; + background-color: rgb(73, 143, 242); +} diff --git a/collect_information/src/subPages/police/dailyInspection/dailyInspection.ts b/collect_information/src/subPages/police/dailyInspection/dailyInspection.ts new file mode 100644 index 0000000..99bd791 --- /dev/null +++ b/collect_information/src/subPages/police/dailyInspection/dailyInspection.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '监督考核', +}) diff --git a/collect_information/src/subPages/police/dailyInspection/dailyInspection.vue b/collect_information/src/subPages/police/dailyInspection/dailyInspection.vue new file mode 100644 index 0000000..5d3a5d0 --- /dev/null +++ b/collect_information/src/subPages/police/dailyInspection/dailyInspection.vue @@ -0,0 +1,404 @@ + + + diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss index 1cab77b..94a2385 100644 --- a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss +++ b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.scss @@ -17,16 +17,13 @@ page { } .project { - display: flex; - justify-content: space-between; - flex-flow: wrap; - text-align: center; + //display: flex; + //justify-content: space-between; + //flex-flow: wrap; + //text-align: center; view { - width: 45%; - height: 100rpx; - border: 1px solid #cccccc; - line-height: 100rpx; + width: 100%; margin: 8px 0 8px 0; } } diff --git a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue index b1cb95e..10b9a5c 100644 --- a/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue +++ b/collect_information/src/subPages/police/myEnterprisesUnit/myEnterprisesUnit.vue @@ -1,38 +1,54 @@ diff --git a/collect_information/src/subPages/select/dailyLife/dailyLife.scss b/collect_information/src/subPages/select/dailyLife/dailyLife.scss new file mode 100644 index 0000000..64337a3 --- /dev/null +++ b/collect_information/src/subPages/select/dailyLife/dailyLife.scss @@ -0,0 +1,26 @@ +.userinform { + height: 100%; + width: 100%; +} + +.userItem { + color: #7b7b7b; + font-size: 14px; + margin-bottom: 8px; + + .textIndex { + margin-left: 20rpx; + } +} + +.text { + width: 96%; +} + +.singleChoice { + width: 90%; +} + +.label { + margin: 0 20px; +} diff --git a/collect_information/src/subPages/select/dailyLife/dailyLife.ts b/collect_information/src/subPages/select/dailyLife/dailyLife.ts new file mode 100644 index 0000000..457d7f4 --- /dev/null +++ b/collect_information/src/subPages/select/dailyLife/dailyLife.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '', +}) diff --git a/collect_information/src/subPages/select/dailyLife/dailyLife.vue b/collect_information/src/subPages/select/dailyLife/dailyLife.vue new file mode 100644 index 0000000..7ea5510 --- /dev/null +++ b/collect_information/src/subPages/select/dailyLife/dailyLife.vue @@ -0,0 +1,121 @@ + + + diff --git a/collect_information/src/subPages/select/signature/signature.scss b/collect_information/src/subPages/select/signature/signature.scss new file mode 100644 index 0000000..fc3270e --- /dev/null +++ b/collect_information/src/subPages/select/signature/signature.scss @@ -0,0 +1,65 @@ +.sign-box { + position: fixed; + z-index: 100; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.fixedIcon { + z-index: 1000; + position: fixed; + right: 20px; + top: 20px; + height: 100rpx; + width: 100rpx; +} + +.sign-view { + height: 100%; +} + +.sigh_btns_false { + position: absolute; + bottom: 15rpx; + right: 0; + width: 100%; + height: 100rpx; + display: flex; + justify-content: space-evenly; + align-items: center; + +} + +.sigh_btns { + transform: rotate(90deg); + transform-origin: center +} + +.sigh_btns_noRotate {} + +.sigh_btns_true { + position: absolute; + left: 0; + top: 0; + width: 20%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-evenly; + align-items: center; +} + + +.mycanvas { + width: 100%; + background-color: #ececec; +} + +.canvsborder { + border: 1rpx solid #333; + position: fixed; + top: 0; + left: 10000rpx; +} diff --git a/collect_information/src/subPages/select/signature/signature.ts b/collect_information/src/subPages/select/signature/signature.ts new file mode 100644 index 0000000..5f9871a --- /dev/null +++ b/collect_information/src/subPages/select/signature/signature.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationBarTitleText: '签名', + disableScroll: true +}) diff --git a/collect_information/src/subPages/select/signature/signature.vue b/collect_information/src/subPages/select/signature/signature.vue new file mode 100644 index 0000000..f0b3643 --- /dev/null +++ b/collect_information/src/subPages/select/signature/signature.vue @@ -0,0 +1,174 @@ + + + diff --git a/collect_information/src/utils/index.ts b/collect_information/src/utils/index.ts index e69de29..97e1e48 100644 --- a/collect_information/src/utils/index.ts +++ b/collect_information/src/utils/index.ts @@ -0,0 +1,23 @@ +import dayjs from "dayjs"; +import api from "@/request"; + +export const generateSimpleObjectName = (fileName: string, parentDir?: String): string => { + const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + let objectName = parentDir + dayjs().format('/YYYY/MM/DD/') + uuid.replace(/-/g, ''); + console.log(fileName,objectName,'4444') + if (fileName && fileName.length > 0) { + objectName += fileName.substring(fileName.lastIndexOf('.')) + } + console.log(objectName,'888') + return objectName; +} + +export const getResignedObjectUrl = async (bucketName: string, objectName: string): Promise => { + return (await api.get('/common/getResignedObjectUrl', { + bucketName, + objectName + })).data as string; +} diff --git a/collect_information/types/global.d.ts b/collect_information/types/global.d.ts index e769f68..7aadb7f 100644 --- a/collect_information/types/global.d.ts +++ b/collect_information/types/global.d.ts @@ -25,6 +25,10 @@ declare namespace NodeJS { TARO_APP_ID: string /** 后台服务接口地址 **/ TARO_APP_BASE_API: string + + TARO_APP_MINIO_BUCKET:string + + TARO_APP_MINIO_URL:string } } @@ -102,3 +106,59 @@ interface BaseEnum> { label: string; extData: E; } + +interface StandardList { + ckItemId: string + deductionPoints: number + name: string + snowFlakeId: string + isSelected: boolean +} +interface ItemList { + ckGroupId: string + name: string + remark: string + snowFlakeId: string + standardList: StandardList[] + type: { value: string; label: string } + selectedID: string + selected_points: number + selectedGroup: any[] +} +interface StarRating { + itemList: ItemList[] + name: string + remark: string + snowFlakeId: string + totalScore: number + currentScore: number +} +interface UnitEnterprisesUnitList { + label: string + value: string + extData: { + type: { + label: string + value: string + } + } +} +interface CkProjectListByType { + label: string + value: string + extData: { + createTime: string + remark: string + totalScore: number + type: { + label: string + value: string + } + } +} +interface Item { + itemList: any[] // 根据实际情况调整类型 + snowFlakeId: string +} + + diff --git a/collect_information/types/pages/police/index.ts b/collect_information/types/pages/police/index.ts new file mode 100644 index 0000000..802c4de --- /dev/null +++ b/collect_information/types/pages/police/index.ts @@ -0,0 +1,13 @@ +export interface DataStatisticsRes { + /*企事业单位数量 */ + enterprisesUnitCount: number; + + /*服务项目数量 */ + serviceProjectCount: number; + + /*保安人员数量 */ + securityUserCount: number; + + /*无证保安人员数量 */ + noCardSecurityUserCount: number; +} diff --git a/collect_information/types/subPages/projectManager/myProject/index.ts b/collect_information/types/subPages/projectManager/myProject/index.ts index bfeba41..09240b0 100644 --- a/collect_information/types/subPages/projectManager/myProject/index.ts +++ b/collect_information/types/subPages/projectManager/myProject/index.ts @@ -15,6 +15,7 @@ export interface MyProjectList { securityUnitId: string; street?: string; streetName?: string; + type?:any } export interface ContactPersonInfo { @@ -30,24 +31,27 @@ export interface ServiceProjectList { name?: string; remark?: string; securityUserTotal?: number; + securityUnitName?:string; serviceArea?: number; snowFlakeId?: string; staffTotal?: number; - type?: string; + type?: any; projectManagerMiniProgramUserInfo?: ProgramUserInfo } export interface ProgramUserInfo { - idCard: null - name: string - telephone: string + idCard?: null + name?: string + telephone?: string } - export interface ServiceProjectSecurityUserPagerVo { createTime?: string; dateOfBirth?: string; homeAddress?: string; - idCard?: string; + idCard?: { + desensitizedValue?:string + originalValue?:string + }; name?: string; nativePlace?: string; remark?: string; @@ -59,3 +63,4 @@ export interface ServiceProjectSecurityUserPagerVo { workPost?: string; sex: BaseEnum } + diff --git a/collect_information/types/subPages/projectManager/securityUserForm/index.ts b/collect_information/types/subPages/projectManager/securityUserForm/index.ts index e02bb69..a86cb44 100644 --- a/collect_information/types/subPages/projectManager/securityUserForm/index.ts +++ b/collect_information/types/subPages/projectManager/securityUserForm/index.ts @@ -2,14 +2,27 @@ export interface SecurityUserFormParams { snowFlakeId?: string; securityUnitId: string; serviceProjectId: string; - name?: string; + name: string | undefined; workPost?: string; - telephone?: string; + telephone: value | null; sex: number; nativePlace?: string; - idCard: string; + idCard: value | null; dateOfBirth?: Date | null; securityNumber?: string; + photo?:string; remark?: string; + noSecurityNumberDesc:string; homeAddress?: string } + +export interface value{ + desensitizedValue?:string + originalValue?:string +} + +export interface securityNumberByIdCard{ + name: string | undefined + bayzh?: string + sfzhm?: string +} diff --git a/policeManagement/.env.development b/policeManagement/.env.development index 853dff4..ee79f73 100644 --- a/policeManagement/.env.development +++ b/policeManagement/.env.development @@ -7,7 +7,22 @@ VITE_DROP_CONSOLE=false VITE_APP_BASE_API=/api # VITE_APP_PROXY_URL=http://localhost:8765 VITE_APP_PROXY_URL=http://172.10.10.93:8765 - +# # rsa 公钥 VITE_APP_RSA_PUBLIC_KEY=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJps/EXxxSpEM1Ix4R0NWIOBciHCr7P7coDT8tNKfelgR7txcJOqHCO/MIWe7T04aHQTcpQxqx9hMca7dbqz8TZpz9jvLzE/6ZonVKxHsoFnNlHMp1/CPAJ9f6D9wYicum2KltJkmQ0g//D9W2zPCYoGOmSRFcZx/KEBa4EM53jQIDAQAB + +# 高德 myx +# VITE_APP_GAODE_KEY=ca549d915cb38803582ca7e85c5f972c +# VITE_APP_GAODE_VERSION=2.0 +# VITE_APP_SECURITY_JS_CODE=f464462874676b3f1469780a62e5b921 + + +# 高德 lz +VITE_APP_GAODE_KEY=f379a3f860a68d7438526275d6a94b05 +VITE_APP_GAODE_VERSION=2.0 +VITE_APP_SECURITY_JS_CODE=432125a0f8d8cad2dac38b77d6f6728f + +# minio +VITE_APP_MINIO_URL=http://118.253.177.137:9000 +VITE_APP_MINIO_BUCKET=police-security-dev \ No newline at end of file diff --git a/policeManagement/.env.production b/policeManagement/.env.production index 99d9241..1b3fd28 100644 --- a/policeManagement/.env.production +++ b/policeManagement/.env.production @@ -5,4 +5,15 @@ VITE_DROP_CONSOLE=true # axios VITE_APP_BASE_API=/api -VITE_APP_PROXY_URL=https://172.10.10.238:8765 +VITE_APP_PROXY_URL=http://172.10.10.93:8765 +# rsa 公钥 +VITE_APP_RSA_PUBLIC_KEY=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpu1C3JHZ+Ng/eVVCZtwKsOZv9RktpAL13pKy4FoRHyNv2t8TPV2AMzLzfEzlWx001nBxyVxEMR2N9jAcqFLHv7r16ciOzbtzB9dky2G+bc9jIs4/EdVK5bAZcPRh5Jrb78sC9PHyR4AeceDyCIKHLUbWBJB4NTZE0s1Wh5kMynQIDAQAB + +# 高德 +VITE_APP_GAODE_KEY=f379a3f860a68d7438526275d6a94b05 +VITE_APP_GAODE_VERSION=2.0 +VITE_APP_SECURITY_JS_CODE=432125a0f8d8cad2dac38b77d6f6728f + +# minio +VITE_APP_MINIO_URL=https://www.hnjinglian.cn:9002 +VITE_APP_MINIO_BUCKET=police-security \ No newline at end of file diff --git a/policeManagement/.gitignore b/policeManagement/.gitignore index eca7316..bb4e3e5 100644 --- a/policeManagement/.gitignore +++ b/policeManagement/.gitignore @@ -9,6 +9,8 @@ lerna-debug.log* node_modules dist +policeManagement +package-lock.json dist-ssr *.local diff --git a/policeManagement/components.d.ts b/policeManagement/components.d.ts index 0127fa7..2a4c0ca 100644 --- a/policeManagement/components.d.ts +++ b/policeManagement/components.d.ts @@ -9,7 +9,6 @@ declare module 'vue' { export interface GlobalComponents { AAvatar: typeof import('ant-design-vue/es')['Avatar'] AButton: typeof import('ant-design-vue/es')['Button'] - ACard: typeof import('ant-design-vue/es')['Card'] ACascader: typeof import('ant-design-vue/es')['Cascader'] ACheckbox: typeof import('ant-design-vue/es')['Checkbox'] ACheckboxGroup: typeof import('ant-design-vue/es')['CheckboxGroup'] @@ -17,10 +16,11 @@ declare module 'vue' { AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] ADatePicker: typeof import('ant-design-vue/es')['DatePicker'] ADivider: typeof import('ant-design-vue/es')['Divider'] - ADrawer: typeof import('ant-design-vue/es')['Drawer'] + AdministrativeDivisionTree: typeof import('./src/components/tree/AdministrativeDivisionTree.vue')['default'] ADropdown: typeof import('ant-design-vue/es')['Dropdown'] AForm: typeof import('ant-design-vue/es')['Form'] AFormItem: typeof import('ant-design-vue/es')['FormItem'] + AImage: typeof import('ant-design-vue/es')['Image'] AInput: typeof import('ant-design-vue/es')['Input'] AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] @@ -34,12 +34,11 @@ declare module 'vue' { APagination: typeof import('ant-design-vue/es')['Pagination'] APopconfirm: typeof import('ant-design-vue/es')['Popconfirm'] APopover: typeof import('ant-design-vue/es')['Popover'] - ARadio: typeof import('ant-design-vue/es')['Radio'] + AProgress: typeof import('ant-design-vue/es')['Progress'] ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup'] ARangePicker: typeof import('ant-design-vue/es')['RangePicker'] ARow: typeof import('ant-design-vue/es')['Row'] ASelect: typeof import('ant-design-vue/es')['Select'] - ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASpace: typeof import('ant-design-vue/es')['Space'] ASpin: typeof import('ant-design-vue/es')['Spin'] ASubMenu: typeof import('ant-design-vue/es')['SubMenu'] @@ -53,15 +52,14 @@ declare module 'vue' { ATooltip: typeof import('ant-design-vue/es')['Tooltip'] ATreeSelect: typeof import('ant-design-vue/es')['TreeSelect'] FormProMax: typeof import('./src/components/form/FormProMax.vue')['default'] - HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] IconFont: typeof import('./src/components/iconfont/IconFont.vue')['default'] Layout: typeof import('./src/components/layout/layout.vue')['default'] LayoutHeader: typeof import('./src/components/layout/header/LayoutHeader.vue')['default'] + MapContainer: typeof import('./src/components/aMap/MapContainer.vue')['default'] MenuItem: typeof import('./src/components/layout/MenuItem.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SingleImageFileUpload: typeof import('./src/components/upload/SingleImageFileUpload.vue')['default'] - Sliber: typeof import('./src/components/layout/sliber/sliber.vue')['default'] SystemMenus: typeof import('./src/components/layout/SystemMenus.vue')['default'] TableProMax: typeof import('./src/components/table/TableProMax.vue')['default'] TelephoneLogin: typeof import('./src/components/login/TelephoneLogin.vue')['default'] diff --git a/policeManagement/env.d.ts b/policeManagement/env.d.ts deleted file mode 100644 index afe5af0..0000000 --- a/policeManagement/env.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module '*.vue' { - import type { DefineComponent } from 'vue' - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any> - export default component -} diff --git a/policeManagement/global.d.ts b/policeManagement/global.d.ts deleted file mode 100644 index 19b32ff..0000000 --- a/policeManagement/global.d.ts +++ /dev/null @@ -1,101 +0,0 @@ -declare const __APP_ENV: ImportMetaEnv; - -declare global { - /** - * 全局返回 - */ - interface JsonResult { - code: number; - message: string; - data?: T; - } - - - - export interface SecurityUnitPagerQueryParams { - /** 名称 **/ - name?: string; - /** 社会编码 **/ - socialCode?: string; - /** 行政区划编码 **/ - administrativeDivisionCodes?: string[]; - /** 是否启用 **/ - isEnable?: number; - /** 审核状态 **/ - checkStatus?: number; - } - interface BaseEnum { - value: T; - label: string - } - class TreeNodeVo> { - value: T; - parentValue: T; - label: string; - orderIndex?: number; - children?: TreeNodeVo[] - extData?: E; - } - declare interface Grid { - //栅格占据的列数 - span?: number; - //栅格左侧的间隔格数 - offset?: number; - //栅格向右移动格数 - push?: number; - //栅格向左移动格数 - pull?: number; - //<768px 响应式栅格数或者栅格属性对象 - xs?: number; - //≥768px 响应式栅格数或者栅格属性对象 - sm?: number; - //≥992px 响应式栅格数或者栅格属性对象 - md?: number; - //≥1200px 响应式栅格数或者栅格属性对象 - lg?: number; - //≥1920px 响应式栅格数或者栅格属性对象 - xl?: number; - } - interface dataStatus { - account: string; - password: string; - remark: string; - checkStatus: { - extData: { - color: string; - }; - label: string; - value: number; - }; - } - class SelectNodeVo> { - value: T; - label: string; - options?: SelectNodeVo[] - orderIndex?: number; - disabled?: boolean; - extData?: E - } - - interface ExtData { - color?: string; - } - - interface Option { - label: string; - value: string | number; - extData?: ExtData | null; - } - - interface OptionsResponse { - IsEnable: Option[]; - IsOrNot: Option[]; - Sex: Option[]; - CheckStatus: Option[]; - ServiceProjectType: Option[]; - DeleteFlag: Option[]; - } - - -} - diff --git a/policeManagement/index.html b/policeManagement/index.html index d821b0d..99cdddc 100644 --- a/policeManagement/index.html +++ b/policeManagement/index.html @@ -1,15 +1,18 @@ + - - - + + + - Vite + Vue + TS + 公安后台 + -
- +
+ - + + \ No newline at end of file diff --git a/policeManagement/package-lock.json b/policeManagement/package-lock.json index 97e0c12..0bc69dd 100644 --- a/policeManagement/package-lock.json +++ b/policeManagement/package-lock.json @@ -1,876 +1,1429 @@ { "name": "supermanagement", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@alloc/quick-lru": { + "packages": { + "": { + "name": "supermanagement", + "version": "1.0.0", + "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", + "@vueuse/core": "^11.2.0", + "ant-design-vue": "^4.2.3", + "axios": "^1.7.5", + "dayjs": "^1.11.13", + "jsencrypt": "^3.3.2", + "lodash-es": "^4.17.21", + "pinia": "^2.2.2", + "pinia-plugin-persistedstate": "^3.2.0", + "sass": "^1.77.8", + "vue": "^3.4.37", + "vue-component-type-helpers": "^2.1.2", + "vue-router": "4", + "vue-uuid": "^3.0.0" + }, + "devDependencies": { + "@amap/amap-jsapi-types": "^0.0.15", + "@types/lodash-es": "^4.17.12", + "@types/node": "^22.5.1", + "@types/react": "^18.3.12", + "@vitejs/plugin-vue": "^5.1.2", + "@vitejs/plugin-vue-jsx": "^4.1.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.10", + "terser": "^5.36.0", + "typescript": "^5.5.3", + "unplugin-vue-components": "^0.27.4", + "vite": "^5.4.1", + "vue-tsc": "^2.0.29" + } + }, + "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@ant-design/colors": { + "node_modules/@amap/amap-jsapi-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz", + "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==", + "license": "MIT" + }, + "node_modules/@amap/amap-jsapi-types": { + "version": "0.0.15", + "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-types/-/amap-jsapi-types-0.0.15.tgz", + "integrity": "sha512-oqyRqHpVDZh5bUe2mAJh41ZsziSj0eUzwcfIbiaBNB0eiTJnZNhKsTdk77VOklOjwuwNfsblpKW9LjmWNpeQ7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", - "requires": { + "dependencies": { "@ctrl/tinycolor": "^3.4.0" } }, - "@ant-design/icons-svg": { + "node_modules/@ant-design/icons-svg": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" }, - "@ant-design/icons-vue": { + "node_modules/@ant-design/icons-vue": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz", "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==", - "requires": { + "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons-svg": "^4.2.1" + }, + "peerDependencies": { + "vue": ">=3.0.3" } }, - "@antfu/utils": { + "node_modules/@antfu/utils": { "version": "0.7.10", "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, - "requires": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", - "dev": true - }, - "@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, - "requires": { - "@babel/types": "^7.25.6", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, - "requires": { - "@babel/types": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "requires": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, - "requires": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, - "requires": { - "@babel/types": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, - "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, - "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==" + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true - }, - "@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "requires": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", - "requires": { - "@babel/types": "^7.25.6" + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", - "requires": { + "dependencies": { "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, - "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", - "requires": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@ctrl/tinycolor": { + "node_modules/@ctrl/tinycolor": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", - "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } }, - "@emotion/hash": { + "node_modules/@emotion/hash": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, - "@emotion/unitless": { + "node_modules/@emotion/unitless": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, - "@esbuild/aix-ppc64": { + "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/android-arm": { + "node_modules/@esbuild/android-arm": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/android-arm64": { + "node_modules/@esbuild/android-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/android-x64": { + "node_modules/@esbuild/android-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/darwin-arm64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/darwin-x64": { + "node_modules/@esbuild/darwin-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/freebsd-arm64": { + "node_modules/@esbuild/freebsd-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/freebsd-x64": { + "node_modules/@esbuild/freebsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-arm": { + "node_modules/@esbuild/linux-arm": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-arm64": { + "node_modules/@esbuild/linux-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-ia32": { + "node_modules/@esbuild/linux-ia32": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-loong64": { + "node_modules/@esbuild/linux-loong64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-mips64el": { + "node_modules/@esbuild/linux-mips64el": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-ppc64": { + "node_modules/@esbuild/linux-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-riscv64": { + "node_modules/@esbuild/linux-riscv64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-s390x": { + "node_modules/@esbuild/linux-s390x": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/linux-x64": { + "node_modules/@esbuild/linux-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/netbsd-x64": { + "node_modules/@esbuild/netbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/openbsd-x64": { + "node_modules/@esbuild/openbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/sunos-x64": { + "node_modules/@esbuild/sunos-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/win32-arm64": { + "node_modules/@esbuild/win32-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/win32-ia32": { + "node_modules/@esbuild/win32-ia32": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "@esbuild/win32-x64": { + "node_modules/@esbuild/win32-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "@isaacs/cliui": { + "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "requires": { + "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "@jridgewell/gen-mapping": { + "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/set-array": { + "node_modules/@jridgewell/set-array": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, - "@jridgewell/trace-mapping": { + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@nodelib/fs.scandir": { + "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@nodelib/fs.stat": { + "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "@nodelib/fs.walk": { + "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@pkgjs/parseargs": { + "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=14" + } }, - "@rollup/pluginutils": { + "node_modules/@rollup/pluginutils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, - "requires": { + "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "@rollup/rollup-android-arm-eabi": { + "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "android" + ] }, - "@rollup/rollup-android-arm64": { + "node_modules/@rollup/rollup-android-arm64": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "android" + ] }, - "@rollup/rollup-darwin-arm64": { + "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "darwin" + ] }, - "@rollup/rollup-darwin-x64": { + "node_modules/@rollup/rollup-darwin-x64": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "darwin" + ] }, - "@rollup/rollup-linux-arm-gnueabihf": { + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-arm-musleabihf": { + "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-arm64-gnu": { + "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-arm64-musl": { + "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-powerpc64le-gnu": { + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-riscv64-gnu": { + "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-s390x-gnu": { + "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-x64-gnu": { + "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-linux-x64-musl": { + "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ] }, - "@rollup/rollup-win32-arm64-msvc": { + "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ] }, - "@rollup/rollup-win32-ia32-msvc": { + "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ] }, - "@rollup/rollup-win32-x64-msvc": { + "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ] }, - "@simonwep/pickr": { + "node_modules/@simonwep/pickr": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz", "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", - "requires": { + "dependencies": { "core-js": "^3.15.1", "nanopop": "^2.1.0" } }, - "@types/estree": { + "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, - "@types/lodash": { + "node_modules/@types/lodash": { "version": "4.17.7", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "dev": true }, - "@types/lodash-es": { + "node_modules/@types/lodash-es": { "version": "4.17.12", "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "dev": true, - "requires": { + "dependencies": { "@types/lodash": "*" } }, - "@types/node": { + "node_modules/@types/node": { "version": "22.5.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "dev": true, - "requires": { + "dependencies": { "undici-types": "~6.19.2" } }, - "@types/uuid": { + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, - "@vitejs/plugin-vue": { + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz", "integrity": "sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==", - "dev": true - }, - "@vitejs/plugin-vue-jsx": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.0.1.tgz", - "integrity": "sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==", "dev": true, - "requires": { - "@babel/core": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7", - "@vue/babel-plugin-jsx": "^1.2.2" + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" } }, - "@volar/language-core": { + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.1.0.tgz", + "integrity": "sha512-KuRejz7KAFvhXDzOudlaS2IyygAwoAEEMtHAdcRSy/8cA5iKH043Qudcz48zsC0M0vvN5iKwIwNMuWbBYn6/Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-typescript": "^7.25.9", + "@vue/babel-plugin-jsx": "^1.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@volar/language-core": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.2.tgz", "integrity": "sha512-sONt5RLvLL1SlBdhyUSthZzuKePbJ7DwFFB9zT0eyWpDl+v7GXGh/RkPxxWaR22bIhYtTzp4Ka1MWatl/53Riw==", "dev": true, - "requires": { + "dependencies": { "@volar/source-map": "2.4.2" } }, - "@volar/source-map": { + "node_modules/@volar/source-map": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.2.tgz", "integrity": "sha512-qiGfGgeZ5DEarPX3S+HcFktFCjfDrFPCXKeXNbrlB7v8cvtPRm8YVwoXOdGG1NhaL5rMlv5BZPVQyu4EdWWIvA==", "dev": true }, - "@volar/typescript": { + "node_modules/@volar/typescript": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.2.tgz", "integrity": "sha512-m2uZduhaHO1SZuagi30OsjI/X1gwkaEAC+9wT/nCNAtJ5FqXEkKvUncHmffG7ESDZPlFFUBK4vJ0D9Hfr+f2EA==", "dev": true, - "requires": { + "dependencies": { "@volar/language-core": "2.4.2", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, - "@vue/babel-helper-vue-transform-on": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz", - "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==", - "dev": true - }, - "@vue/babel-plugin-jsx": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz", - "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==", + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", + "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "@vue/babel-helper-vue-transform-on": "1.2.2", - "@vue/babel-plugin-resolve-type": "1.2.2", - "camelcase": "^6.3.0", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", + "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@vue/babel-helper-vue-transform-on": "1.2.5", + "@vue/babel-plugin-resolve-type": "1.2.5", "html-tags": "^3.3.1", "svg-tags": "^1.0.0" }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - } - } - }, - "@vue/babel-plugin-resolve-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz", - "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/parser": "^7.23.9", - "@vue/compiler-sfc": "^3.4.15" + "peerDependencies": { + "@babel/core": "^7.0.0-0" }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } + "peerDependenciesMeta": { + "@babel/core": { + "optional": true } } }, - "@vue/compiler-core": { + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", + "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/parser": "^7.25.6", + "@vue/compiler-sfc": "^3.5.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz", "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==", - "requires": { + "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.3", "entities": "^4.5.0", @@ -878,20 +1431,20 @@ "source-map-js": "^1.2.0" } }, - "@vue/compiler-dom": { + "node_modules/@vue/compiler-dom": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz", "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==", - "requires": { + "dependencies": { "@vue/compiler-core": "3.5.3", "@vue/shared": "3.5.3" } }, - "@vue/compiler-sfc": { + "node_modules/@vue/compiler-sfc": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz", "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==", - "requires": { + "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.3", "@vue/compiler-dom": "3.5.3", @@ -903,36 +1456,36 @@ "source-map-js": "^1.2.0" } }, - "@vue/compiler-ssr": { + "node_modules/@vue/compiler-ssr": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz", "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==", - "requires": { + "dependencies": { "@vue/compiler-dom": "3.5.3", "@vue/shared": "3.5.3" } }, - "@vue/compiler-vue2": { + "node_modules/@vue/compiler-vue2": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", "dev": true, - "requires": { + "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, - "@vue/devtools-api": { + "node_modules/@vue/devtools-api": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz", "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==" }, - "@vue/language-core": { + "node_modules/@vue/language-core": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.6.tgz", "integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==", "dev": true, - "requires": { + "dependencies": { "@volar/language-core": "~2.4.1", "@vue/compiler-dom": "^3.4.0", "@vue/compiler-vue2": "^2.7.16", @@ -941,76 +1494,126 @@ "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@vue/reactivity": { + "node_modules/@vue/reactivity": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz", "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==", - "requires": { + "dependencies": { "@vue/shared": "3.5.3" } }, - "@vue/runtime-core": { + "node_modules/@vue/runtime-core": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz", "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==", - "requires": { + "dependencies": { "@vue/reactivity": "3.5.3", "@vue/shared": "3.5.3" } }, - "@vue/runtime-dom": { + "node_modules/@vue/runtime-dom": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz", "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==", - "requires": { + "dependencies": { "@vue/reactivity": "3.5.3", "@vue/runtime-core": "3.5.3", "@vue/shared": "3.5.3", "csstype": "^3.1.3" } }, - "@vue/server-renderer": { + "node_modules/@vue/server-renderer": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz", "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==", - "requires": { + "dependencies": { "@vue/compiler-ssr": "3.5.3", "@vue/shared": "3.5.3" + }, + "peerDependencies": { + "vue": "3.5.3" } }, - "@vue/shared": { + "node_modules/@vue/shared": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz", "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==" }, - "acorn": { + "node_modules/@vueuse/core": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-11.2.0.tgz", + "integrity": "sha512-JIUwRcOqOWzcdu1dGlfW04kaJhW3EXnnjJJfLTtddJanymTL7lF1C0+dVVZ/siLfc73mWn+cGP1PE1PKPruRSA==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "11.2.0", + "@vueuse/shared": "11.2.0", + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-11.2.0.tgz", + "integrity": "sha512-L0ZmtRmNx+ZW95DmrgD6vn484gSpVeRbgpWevFKXwqqQxW9hnSi2Ppuh2BzMjnbv4aJRiIw8tQatXT9uOB23dQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-11.2.0.tgz", + "integrity": "sha512-VxFjie0EanOudYSgMErxXfq6fo8vhr5ICI+BuE3I9FnX7ePllEsVrRQ7O6Q1TLgApeLuPKcHQxAXpP+KnlrJsg==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "color-convert": "^1.9.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "ant-design-vue": { + "node_modules/ant-design-vue": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.2.3.tgz", "integrity": "sha512-kqGyWvZtFlSInFP93Ow6wS8LzEsxxUgpI+ZY5jQQkuX8WAcqdwXCA7IcHMpECW6JB89DZMo2Bw85jUg2SjlgQA==", - "requires": { + "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons-vue": "^7.0.0", "@babel/runtime": "^7.10.5", @@ -1033,307 +1636,421 @@ "throttle-debounce": "^5.0.0", "vue-types": "^3.0.0", "warning": "^4.0.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design-vue" + }, + "peerDependencies": { + "vue": ">=3.2.0" } }, - "any-promise": { + "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "arg": { + "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, - "array-tree-filter": { + "node_modules/array-tree-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" }, - "async-validator": { + "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" }, - "asynckit": { + "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "autoprefixer": { + "node_modules/autoprefixer": { "version": "10.4.20", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "axios": { + "node_modules/axios": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "requires": { + "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0" } }, - "braces": { + "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { + "dependencies": { "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" }, - "camelcase-css": { + "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001658", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001658.tgz", - "integrity": "sha512-N2YVqWbJELVdrnsW5p+apoQyYt51aBMSsBZki1XZEfeBCexcM/sf4xiAHcXQBkuOwJBXtWF7aW1sYX6tKebPHw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "engines": { + "node": ">= 6" } }, - "chokidar": { + "node_modules/caniuse-lite": { + "version": "1.0.30001683", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", + "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "requires": { + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "combined-stream": { + "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { + "dependencies": { "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "commander": { + "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "compute-scroll-into-view": { + "node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" }, - "computeds": { + "node_modules/computeds": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", "dev": true }, - "confbox": { + "node_modules/confbox": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", "dev": true }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, - "core-js": { + "node_modules/core-js": { "version": "3.38.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==" + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "cssesc": { + "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } }, - "csstype": { + "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "dayjs": { + "node_modules/dayjs": { "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, - "de-indent": { + "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", "dev": true }, - "debug": { + "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "requires": { + "dependencies": { "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "delayed-stream": { + "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } }, - "didyoumean": { + "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "dlv": { + "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "dom-align": { + "node_modules/dom-align": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" }, - "dom-scroll-into-view": { + "node_modules/dom-scroll-into-view": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" }, - "eastasianwidth": { + "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "electron-to-chromium": { - "version": "1.5.16", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.16.tgz", - "integrity": "sha512-2gQpi2WYobXmz2q23FrOBYTLcI1O/P4heW3eqX+ldmPVDQELRqhiebV380EhlGG12NtnX1qbK/FHpN0ba+7bLA==", - "dev": true + "node_modules/electron-to-chromium": { + "version": "1.5.64", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", + "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==", + "dev": true, + "license": "ISC" }, - "emoji-regex": { + "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "entities": { + "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "esbuild": { + "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, - "requires": { + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", @@ -1359,656 +2076,984 @@ "@esbuild/win32-x64": "0.21.5" } }, - "escalade": { + "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "estree-walker": { + "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, - "fast-glob": { + "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "fastq": { + "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "requires": { + "dependencies": { "reusify": "^1.0.4" } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "follow-redirects": { + "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "foreground-child": { + "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, - "requires": { + "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "form-data": { + "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "fraction.js": { + "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "glob": { + "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "requires": { + "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "hasown": { + "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "he": { + "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "dev": true, + "bin": { + "he": "bin/he" + } }, - "html-tags": { + "node_modules/html-tags": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "immutable": { + "node_modules/immutable": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "requires": { + "dependencies": { "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "engines": { + "node": ">=0.10.0" + } }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "jackspeak": { + "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, - "jiti": { + "node_modules/jiti": { "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "jsencrypt": { + "node_modules/jsencrypt": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/jsencrypt/-/jsencrypt-3.3.2.tgz", "integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==" }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } }, - "json5": { + "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "lilconfig": { + "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "local-pkg": { + "node_modules/local-pkg": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, - "requires": { + "dependencies": { "mlly": "^1.4.2", "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash-es": { + "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "yallist": "^3.0.2" } }, - "magic-string": { + "node_modules/magic-string": { "version": "0.30.11", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", - "requires": { + "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "merge2": { + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimatch": { + "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "minipass": { + "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "mlly": { + "node_modules/mlly": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.11.3", "pathe": "^1.1.2", "pkg-types": "^1.1.1", "ufo": "^1.5.3" } }, - "ms": { + "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "muggle-string": { + "node_modules/muggle-string": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", "dev": true }, - "mz": { + "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, - "requires": { + "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, - "nanoid": { + "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "nanopop": { + "node_modules/nanopop": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.4.2.tgz", "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==" }, - "node-releases": { + "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "normalize-range": { + "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-hash": { + "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "package-json-from-dist": { + "node_modules/package-json-from-dist": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", "dev": true }, - "path-browserify": { + "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-scurry": { + "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "requires": { + "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, - "dependencies": { - "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - } + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "pathe": { + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/pathe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, - "picocolors": { + "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinia": { + "node_modules/pinia": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.2.tgz", "integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==", - "requires": { + "dependencies": { "@vue/devtools-api": "^6.6.3", "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "pinia-plugin-persistedstate": { + "node_modules/pinia-plugin-persistedstate": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.3.tgz", - "integrity": "sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==" + "integrity": "sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==", + "peerDependencies": { + "pinia": "^2.0.0" + } }, - "pirates": { + "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "pkg-types": { + "node_modules/pkg-types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, - "requires": { + "dependencies": { "confbox": "^0.1.7", "mlly": "^1.7.1", "pathe": "^1.1.2" } }, - "postcss": { + "node_modules/postcss": { "version": "8.4.45", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "postcss-import": { + "node_modules/postcss-import": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "postcss-js": { + "node_modules/postcss-js": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dev": true, - "requires": { + "dependencies": { "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, - "postcss-load-config": { + "node_modules/postcss-load-config": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, - "dependencies": { - "lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dev": true + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true } } }, - "postcss-nested": { + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "postcss-selector-parser": { + "node_modules/postcss-selector-parser": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "proxy-from-env": { + "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "read-cache": { + "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "requires": { + "dependencies": { "pify": "^2.3.0" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "resize-observer-polyfill": { + "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, - "resolve": { + "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rollup": { + "node_modules/rollup": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "dev": true, - "requires": { + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.21.2", "@rollup/rollup-android-arm64": "4.21.2", "@rollup/rollup-darwin-arm64": "4.21.2", @@ -2025,156 +3070,234 @@ "@rollup/rollup-win32-arm64-msvc": "4.21.2", "@rollup/rollup-win32-ia32-msvc": "4.21.2", "@rollup/rollup-win32-x64-msvc": "4.21.2", - "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "sass": { + "node_modules/sass": { "version": "1.78.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", - "requires": { + "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "scroll-into-view-if-needed": { + "node_modules/scroll-into-view-if-needed": { "version": "2.2.31", "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", - "requires": { + "dependencies": { "compute-scroll-into-view": "^1.0.20" } }, - "semver": { + "node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "shallow-equal": { + "node_modules/shallow-equal": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "source-map-js": { + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } }, - "string-width": { + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "requires": { + "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, - "strip-ansi": { + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - } + "ansi-regex": "^5.0.1" } }, - "stylis": { + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylis": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==" }, - "sucrase": { + "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", @@ -2182,35 +3305,39 @@ "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "svg-tags": { + "node_modules/svg-tags": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, - "tailwindcss": { + "node_modules/tailwindcss": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", "dev": true, - "requires": { + "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -2234,94 +3361,150 @@ "resolve": "^1.22.2", "sucrase": "^3.32.0" }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "thenify": { + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, - "requires": { + "dependencies": { "any-promise": "^1.0.0" } }, - "thenify-all": { + "node_modules/thenify-all": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, - "requires": { + "dependencies": { "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "throttle-debounce": { + "node_modules/throttle-debounce": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==" + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "ts-interface-checker": { + "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, - "typescript": { + "node_modules/typescript": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } }, - "ufo": { + "node_modules/ufo": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", "dev": true }, - "undici-types": { + "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, - "unplugin": { + "node_modules/unplugin": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz", "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.12.1", "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } } }, - "unplugin-vue-components": { + "node_modules/unplugin-vue-components": { "version": "0.27.4", "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.4.tgz", "integrity": "sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==", "dev": true, - "requires": { + "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.0", "chokidar": "^3.6.0", @@ -2332,235 +3515,418 @@ "minimatch": "^9.0.5", "mlly": "^1.7.1", "unplugin": "^1.12.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } } }, - "update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, - "requires": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "vite": { + "node_modules/vite": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", "dev": true, - "requires": { + "dependencies": { "esbuild": "^0.21.3", - "fsevents": "~2.3.3", "postcss": "^8.4.43", "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "vscode-uri": { + "node_modules/vscode-uri": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", "dev": true }, - "vue": { + "node_modules/vue": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz", "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==", - "requires": { + "dependencies": { "@vue/compiler-dom": "3.5.3", "@vue/compiler-sfc": "3.5.3", "@vue/runtime-dom": "3.5.3", "@vue/server-renderer": "3.5.3", "@vue/shared": "3.5.3" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "vue-component-type-helpers": { + "node_modules/vue-component-type-helpers": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.6.tgz", "integrity": "sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==" }, - "vue-demi": { + "node_modules/vue-demi": { "version": "0.14.10", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } }, - "vue-router": { + "node_modules/vue-router": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz", "integrity": "sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==", - "requires": { + "dependencies": { "@vue/devtools-api": "^6.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" } }, - "vue-tsc": { + "node_modules/vue-tsc": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.6.tgz", "integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==", "dev": true, - "requires": { + "dependencies": { "@volar/typescript": "~2.4.1", "@vue/language-core": "2.1.6", "semver": "^7.5.4" }, - "dependencies": { - "semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true - } + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" } }, - "vue-types": { + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-types": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz", "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", - "requires": { + "dependencies": { "is-plain-object": "3.0.1" + }, + "engines": { + "node": ">=10.15.0" + }, + "peerDependencies": { + "vue": "^3.0.0" } }, - "vue-uuid": { + "node_modules/vue-uuid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/vue-uuid/-/vue-uuid-3.0.0.tgz", "integrity": "sha512-+5DP857xVmTHYd00dMC1c1gVg/nxG6+K4Lepojv9ckHt8w0fDpGc5gQCCttS9D+AkSkTJgb0cekidKjTWu5OQQ==", - "requires": { + "dependencies": { "@types/uuid": "^8.3.4", "uuid": "^8.3.2" + }, + "peerDependencies": { + "vue": ">= 3.0.0" } }, - "warning": { + "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "webpack-virtual-modules": { + "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "yaml": { + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dev": true + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } } } } diff --git a/policeManagement/package.json b/policeManagement/package.json index d0630cf..0f9aafb 100644 --- a/policeManagement/package.json +++ b/policeManagement/package.json @@ -6,30 +6,36 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vue-tsc -b && vite build", + "build": "vite build --mode production", "preview": "vite preview" }, "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", + "@vueuse/core": "^11.2.0", "ant-design-vue": "^4.2.3", "axios": "^1.7.5", + "dayjs": "^1.11.13", "jsencrypt": "^3.3.2", "lodash-es": "^4.17.21", "pinia": "^2.2.2", "pinia-plugin-persistedstate": "^3.2.0", - "vue-component-type-helpers": "^2.1.2", "sass": "^1.77.8", "vue": "^3.4.37", + "vue-component-type-helpers": "^2.1.2", "vue-router": "4", "vue-uuid": "^3.0.0" }, "devDependencies": { + "@amap/amap-jsapi-types": "^0.0.15", "@types/lodash-es": "^4.17.12", "@types/node": "^22.5.1", + "@types/react": "^18.3.12", "@vitejs/plugin-vue": "^5.1.2", - "@vitejs/plugin-vue-jsx": "^4.0.1", + "@vitejs/plugin-vue-jsx": "^4.1.0", "autoprefixer": "^10.4.20", "postcss": "^8.4.41", "tailwindcss": "^3.4.10", + "terser": "^5.36.0", "typescript": "^5.5.3", "unplugin-vue-components": "^0.27.4", "vite": "^5.4.1", diff --git a/policeManagement/src/assets/scss/myAntD.scss b/policeManagement/src/assets/scss/myAntD.scss new file mode 100644 index 0000000..f2e201e --- /dev/null +++ b/policeManagement/src/assets/scss/myAntD.scss @@ -0,0 +1,178 @@ +/* 扩展ant design pro按钮组件颜色 */ +$--my-antd-important: !important; + +.btn-danger { + color: #ffffff; + background-color: #F5222D; + border-color: #F5222D; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #ff4d4f $--my-antd-important; + border-color: #ff4d4f $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #cf1322 $--my-antd-important; + border-color: #cf1322 $--my-antd-important; + } +} + +.btn-volcano { + color: #ffffff; + background-color: #FA541C; + border-color: #FA541C; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #ff7a45 $--my-antd-important; + border-color: #ff7a45 $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #d4380d $--my-antd-important; + border-color: #d4380d $--my-antd-important; + } +} + +.btn-warn { + color: #ffffff; + background-color: #FAAD14; + border-color: #FAAD14; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #ffc53d $--my-antd-important; + border-color: #ffc53d $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #d48806 $--my-antd-important; + border-color: #d48806 $--my-antd-important; + } +} + +.btn-success { + color: #ffffff; + background-color: #52C41A; + border-color: #52C41A; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #73d13d $--my-antd-important; + border-color: #73d13d $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #389e0d $--my-antd-important; + border-color: #389e0d $--my-antd-important; + } +} + +.button-color-cyan { + color: #ffffff; + background-color: #13C2C2; + border-color: #13C2C2; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #36cfc9 $--my-antd-important; + border-color: #36cfc9 $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #08979c $--my-antd-important; + border-color: #08979c $--my-antd-important; + } +} + +.btn-daybreak { + color: #ffffff; + background-color: #1890FF; + border-color: #1890FF; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #096dd9 $--my-antd-important; + border-color: #096dd9 $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #40a9ff $--my-antd-important; + border-color: #40a9ff $--my-antd-important; + } +} + +.button-color-geekblue { + color: #ffffff; + background-color: #2F54EB; + border-color: #2F54EB; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #1d39c4 $--my-antd-important; + border-color: #1d39c4 $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #597ef7 $--my-antd-important; + border-color: #597ef7 $--my-antd-important; + } +} + +.btn-purple { + color: #ffffff; + background-color: #722ED1; + border-color: #722ED1; + + &:hover, + &:focus { + color: #ffffff $--my-antd-important; + background-color: #9254de $--my-antd-important; + border-color: #9254de $--my-antd-important; + } + + &:active, + &.active { + color: #ffffff $--my-antd-important; + background-color: #531dab $--my-antd-important; + border-color: #531dab $--my-antd-important; + } +} + +.table-row-warn td { + background-color: #fefca6; +} + +.table-row-danger td { + background-color: #f79988; +} + +.table-row-success td { + background-color: #b6fcbe; +} + +.ant-table-summary td { + background: #edeff6; +} \ No newline at end of file diff --git a/policeManagement/src/components/aMap/MapContainer.vue b/policeManagement/src/components/aMap/MapContainer.vue new file mode 100644 index 0000000..8eb4f20 --- /dev/null +++ b/policeManagement/src/components/aMap/MapContainer.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/policeManagement/src/components/form/FormProMax.vue b/policeManagement/src/components/form/FormProMax.vue index 6bb72b9..63361fe 100644 --- a/policeManagement/src/components/form/FormProMax.vue +++ b/policeManagement/src/components/form/FormProMax.vue @@ -67,6 +67,7 @@ :allowClear="item.componentsProps?.allowClear ?? true" :options="item.options" /> + import { FormInstance } from 'ant-design-vue' -import { ref } from 'vue' +import { defineAsyncComponent, ref } from 'vue' import { FormExpose } from 'ant-design-vue/es/form/Form' import { QuestionCircleOutlined } from '@ant-design/icons-vue' import { FormProMaxItemOptions, FormProMaxItemProps, FormProMaxProps } from '@/types/components/form/index.ts' +import { ComponentProps } from 'vue-component-type-helpers' +import AdministrativeDivisionTree from '@/components/tree/AdministrativeDivisionTree.vue' + +const AdministrativeDivisionTreeComp: ComponentProps = defineAsyncComponent(() => import('@/components/tree/AdministrativeDivisionTree.vue')) const modelValue = defineModel('value', { default: {}, @@ -147,7 +152,7 @@ const props = withDefaults(defineProps>(), { scrollToFirstError: undefined, validateOnRuleChange: undefined, }) -console.log(props) + const formProMaxRef = ref(null!) const getResponsive = (item: FormProMaxItemProps): Grid => { diff --git a/policeManagement/src/components/table/TableProMax.vue b/policeManagement/src/components/table/TableProMax.vue index 29a68b7..285167a 100644 --- a/policeManagement/src/components/table/TableProMax.vue +++ b/policeManagement/src/components/table/TableProMax.vue @@ -144,7 +144,7 @@ const props = withDefaults(defineProps>(), { showExpandColumn: undefined, sticky: undefined, }) -console.log(props) +// console.log(props) const slots = defineSlots>() @@ -189,7 +189,7 @@ const { props.dataCallback, props.requestError ) -console.log('pageParams', pageParams) +// console.log('pageParams', pageParams) onMounted(() => props.requestAuto && requestGetTableData(true)) diff --git a/policeManagement/src/components/tree/AdministrativeDivisionTree.vue b/policeManagement/src/components/tree/AdministrativeDivisionTree.vue new file mode 100644 index 0000000..c6a45f4 --- /dev/null +++ b/policeManagement/src/components/tree/AdministrativeDivisionTree.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/policeManagement/src/components/upload/SingleImageFileUpload.vue b/policeManagement/src/components/upload/SingleImageFileUpload.vue index da2f465..e15f0a6 100644 --- a/policeManagement/src/components/upload/SingleImageFileUpload.vue +++ b/policeManagement/src/components/upload/SingleImageFileUpload.vue @@ -1,8 +1,9 @@ diff --git a/policeManagement/src/global.d.ts b/policeManagement/src/global.d.ts new file mode 100644 index 0000000..352bfeb --- /dev/null +++ b/policeManagement/src/global.d.ts @@ -0,0 +1,105 @@ + +// global.d.ts不能出现 export 关键字否则这个文件会失效 +declare const __APP_ENV: ImportMetaEnv; +class TreeNodeVo> { + value: T; + parentValue: T; + label: string; + orderIndex?: number; + children?: TreeNodeVo[] + extData?: E; +} + +/** + * 全局返回 + */ +interface JsonResult { + code: number; + message: string; + data?: T; +} + + +interface SecurityUnitPagerQueryParams { + /** 名称 **/ + name?: string; + /** 社会编码 **/ + socialCode?: string; + /** 行政区划编码 **/ + administrativeDivisionCodes?: string[]; + /** 是否启用 **/ + isEnable?: number; + /** 审核状态 **/ + checkStatus?: number; +} +interface BaseEnum { + value: T; + label: string +} + +interface Grid { + //栅格占据的列数 + span?: number; + //栅格左侧的间隔格数 + offset?: number; + //栅格向右移动格数 + push?: number; + //栅格向左移动格数 + pull?: number; + //<768px 响应式栅格数或者栅格属性对象 + xs?: number; + //≥768px 响应式栅格数或者栅格属性对象 + sm?: number; + //≥992px 响应式栅格数或者栅格属性对象 + md?: number; + //≥1200px 响应式栅格数或者栅格属性对象 + lg?: number; + //≥1920px 响应式栅格数或者栅格属性对象 + xl?: number; +} +interface dataStatus { + account: string; + password: string; + remark: string; + checkStatus: { + extData: { + color: string; + }; + label: string; + value: number; + }; +} +class SelectNodeVo> { + value: T; + label: string; + options?: SelectNodeVo[] + orderIndex?: number; + disabled?: boolean; + extData?: E +} + +interface ExtData { + color?: string; +} + +interface Option { + label: string; + value: string | number; + extData?: ExtData | null; +} + +interface OptionsResponse { + IsEnable: Option[]; + IsOrNot: Option[]; + Sex: Option[]; + CheckStatus: Option[]; + ServiceProjectType: Option[]; + DeleteFlag: Option[]; +} + +interface TypeEnum { + value: string; + label: string +} + + diff --git a/policeManagement/src/main.ts b/policeManagement/src/main.ts index 77bdb85..ea55d7a 100644 --- a/policeManagement/src/main.ts +++ b/policeManagement/src/main.ts @@ -1,19 +1,16 @@ -import {createApp} from 'vue' +import { createApp } from 'vue' import App from '@/App.vue' import '@/reset.css' import './index.css' -// 公共样式 import '@/assets/scss/common.scss' -// iconfont css +import '@/assets/scss/myAntD.scss' import "@/assets/iconfont/iconfont.css"; -// vue Router import router from "@/router"; -// pinia stores import pinia from "@/stores"; - const vueApp = createApp(App); -import {initEnums} from "@/config/dict.ts"; - +import { initEnums } from "@/config/dict.ts"; +//高德类型声明文件 +import "@amap/amap-jsapi-types"; initEnums() vueApp .use(router) diff --git a/policeManagement/src/router/index.ts b/policeManagement/src/router/index.ts index b4a5b80..bdd4fb3 100644 --- a/policeManagement/src/router/index.ts +++ b/policeManagement/src/router/index.ts @@ -10,7 +10,7 @@ import { ROUTER_WHITE_LIST } from "@/config"; * createWebHashHistory: 路径带#号 这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理,影响SEO */ const router = createRouter({ - history: createWebHistory(), + history: createWebHistory('/policeManagement/'), routes: [...staticRouter], strict: false, scrollBehavior: () => ({ left: 0, top: 0 }) diff --git a/policeManagement/src/router/staticRouters.ts b/policeManagement/src/router/staticRouters.ts index 45b703d..09b2633 100644 --- a/policeManagement/src/router/staticRouters.ts +++ b/policeManagement/src/router/staticRouters.ts @@ -81,7 +81,21 @@ export const staticRouter: RouteRecordRaw[] = keepalive: true }, component: () => import('@/views/query/publicUnit.vue') + // component: () => import('@/views/query/index.tsx') + // component: () => import('@/views/query/EnterprisesUnit') + + }, + { + path: 'assessment-record', // 这里使用相对路径而不是 '/register' + name: 'assessment-record', + meta: { + + title: '考核记录', + keepalive: true + }, + component: () => import('@/views/query/assessmentRecord.vue') + } // { // path: 'weapp-user', // 这里使用相对路径而不是 '/register' // name: 'weapp-user', diff --git a/policeManagement/src/types/components/form/index.ts b/policeManagement/src/types/components/form/index.ts index 32da75d..36927b9 100644 --- a/policeManagement/src/types/components/form/index.ts +++ b/policeManagement/src/types/components/form/index.ts @@ -15,6 +15,7 @@ import { } from "ant-design-vue"; import { Ref, UnwrapRef, VNode } from "vue"; import { ComponentProps } from "vue-component-type-helpers"; +import AdministrativeDivisionTree from "@/components/tree/AdministrativeDivisionTree.vue"; type FormProMaxItemType = | 'custom' @@ -32,7 +33,8 @@ type FormProMaxItemType = | 'datePicker' | 'rangePicker' | 'timeRangePicker' - | 'timePicker'; + | 'timePicker' + | 'administrativeDivisionTree' interface FormProMaxItemCommonProps extends ComponentProps { label?: string, @@ -64,6 +66,7 @@ export type FormProMaxItemOptions = { | FormProMaxItemProps<'rangePicker', ComponentProps> | FormProMaxItemProps<'timeRangePicker', ComponentProps> | FormProMaxItemProps<'timePicker', ComponentProps> + | FormProMaxItemProps<'administrativeDivisionTree', ComponentProps> } export interface FormProMaxProps extends FormProps { diff --git a/policeManagement/src/types/components/map/index.ts b/policeManagement/src/types/components/map/index.ts new file mode 100644 index 0000000..a8ca2fa --- /dev/null +++ b/policeManagement/src/types/components/map/index.ts @@ -0,0 +1,44 @@ +/** + * 高德支持的插件列表 + * @link https://lbs.amap.com/api/javascript-api-v2/guide/abc/plugins-list + */ +export type MapPlugins = + 'AMap.ElasticMarker' + | 'AMap.ToolBar' + | 'AMap.Scale' + | 'AMap.HawkEye' + | 'AMap.ControlBar' + | 'AMap.MapType' + | 'AMap.Geolocation' + | 'AMap.AutoComplete' + | 'AMap.PlaceSearch' + | 'AMap.DistrictSearch' + | 'AMap.LineSearch' + | 'AMap.StationSearch' + | 'AMap.Driving' + | 'AMap.TruckDriving' + | 'AMap.Transfer' + | 'AMap.Walking' + | 'AMap.Riding' + | 'AMap.DragRoute' + | 'AMap.Geocoder' + | 'AMap.CitySearch' + | 'AMap.IndoorMap' + | 'AMap.MouseTool' + | 'AMap.CircleEditor' + | 'AMap.PolygonEditor' + | 'AMap.PolylineEditor' + | 'AMap.RectangleEditor' + | 'AMap.EllipseEditor' + | 'AMap.BezierCurveEditor' + | 'AMap.MarkerCluster' + | 'AMap.RangingTool' + | 'AMap.CloudDataSearch' + | 'AMap.Weather' + | 'AMap.HeatMap' + +export interface MapContainerProps { + plugins?: MapPlugins[], + initCallback?: (map: AMap.Map) => void, + mapOptions?: AMap.MapOptions +} diff --git a/policeManagement/src/types/views/assessmentRecord.ts b/policeManagement/src/types/views/assessmentRecord.ts new file mode 100644 index 0000000..2353e8d --- /dev/null +++ b/policeManagement/src/types/views/assessmentRecord.ts @@ -0,0 +1,61 @@ +import {BaseTableRowRecord} from "@/types/components/table"; +import {BaseEnum} from "../../../global"; + + + +export interface AssessmentRecordPagerVo extends BaseTableRowRecord { + /** 企事业单位名称 **/ + enterprisesUnitName: string; + /** 考核项目名称 **/ + ckProjectName: string; + /** 考核项目总分 **/ + totalScore: number; + /** 考核项目类型 **/ + type: BaseEnum; + /** 考核项目备注 **/ + ckProjectRemark: string; + /** 公安单位名称 **/ + policeUnitName: string; + /** 考核人员签字 **/ + assessmentUserSignature: string; + /** 被考核单位人员签字 **/ + byAssessmentEnterprisesUnitUserSignature: string; + /** 考核备注 **/ + remark: string; + /** 总扣分 **/ + deductionPointsTotal: number; +} + + +export interface AssessmentRecordPagerQueryParams { + type: string +} + +export interface DeductedDetailRes { + /*考核分组id */ + ckGroupId: number; + groupRowSpan: number; + /*考核分组名字 */ + groupName: string; + /*考核分组总分 */ + groupTotalScore: number; + /*考核分组备注 */ + groupRemark: string; + /*考核项id */ + ckItemId: number; + itemRowSpan: number; + /*考核项名字 */ + itemName: string; + /*组件类型,可用值:RADIO,MULTIPLE */ + itemType: BaseEnum; + /*考核项备注 */ + itemRemark: string; + /*考核标准id */ + ckStandardId: number; + /*考核标准 */ + standardName: string; + /*扣分数 */ + deductionPoints: Record; + /*是否选中 */ + isSelected: boolean; +} diff --git a/policeManagement/src/types/views/serviceManagement.ts b/policeManagement/src/types/views/serviceManagement.ts new file mode 100644 index 0000000..05aa507 --- /dev/null +++ b/policeManagement/src/types/views/serviceManagement.ts @@ -0,0 +1,24 @@ +import { BaseTableRowRecord } from "@/types/components/table"; + +export interface serviceProjectSaveOrUpdateParams_ extends BaseTableRowRecord { + snowFlakeId: string + enterprisesUnitId: string, + enterprisesUnitName: string, + projectManagerMiniProgramUserId: string, + projectManagerMiniProgramUserName: string, + name: string, + type: TypeEnum, + twoType: BaseEnum, + outsourceName: string, + isFiling: BaseEnum, + idNumber: string, + serviceArea: number, + buildingTotal: number, + houseTotal: number, + staffTotal: number, + securityUserTotal: number, + remark: string, + createUserName: string, + createTime: string, + enterprisesUnitAdministrativeDivisionCodes: Record +} diff --git a/policeManagement/src/types/views/unitManage/police/policeUnit.ts b/policeManagement/src/types/views/unitManage/police/policeUnit.ts new file mode 100644 index 0000000..0804615 --- /dev/null +++ b/policeManagement/src/types/views/unitManage/police/policeUnit.ts @@ -0,0 +1,160 @@ +import { BaseTableRowRecord } from "@/types/components/table"; + +export interface PoliceUnitPagerQueryParams { + /** 名称 **/ + name?: string; + /** 代码 **/ + code?: string; + /** 行政区划 **/ + administrativeDivisionCodes?: string[]; + /** 是否启用 **/ + isEnable?: BaseEnum; + /** 审核状态 **/ + checkStatus?: BaseEnum; +} + +export interface PoliceUnitPagerVo extends BaseTableRowRecord { + + sex: { label: string } + /** 名称 **/ + name?: string; + /** 代码 **/ + code?: string; + /** 省编码 **/ + province?: string; + /** 省名字 **/ + provinceName?: string; + /** 市编码 **/ + city?: string; + /** 市名字 **/ + cityName?: string; + /** 区/县编码 **/ + districts?: string; + /** 区/县名字 **/ + districtsName?: string; + /** 街道编码 **/ + street?: string; + /** 街道编码 **/ + streetName?: string; + /** 详细地址 **/ + address?: string; + /** 联系人 **/ + contactPersonInfo?: { + name: string; + telephone: string; + }; + /** 是否启用 **/ + isEnable?: BaseEnum; + /** 审核状态 **/ + checkStatus?: BaseEnum; +} + +export interface EnterprisesUnitPagerQueryParams { + /** 公安单位id **/ + policeUnitId: string; +} + +export interface EnterprisesUnitPagerVo extends BaseTableRowRecord { + sex: { label: string } + /** 名字 **/ + name?: string; + type: BaseEnum + /** 公安单位id **/ + policeUnitId: string; + /** 省编码 **/ + province?: string; + /** 省名称 **/ + provinceName?: string; + /** 市编码 **/ + city?: string; + /** 市名称 **/ + cityName?: string; + /** 区编码 **/ + districts?: string; + /** 区名称 **/ + districtsName?: string; + /** 街编码 **/ + street?: string; + /** 街名称 **/ + streetName?: string; + /** 地址 **/ + address?: string; + point: [number, number] + /** 联系方式 **/ + contactPersonInfo?: { + name: string; + telephone: string; + }; + /** 备注 **/ + remark?: string; +} + + + +export interface EnterprisesUnitSaveOrUpdateParams { + /** id **/ + snowFlakeId?: string; + + /** 公安单位id **/ + policeUnitId: string; + /** 名称 **/ + name: string; + /** 类型 **/ + type: string; + /** 行政区划编码 **/ + administrativeDivisionCodes: string[]; + /** 详细地址 **/ + address?: string; + point?: [number, number] + /** 联系人 **/ + contactPersonInfo?: { + name: string; + telephone: string; + }; + /** 备注 **/ + remark?: string; +} + +export interface securityUnitIdListParams { + snowFlakeId?: string; + serviceProjectId?: string; + securityUnitId?: string; + name?: string; + remark?: string; + photo?: string; + telephone?: string; + workPost?: string; + sex?: string; + nativePlace?: string; + idCard?: string; + dateOfBirth?: string; + securityNumber?: string; + noSecurityNumberDesc?: string; + homeAddress?: string; +} +export interface securityUnitIdListPagerVo { + snowFlakeId?: string; + serviceProjectId?: string; + securityUnitId?: string; + name?: string; + remark?: string; + photo?: string; + telephone?: { + desensitizedValue?: string; + originalValue?: string; + }; + workPost?: string; + sex?: { + label?: string; + value: number | string + }; + nativePlace?: string; + idCard?: { + desensitizedValue?: string; + originalValue?: string; + }; + dateOfBirth?: string; + securityNumber?: string; + noSecurityNumberDesc?: string; + homeAddress?: string; +} diff --git a/policeManagement/src/utils/aMapUtil.ts b/policeManagement/src/utils/aMapUtil.ts new file mode 100644 index 0000000..b9578fa --- /dev/null +++ b/policeManagement/src/utils/aMapUtil.ts @@ -0,0 +1,18 @@ +import AMapLoader from "@amap/amap-jsapi-loader"; +import { MapPlugins } from "@/types/components/map/index"; + +export const initMap = (plugins?: MapPlugins[]): Promise => new Promise((resolve, reject) => { + //@ts-ignore + window._AMapSecurityConfig = { + securityJsCode: __APP_ENV.VITE_APP_SECURITY_JS_CODE + } + AMapLoader.load({ + key: __APP_ENV.VITE_APP_GAODE_KEY, + version: __APP_ENV.VITE_APP_GAODE_VERSION, + plugins + }).then((aMap: typeof AMap) => { + resolve(aMap) + }).catch(err => { + reject(err) + }) +}) diff --git a/policeManagement/src/views/dashboard/index.vue b/policeManagement/src/views/dashboard/index.vue index a081747..48146d0 100644 --- a/policeManagement/src/views/dashboard/index.vue +++ b/policeManagement/src/views/dashboard/index.vue @@ -1,4 +1,4 @@ - + + + diff --git a/policeManagement/src/views/query/index.tsx b/policeManagement/src/views/query/index.tsx new file mode 100644 index 0000000..846b4ec --- /dev/null +++ b/policeManagement/src/views/query/index.tsx @@ -0,0 +1,365 @@ +import dayjs from 'dayjs' +import { TableProMaxProps, TableProMaxSlots } from '@/types/components/table' +import { EnterprisesUnitPagerQueryParams, securityUnitIdListPagerVo, securityUnitIdListParams, PoliceUnitPagerVo } from '@/types/views/unitManage/police/policeUnit.ts' +import { reactive, ref, h } from 'vue' +import { FormExpose } from 'ant-design-vue/es/form/Form' +import { ComponentExposed } from 'vue-component-type-helpers' +import { FormProMaxItemOptions } from '@/types/components/form' +import { dictSelectNodes } from '@/config/dict.ts' +import { Button, message, Modal, Space, Tag, Input } from 'ant-design-vue' +import api from '@/axios' +import TableProMax from '@/components/table/TableProMax.vue' +import { deleteDataModal } from '@/components/tsx/ModalPro.tsx' +import { PageParams } from '@/types/hooks/useTableProMax.ts' +import FormProMax from '@/components/form/FormProMax.vue' +import { debounce } from 'lodash-es' +import { SearchOutlined } from '@ant-design/icons-vue' +import axios from 'axios' +import SingleImageFileUpload from '@/components/upload/SingleImageFileUpload.vue' +type _TableProps = TableProMaxProps + +const _formParams = reactive({ + snowFlakeId: '', // + serviceProjectId: '', // 服务项目id + securityUnitId: '', // 保安单位id + name: '', // + photo: '', + telephone: '', + workPost: '', + sex: '', + nativePlace: '', + idCard: '', + dateOfBirth: '', + securityNumber: '', + noSecurityNumberDesc: '', + homeAddress: '', + remark: '', +}) +const cardBlur = () => { + let value = _formParams.idCard + if (!value?.length || value.length < 18) { + _formParams.dateOfBirth = '' + return + } + const birthDate = value.substring(6, 14) + const year = birthDate.substring(0, 4) + const month = birthDate.substring(4, 6) + const day = birthDate.substring(6, 8) + var _data = new Date(parseInt(year), parseInt(month) - 1, parseInt(day)) + _formParams.dateOfBirth = dayjs(_data).format('YYYY-MM-DD HH:mm:ss') + console.log('🚀 ~ cardBlur ~ _data:', _formParams.dateOfBirth) +} +const searchSecurityUnitId = debounce(async () => { + if (process.env.NODE_ENV === 'development') { + console.log('process.env.NODE_ENV === development') + const res = await axios.get(`https://www.hnjinglian.cn:5678/common/querySecurityNumberByIdCard?idCard=${_formParams.idCard}`) + if (res.data?.data?.hasOwnProperty('bayzh')) { + _formParams.securityNumber = res.data.data.bayzh + message.success(res.data.message) + } else { + message.error('未查询到保安证件号') + } + } else { + const res = await api.get('/common/querySecurityNumberByIdCard', { idCard: _formParams.idCard }) + console.log(res) + if (res.data?.hasOwnProperty('bayzh')) { + _formParams.securityNumber = res.data.bayzh + message.success(res.message) + } else { + message.error('未查询到保安证件号') + } + } + cardBlur() +}, 300) +const saveOrUpdateEnterprisesUnit = (callback: Function, params, type: string) => { + // console.log('🚀 ~ saveOrUpdateEnterprisesUnit ~ params:', params) + if (type === 'add') { + _formParams.serviceProjectId = params.snowFlakeId + _formParams.securityUnitId = params.securityUnitId + } else { + _formParams.snowFlakeId = params.snowFlakeId + _formParams.serviceProjectId = params.serviceProjectId + _formParams.securityUnitId = params.securityUnitId + _formParams.name = params.name + _formParams.photo = params?.photo + _formParams.telephone = params.telephone.originalValue + _formParams.workPost = params.workPost + _formParams.sex = params.sex.value + _formParams.nativePlace = params.nativePlace + _formParams.idCard = params.idCard.originalValue + _formParams.dateOfBirth = params.dateOfBirth + _formParams.securityNumber = params.securityNumber + _formParams.noSecurityNumberDesc = params?.noSecurityNumberDesc + _formParams.homeAddress = params.homeAddress + _formParams.remark = params.remark + } + + const _formRef = ref(null) + const uploadFileRef = ref(null) + const _formOptions = ref>({ + photo: { + type: 'custom', + label: '头像', + customRender: () => , + }, + + name: { + type: 'input', + label: '姓名', + required: true, + }, + idCard: { + type: 'custom', + label: '身份证', + required: true, + customRender: () => ( + + + + + ), + }, + + telephone: { + type: 'input', + label: '手机号', + required: true, + }, + sex: { + type: 'radioGroup', + label: '性别', + required: true, + options: [...dictSelectNodes('Sex')], + }, + securityNumber: { + type: 'input', + label: '保安证号', + required: true, + }, + dateOfBirth: { + type: 'datePicker', + label: '出生日期', + componentsProps: { + valueFormat: 'YYYY-MM-DD HH:mm:ss', + }, + required: true, + }, + + workPost: { + type: 'input', + label: '工作岗位', + }, + nativePlace: { + type: 'input', + label: '籍贯', + }, + homeAddress: { + type: 'input', + label: '家庭住址', + }, + noSecurityNumberDesc: { + type: 'input', + label: '无证说明', + }, + + remark: { + type: 'inputTextArea', + label: '备注', + }, + }) + Modal.confirm({ + title: params.name ? `【${params.name}】 编辑保安信息` : '新增保安人员', + width: 600, + icon: ' ', + centered: true, + content: () => , + onOk: async () => { + await _formRef.value?.validate() + const resp = await api.post('/m2/eu/add_upd_sec_user', { + ..._formParams, + }) + message.success(resp.message) + clearForm() + callback && callback() + }, + onCancel: async () => { + clearForm() + }, + }) +} +const clearForm = () => { + _formParams.snowFlakeId = '' + _formParams.serviceProjectId = '' + _formParams.securityUnitId = '' + _formParams.name = '' + _formParams.photo = '' + _formParams.telephone = '' + _formParams.workPost = '' + _formParams.sex = '' + _formParams.nativePlace = '' + _formParams.idCard = '' + _formParams.dateOfBirth = '' + _formParams.securityNumber = '' + _formParams.noSecurityNumberDesc = '' + _formParams.homeAddress = '' + _formParams.remark = '' +} +export const showEnterprisesUnit = (record_) => { + // console.log('🚀 ~ showEnterprisesUnit ~ record_:', record_) + const _tableRef = ref>(null) + const _columns: _TableProps['columns'] = [ + { + dataIndex: 'name', + title: '姓名', + width: 100, + ellipsis: true, + }, + + { + dataIndex: 'idCard', + title: '身份证', + customRender: ({ text }) => { + return text.desensitizedValue + }, + width: 160, + ellipsis: true, + }, + + { + dataIndex: 'sex', + title: '性别', + width: 60, + customRender: ({ record }) => { + return {record.sex.label} + }, + }, + { + dataIndex: 'dateOfBirth', + title: '出生日期', + width: 100, + ellipsis: true, + }, + { + dataIndex: 'telephone', + title: '手机号', + width: 120, + ellipsis: true, + customRender: ({ text }) => text?.originalValue, + }, + { + dataIndex: 'securityNumber', + title: '保安证号', + width: 150, + ellipsis: true, + }, + { + dataIndex: 'nativePlace', + title: '籍贯', + width: 120, + ellipsis: true, + }, + { + dataIndex: 'workPost', + title: '工作岗位', + width: 120, + ellipsis: true, + }, + + { + dataIndex: 'homeAddress', + title: '家庭住址', + width: 120, + ellipsis: true, + }, + { + dataIndex: 'remark', + title: '备注', + width: 120, + }, + { + dataIndex: 'createTime', + title: '创建时间', + width: 120, + ellipsis: true, + }, + + { + dataIndex: 'opt', + title: '操作', + width: 200, + fixed: 'right', + customRender: ({ record }) => ( + + + + + ), + }, + ] + const x: number = _columns.reduce((a, b) => a + (b.width as number), 0) + const _reqApi: _TableProps['requestApi'] = (params) => { + // console.log(record_); + + ;(params as PageParams).params.serviceProjectId = record_.snowFlakeId + return api.post('/m2/eu/sec_user_pager', params) + } + Modal.info({ + title: `【${record_.name}】 管理保安人员`, + width: '80%', + centered: true, + maskClosable: true, + content: () => ( + { + return ( + + + + ) + }, + } as TableProMaxSlots + } + /> + ), + }) +} diff --git a/policeManagement/src/views/query/publicUnit.vue b/policeManagement/src/views/query/publicUnit.vue index 6e28d56..ed7ad61 100644 --- a/policeManagement/src/views/query/publicUnit.vue +++ b/policeManagement/src/views/query/publicUnit.vue @@ -1,197 +1,716 @@ - - + + diff --git a/policeManagement/src/views/register.vue b/policeManagement/src/views/register.vue index 9da3a97..5fd490b 100644 --- a/policeManagement/src/views/register.vue +++ b/policeManagement/src/views/register.vue @@ -15,6 +15,8 @@
+ + + \ No newline at end of file diff --git a/policeManagement/src/vite-env.d.ts b/policeManagement/src/vite-env.d.ts index afb3748..830ddff 100644 --- a/policeManagement/src/vite-env.d.ts +++ b/policeManagement/src/vite-env.d.ts @@ -1,20 +1,37 @@ +// /// + +// // vue3导入模块报红解决方案——找不到模块“./XXX.vue”或其相应的类型声明 +// // 报错原因是:typescript 只能理解 .ts 文件,无法理解 .vue文件 +// // 因此需要给.vue文件加上类型说明文件 +// declare module '*.vue' { +// import type { DefineComponent } from 'vue' +// // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types +// const component: DefineComponent<{}, {}, any> +// export default component +// } + + +// declare module 'lodash-es' { +// import { includes, isEmpty, ceil, divide } from 'lodash'; +// export { includes, isEmpty, ceil, divide }; +// } +// interface ImportMetaEnv { +// // 项目名称 +// readonly VITE_APP_NAME: string; +// // 当前环境 +// readonly VITE_APP_ENV: 'development' | 'production'; +// // 启动端口 +// readonly VITE_APP_PORT: number; + +// // axios +// readonly VITE_APP_BASE_API: string; +// readonly VITE_APP_PROXY_URL: string; + +// // RSA公钥 +// readonly VITE_APP_RSA_PUBLIC_KEY: string; +// } + /// - -// vue3导入模块报红解决方案——找不到模块“./XXX.vue”或其相应的类型声明 -// 报错原因是:typescript 只能理解 .ts 文件,无法理解 .vue文件 -// 因此需要给.vue文件加上类型说明文件 -declare module '*.vue' { - import type { DefineComponent } from 'vue' - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any> - export default component -} - - -declare module 'lodash-es' { - import { includes, isEmpty, ceil, divide } from 'lodash'; - export { includes, isEmpty, ceil, divide }; -} interface ImportMetaEnv { // 项目名称 readonly VITE_APP_NAME: string; @@ -22,14 +39,30 @@ interface ImportMetaEnv { readonly VITE_APP_ENV: 'development' | 'production'; // 启动端口 readonly VITE_APP_PORT: number; + // 模块名称 + readonly VITE_APP_MODULE_NAME: string; // axios readonly VITE_APP_BASE_API: string; readonly VITE_APP_PROXY_URL: string; + // minio + readonly VITE_APP_MINIO_URL: string + readonly VITE_APP_MINIO_BUCKET: string + // RSA公钥 readonly VITE_APP_RSA_PUBLIC_KEY: string; + + // 高德 + VITE_APP_GAODE_KEY: string + VITE_APP_GAODE_VERSION: string + VITE_APP_SECURITY_JS_CODE: string +} + +declare module '*.vue' { + import { DefineComponent, readonly } from "vue" + const component: DefineComponent<{}, {}, any> + export default component } - diff --git a/policeManagement/tsconfig.app.json b/policeManagement/tsconfig.app.json index 7c336d1..2fb1207 100644 --- a/policeManagement/tsconfig.app.json +++ b/policeManagement/tsconfig.app.json @@ -1,82 +1,88 @@ { "compilerOptions": { - "composite": true, // 标记为复合项目的一部分 [ty-reference](1) - "target": "ES2020", // 设置目标 JavaScript 语言标准版本 - "useDefineForClassFields": true, // 为类字段使用 `defineProperty`,以支持装饰器 - "module": "ESNext", // 设置模块系统 - "lib": [ // 指定要包含的类型库 - "ES2020", // 包含 ES2020 的类型定义 - "DOM", // 包含 DOM 类型定义 - "DOM.Iterable" // 包含 DOM 可迭代类型定义 + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": [ + "ES2020", + "DOM", + "DOM.Iterable" ], - "skipLibCheck": true, // 忽略类型库的类型检查 + "skipLibCheck": true, /* Bundler mode */ - "moduleResolution": "bundler", // 设置模块解析策略为 bundler 模式 - "allowImportingTsExtensions": true, // 允许导入 TypeScript 扩展名 - "isolatedModules": true, // 将每个文件视为一个模块 - "moduleDetection": "force", // 强制将所有模块视为 ESM - "noEmit": false, // 允许发出文件 - "declaration": true, // 如果需要生成 .d.ts 文件 - "emitDeclarationOnly": true, // 只发出声明文件,而不生成 JS 文件 - "jsx": "preserve", // 保留 JSX 节点,不转换 - "jsxImportSource": "vue", // JSX 元素来自 Vue + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "preserve", + "jsxImportSource": "vue", /* Linting */ - "strict": false, // 开启所有严格类型检查选项 - "noUnusedLocals": true, // 报告未使用的局部变量 - "noUnusedParameters": true, // 报告未使用的参数 - "noFallthroughCasesInSwitch": true, // 报告 switch 语句中的 fallthrough 错误 - "baseUrl": "./", // 设置基础模块解析目录 + "strict": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "baseUrl": "./", /* 配置别名 */ - "paths": { // 设置路径映射 - "@/*": [ // 将 @/ 映射到 src/ 目录 - "./src/*" + "paths": { + "@/*": [ + "src/*" ] }, - "allowSyntheticDefaultImports": true // 允许默认导入 + "allowSyntheticDefaultImports": true }, - "include": [ // 指定包含的文件 - "src/**/*.ts", // 包括 src 目录下的所有 TypeScript 文件 - "src/**/*.d.ts", // 包括 src 目录下的所有类型声明文件 - "src/**/*.tsx", // 包括 src 目录下的所有 JSX 文件 - "src/**/*.vue", // 包括 src 目录下的所有 Vue 文件 - "global.d.ts" + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" ] } -// // 脚手架自带 配置: + + + + // { // "compilerOptions": { -// "target": "ES2020", -// "useDefineForClassFields": true, -// "module": "ESNext", -// "lib": [ -// "ES2020", -// "DOM", -// "DOM.Iterable" +// "composite": true, // 标记为复合项目的一部分 [ty-reference](1) +// "target": "ES2020", // 设置目标 JavaScript 语言标准版本 +// "useDefineForClassFields": true, // 为类字段使用 `defineProperty`,以支持装饰器 +// "module": "ESNext", // 设置模块系统 +// "lib": [ // 指定要包含的类型库 +// "ES2020", // 包含 ES2020 的类型定义 +// "DOM", // 包含 DOM 类型定义 +// "DOM.Iterable" // 包含 DOM 可迭代类型定义 // ], -// "skipLibCheck": true, +// "skipLibCheck": true, // 忽略类型库的类型检查 // /* Bundler mode */ -// "moduleResolution": "bundler", -// "allowImportingTsExtensions": true, -// "isolatedModules": true, -// "moduleDetection": "force", -// "noEmit": true, -// "jsx": "preserve", +// "moduleResolution": "bundler", // 设置模块解析策略为 bundler 模式 +// "allowImportingTsExtensions": true, // 允许导入 TypeScript 扩展名 +// "isolatedModules": true, // 将每个文件视为一个模块 +// "moduleDetection": "force", // 强制将所有模块视为 ESM +// "noEmit": false, // 允许发出文件 +// "declaration": true, // 如果需要生成 .d.ts 文件 +// "emitDeclarationOnly": true, // 只发出声明文件,而不生成 JS 文件 +// "jsx": "preserve", // 保留 JSX 节点,不转换 +// "jsxImportSource": "vue", // JSX 元素来自 Vue // /* Linting */ -// "strict": true, -// "noUnusedLocals": true, -// "noUnusedParameters": true, -// "noFallthroughCasesInSwitch": true, -// "baseUrl": "/", +// "strict": false, // 开启所有严格类型检查选项 +// "noUnusedLocals": true, // 报告未使用的局部变量 +// "noUnusedParameters": true, // 报告未使用的参数 +// "noFallthroughCasesInSwitch": true, // 报告 switch 语句中的 fallthrough 错误 +// "baseUrl": "./", // 设置基础模块解析目录 // /* 配置别名 */ -// "paths": { -// "@/*": [ +// "paths": { // 设置路径映射 +// "@/*": [ // 将 @/ 映射到 src/ 目录 // "./src/*" // ] // }, +// "allowSyntheticDefaultImports": true // 允许默认导入 // }, -// "include": [ -// "src/**/*.ts", -// "src/**/*.tsx", -// "src/**/*.vue" +// "include": [ // 指定包含的文件 +// "src/**/*.ts", // 包括 src 目录下的所有 TypeScript 文件 +// "src/**/*.d.ts", // 包括 src 目录下的所有类型声明文件 +// "src/**/*.tsx", // 包括 src 目录下的所有 JSX 文件 +// "src/**/*.vue", // 包括 src 目录下的所有 Vue 文件 +// "global.d.ts" // ] // } \ No newline at end of file diff --git a/policeManagement/tsconfig.json b/policeManagement/tsconfig.json index 80e1767..f39f347 100644 --- a/policeManagement/tsconfig.json +++ b/policeManagement/tsconfig.json @@ -1,40 +1,43 @@ -{ - "compilerOptions": { - "baseUrl": "/", // 确保相对路径从根目录开始 - "paths": { // 设置路径映射 - "@/*": [ // 将 @/ 映射到 src/ 目录 - "./src/*" - ] - } - }, - "files": [], // 可以留空,表示不显式指定任何文件 - "references": [ // 引用其他 tsconfig 文件 - { - "path": "./tsconfig.app.json" // 引用 tsconfig.app.json - }, - { - "path": "./tsconfig.node.json" // 引用 tsconfig.node.json - } - ], - "include": [ // 指定包含的文件 - "env.d.ts", // 包括环境类型的声明文件 - "src/vite-env.d.ts", // 包括 Vite 环境类型的声明文件 - "src/**/*.ts", // 包括 src 目录下的所有 TypeScript 文件 - "src/**/*.tsx", // 包括 src 目录下的所有 JSX 文件 - "src/**/*.vue", // 包括 src 目录下的所有 Vue 文件 - "global.d.ts", // 确保 global.d.ts 文件被包含 - "vite.config.ts" // Node 配置文件 - ] -} -// // 脚手架自带 配置: // { -// "files": [], -// "references": [ +// "compilerOptions": { +// "jsx": "react", +// "baseUrl": "/", // 确保相对路径从根目录开始 +// "paths": { // 设置路径映射 +// "@/*": [ // 将 @/ 映射到 src/ 目录 +// "./src/*" +// ] +// } +// }, +// "files": [], // 可以留空,表示不显式指定任何文件 +// "references": [ // 引用其他 tsconfig 文件 // { -// "path": "./tsconfig.app.json" +// "path": "./tsconfig.app.json" // 引用 tsconfig.app.json // }, // { -// "path": "./tsconfig.node.json" +// "path": "./tsconfig.node.json" // 引用 tsconfig.node.json // } +// ], +// "include": [ // 指定包含的文件 +// "env.d.ts", // 包括环境类型的声明文件 +// "src/vite-env.d.ts", // 包括 Vite 环境类型的声明文件 +// "src/**/*.ts", // 包括 src 目录下的所有 TypeScript 文件 +// "src/**/*.tsx", // 包括 src 目录下的所有 JSX 文件 +// "src/**/*.vue", // 包括 src 目录下的所有 Vue 文件 +// "global.d.ts", // 确保 global.d.ts 文件被包含 +// "vite.config.ts" // Node 配置文件 // ] -// } \ No newline at end of file +// } + + +// 脚手架自带 配置: +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/policeManagement/tsconfig.node.json b/policeManagement/tsconfig.node.json index 2ce7ab2..8dab69e 100644 --- a/policeManagement/tsconfig.node.json +++ b/policeManagement/tsconfig.node.json @@ -1,47 +1,47 @@ -{ - "compilerOptions": { - "composite": true, // 标记为复合项目的一部分 [ty-reference](1) - "target": "ES2022", // 设置目标 JavaScript 语言标准版本 - "lib": [ // 指定要包含的类型库 - "ES2023" // 包含 ES2023 的类型定义 - ], - "module": "ESNext", // 设置模块系统 - "skipLibCheck": true, // 忽略类型库的类型检查 - /* Bundler mode */ - "moduleResolution": "bundler", // 设置模块解析策略为 bundler 模式 - "allowImportingTsExtensions": true, // 允许导入 TypeScript 扩展名 - "isolatedModules": true, // 将每个文件视为一个模块 - "moduleDetection": "force", // 强制将所有模块视为 ESM - "noEmit": false, // 允许发出文件 - "declaration": true, // 如果需要生成 .d.ts 文件 - "emitDeclarationOnly": true, // 只发出声明文件,而不生成 JS 文件 - "strict": true, // 开启所有严格类型检查选项 - "noUnusedLocals": true, // 报告未使用的局部变量 - "noUnusedParameters": true, // 报告未使用的参数 - "noFallthroughCasesInSwitch": true // 报告 switch 语句中的 fallthrough 错误 - }, - "include": [ // 指定包含的文件 - "vite.config.ts" // 包括 Vite 配置文件 - ] -} -// 脚手架自带 配置: // { // "compilerOptions": { -// "target": "ES2022", -// "lib": ["ES2023"], -// "module": "ESNext", -// "skipLibCheck": true, +// "composite": true, // 标记为复合项目的一部分 [ty-reference](1) +// "target": "ES2022", // 设置目标 JavaScript 语言标准版本 +// "lib": [ // 指定要包含的类型库 +// "ES2023" // 包含 ES2023 的类型定义 +// ], +// "module": "ESNext", // 设置模块系统 +// "skipLibCheck": true, // 忽略类型库的类型检查 // /* Bundler mode */ -// "moduleResolution": "bundler", -// "allowImportingTsExtensions": true, -// "isolatedModules": true, -// "moduleDetection": "force", -// "noEmit": true, -// /* Linting */ -// "strict": true, -// "noUnusedLocals": true, -// "noUnusedParameters": true, -// "noFallthroughCasesInSwitch": true +// "moduleResolution": "bundler", // 设置模块解析策略为 bundler 模式 +// "allowImportingTsExtensions": true, // 允许导入 TypeScript 扩展名 +// "isolatedModules": true, // 将每个文件视为一个模块 +// "moduleDetection": "force", // 强制将所有模块视为 ESM +// "noEmit": false, // 允许发出文件 +// "declaration": true, // 如果需要生成 .d.ts 文件 +// "emitDeclarationOnly": true, // 只发出声明文件,而不生成 JS 文件 +// "strict": true, // 开启所有严格类型检查选项 +// "noUnusedLocals": true, // 报告未使用的局部变量 +// "noUnusedParameters": true, // 报告未使用的参数 +// "noFallthroughCasesInSwitch": true // 报告 switch 语句中的 fallthrough 错误 // }, -// "include": ["vite.config.ts"] -// } \ No newline at end of file +// "include": [ // 指定包含的文件 +// "vite.config.ts" // 包括 Vite 配置文件 +// ] +// } +// 脚手架自带 配置: +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} \ No newline at end of file diff --git a/policeManagement/vite.config.ts b/policeManagement/vite.config.ts index 1ca70f5..06cccca 100644 --- a/policeManagement/vite.config.ts +++ b/policeManagement/vite.config.ts @@ -14,7 +14,11 @@ export default defineConfig(({ mode }) => { define: { __APP_ENV: JSON.stringify(env) }, - base: '/', + // base: './', + base: '/policeManagement/', + // base: '/', + + plugins: [ vue(), vueJsx(), @@ -45,7 +49,7 @@ export default defineConfig(({ mode }) => { } }, build: { - outDir: 'dist', + outDir: 'policeManagement', target: 'modules', chunkSizeWarningLimit: 1500, minify: 'terser', diff --git a/policeSecurityServer/.gitignore b/policeSecurityServer/.gitignore index 30e9ad5..e2c40b8 100644 --- a/policeSecurityServer/.gitignore +++ b/policeSecurityServer/.gitignore @@ -2,4 +2,5 @@ target logs temp -HELP.md \ No newline at end of file +HELP.md +rebel.xml \ No newline at end of file diff --git a/policeSecurityServer/Jenkinsfile b/policeSecurityServer/Jenkinsfile new file mode 100644 index 0000000..040cad9 --- /dev/null +++ b/policeSecurityServer/Jenkinsfile @@ -0,0 +1,56 @@ +pipeline { + agent any + tools { + jdk "jdk-17.0.11" + maven "apache-maven-3.8.8" + } + stages { + stage('拉取代码') { + steps { + echo '开始拉取代码' + checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: '3', url: 'http://175.6.124.250:3100/luozhun/policeSecurity.git']]) + echo '代码拉取成功' + } + } + stage('构建后台服务') { + steps{ + echo '开始构建后台服务' + sh 'cd /var/jenkins_home/workspace/警保联动后端服务/policeSecurityServer && mvn clean -DskipTests=true package -P prod' + echo '后台服务构建完成' + } + } + stage('ssh远程推送代码'){ + steps{ + echo '开始推送构建产物' + script{ + def remote = [:] + remote.name = 'server-118.253.177.137' + remote.host = '118.253.177.137' + remote.port = 55555 + remote.allowAnyHosts = true + withCredentials([usernamePassword(credentialsId: '4', passwordVariable: 'password', usernameVariable: 'username')]) { + remote.user = "${username}" + remote.password = "${password}" + } + sshCommand remote: remote, command: 'pwd=$(pwd) echo "ssh连接成功!当前工作目录:$(pwd)"' + + sshCommand remote: remote, command: 'echo "停止后台服务..."' + sshCommand remote: remote, command: '''docker stop policeSecurityServer''' + sshCommand remote: remote, command: 'echo "后台服务已停止..."' + + sshCommand remote: remote, command: 'echo "删除原来的server.jar..."' + sshRemove remote: remote, path: '/home/javaProject/policeSecurity/policeSecurityServer.jar' + sshCommand remote: remote, command: 'echo "server.jar删除成功!"' + + sshCommand remote: remote, command: 'echo "将构建的server.jar发送到服务器..."' + sshPut remote: remote, from: '/var/jenkins_home/workspace/警保联动后端服务/policeSecurityServer/target/policeSecurityServer.jar', into: '/home/javaProject/policeSecurity' + sshCommand remote: remote, command: 'echo "server.jar发送成功!"' + + sshCommand remote: remote, command: 'echo "启动后台服务..."' + sshCommand remote: remote, command: '''docker start policeSecurityServer''' + sshCommand remote: remote, command: 'echo "后台服务启动成功!"' + } + } + } + } +} \ No newline at end of file diff --git a/policeSecurityServer/pom.xml b/policeSecurityServer/pom.xml index 61d3d4b..140472e 100644 --- a/policeSecurityServer/pom.xml +++ b/policeSecurityServer/pom.xml @@ -23,6 +23,7 @@ 3.3.4 8.0.32 3.5.7 + 25.2 1.2.20 8.4.3 4.8.1 @@ -190,6 +191,17 @@ mybatis-plus-spring-boot3-starter ${mybatis.plus.version} + + + org.geotools + gt-main + ${geotools.version} + + + org.geotools + gt-geojson + ${geotools.version} + io.minio diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/CheckUserType.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/CheckUserType.java index 4621a12..532de26 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/annotation/CheckUserType.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/annotation/CheckUserType.java @@ -1,6 +1,6 @@ package com.changhu.common.annotation; -import org.springframework.web.bind.annotation.RestController; +import com.changhu.common.db.enums.UserType; import java.lang.annotation.*; @@ -12,7 +12,6 @@ import java.lang.annotation.*; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented -@RestController public @interface CheckUserType { /** @@ -23,5 +22,5 @@ public @interface CheckUserType { /** * 需要的客户端类型 */ - UserType[] userTypes(); + UserType[] userTypes() default {}; } diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/Desensitized.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/Desensitized.java index 66611fc..c1e5876 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/annotation/Desensitized.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/annotation/Desensitized.java @@ -15,5 +15,17 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Desensitized { + /** + * 脱敏类型 + * + * @return 脱敏类型 + */ DesensitizedUtil.DesensitizedType value(); + + /** + * 是否保留原字段 + * + * @return 原字段+加密字段 的map + */ + boolean keepOriginalField() default false; } \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsExtData.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsExtData.java index 0a2f145..9276b63 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsExtData.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsExtData.java @@ -4,7 +4,7 @@ import java.lang.annotation.*; /** * author: luozhun - * desc: 是拓展属性 + * desc: 标注是拓展属性 * createTime: 2023/11/1 17:25 */ @Documented diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsWhiteList.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsWhiteList.java new file mode 100644 index 0000000..a213a64 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/annotation/IsWhiteList.java @@ -0,0 +1,14 @@ +package com.changhu.common.annotation; + +import java.lang.annotation.*; + +/** + * @author 20252 + * @createTime 2024/11/21 下午3:34 + * @desc IsWhiteList... + */ +@Documented +@Retention(value = RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.TYPE}) +public @interface IsWhiteList { +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/JsonBody.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/JsonBody.java index c53df87..26f7149 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/annotation/JsonBody.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/annotation/JsonBody.java @@ -1,7 +1,5 @@ package com.changhu.common.annotation; -import org.springframework.web.bind.annotation.RestController; - import java.lang.annotation.*; /** @@ -12,7 +10,6 @@ import java.lang.annotation.*; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented -@RestController public @interface JsonBody { boolean value() default true; } diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/RealDelete.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/RealDelete.java deleted file mode 100644 index 755883d..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/common/annotation/RealDelete.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.changhu.common.annotation; - -import java.lang.annotation.*; - -/** - * @author 20252 - * @createTime 2024/6/26 上午9:41 - * @desc RealDelete... - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface RealDelete { -} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/annotation/UserType.java b/policeSecurityServer/src/main/java/com/changhu/common/annotation/UserType.java deleted file mode 100644 index b63153c..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/common/annotation/UserType.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.changhu.common.annotation; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @author 20252 - * @createTime 2024/9/6 上午11:13 - * @desc UserType... - */ -@AllArgsConstructor -@Getter -public enum UserType { - MANAGEMENT_POLICE("公安后台用户"), - MANAGEMENT_SECURITY("保安后台用户"), - MANAGEMENT_SUPER("超级后台用户"), - - MINI_PROGRAM_POLICE("小程序公安用户"), - MINI_PROGRAM_PROJECT_MANAGE("小程序项目经理"); - - private final String remark; -} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/cache/GlobalCacheManager.java b/policeSecurityServer/src/main/java/com/changhu/common/cache/GlobalCacheManager.java new file mode 100644 index 0000000..701a471 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/cache/GlobalCacheManager.java @@ -0,0 +1,79 @@ +package com.changhu.common.cache; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ClassUtil; +import cn.hutool.core.util.ReflectUtil; +import com.changhu.common.annotation.IsExtData; +import com.changhu.common.db.BaseEnum; +import com.changhu.common.pojo.vo.SelectNodeVo; +import lombok.extern.slf4j.Slf4j; +import org.ehcache.impl.internal.concurrent.ConcurrentHashMap; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author 20252 + * @createTime 2024/11/15 上午9:03 + * @desc GlobalCacheManager... + */ +@Slf4j +public class GlobalCacheManager { + /** + * 枚举缓存 + */ + public static final Map, Map, SelectNodeVo>> ENUM_CACHE = new ConcurrentHashMap<>(); + + static { + //初始化枚举数据 + initEnum(); + } + + static void initEnum() { + //在包下扫描出BaseEnum的子类 + Set> classes = ClassUtil.scanPackageBySuper(BaseEnum.class.getPackageName(), BaseEnum.class); + //序列化方法 + Method superSerializer = ClassUtil.getDeclaredMethod(BaseEnum.class, "serializer"); + for (Class aClass : classes) { + BaseEnum[] enumConstants = (BaseEnum[]) aClass.getEnumConstants(); + if (enumConstants == null) { + continue; + } + //子类是否重写了父类的serializer方法 + boolean isRewriteSerializer = !superSerializer.equals(ClassUtil.getDeclaredMethod(aClass, "serializer")); + // 获取所有字段并过滤出非静态字段并带有 IsExtData 注解的字段 + List extDataFields = Arrays.stream(aClass.getDeclaredFields()) + .filter(field -> !Modifier.isStatic(field.getModifiers())) + .filter(field -> field.getAnnotation(IsExtData.class) != null) + .collect(Collectors.toList()); + + Map, SelectNodeVo> map = new LinkedHashMap<>(); + + Stream.of(enumConstants).forEach(v -> { + //如果子类重写父类的方法 则直接使用子类的结果 + if (isRewriteSerializer) { + map.put(v, v.serializer()); + } else { + SelectNodeVo vo = new SelectNodeVo<>(); + vo.setValue(v.getValue()); + vo.setLabel(v.getLabel()); + if (CollUtil.isNotEmpty(extDataFields)) { + Dict extData = Dict.create(); + for (Field extDataField : extDataFields) { + extData.put(extDataField.getName(), ReflectUtil.getFieldValue(v, extDataField)); + } + vo.setExtData(extData); + } + map.put(v, vo); + } + }); + GlobalCacheManager.ENUM_CACHE.put(aClass, map); + } + log.info("初始化枚举字典数据----完成"); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/BaseEnum.java b/policeSecurityServer/src/main/java/com/changhu/common/db/BaseEnum.java index 9dd7153..df0235a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/db/BaseEnum.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/BaseEnum.java @@ -1,8 +1,11 @@ package com.changhu.common.db; -import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; +import com.changhu.common.cache.GlobalCacheManager; import com.changhu.common.exception.MessageException; +import com.changhu.common.pojo.vo.SelectNodeVo; + +import java.util.Map; /** * author: luozhun @@ -10,6 +13,7 @@ import com.changhu.common.exception.MessageException; * createTime: 2023/8/16 17:38 */ public interface BaseEnum { + /** * 获取值 * @@ -26,19 +30,22 @@ public interface BaseEnum { @SuppressWarnings("unchecked") static > T valueOf(Class> enumType, P code) { - BaseEnum

[] enumConstants = enumType.getEnumConstants(); - for (BaseEnum

pBaseEnum : enumConstants) { - if (ObjectUtil.equals(code, pBaseEnum.getValue())) { - return (T) pBaseEnum; + Map, SelectNodeVo> nodeVoMap = GlobalCacheManager.ENUM_CACHE.get(enumType); + for (Map.Entry, SelectNodeVo> mapEntry : nodeVoMap.entrySet()) { + if (ObjectUtil.equals(code, mapEntry.getValue().getValue())) { + return (T) mapEntry.getKey(); } } throw new MessageException("不存在值为:{} 的【{}】对象!", code.toString(), enumType.componentType().getSimpleName()); } - default Object serializer() { - return Dict.of( - "value", this.getValue(), - "label", this.getLabel() - ); + @SuppressWarnings("unchecked") + default SelectNodeVo serializer() { + Map, SelectNodeVo> map = GlobalCacheManager.ENUM_CACHE.get(this.getClass()); + if (map != null) { + return (SelectNodeVo) map.get(this); + } + return null; } + } diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/CheckStatus.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/CheckStatus.java index 3116c84..b52332d 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/CheckStatus.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/CheckStatus.java @@ -1,6 +1,5 @@ package com.changhu.common.db.enums; -import cn.hutool.core.lang.Dict; import com.baomidou.mybatisplus.annotation.IEnum; import com.changhu.common.annotation.IsExtData; import com.changhu.common.db.BaseEnum; @@ -25,12 +24,4 @@ public enum CheckStatus implements BaseEnum, IEnum { @IsExtData private final String color; - @Override - public Object serializer() { - return Dict.of( - "value", this.getValue(), - "label", this.getLabel(), - "extData", Dict.of("color", this.color) - ); - } } diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/EnterprisesUnitType.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/EnterprisesUnitType.java new file mode 100644 index 0000000..91a36c4 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/EnterprisesUnitType.java @@ -0,0 +1,54 @@ +package com.changhu.common.db.enums; + +import cn.hutool.core.lang.Dict; +import com.baomidou.mybatisplus.annotation.IEnum; +import com.changhu.common.annotation.IsExtData; +import com.changhu.common.db.BaseEnum; +import com.changhu.common.pojo.vo.SelectNodeVo; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 20252 + * @createTime 2024/11/5 下午4:22 + * @desc EnterprisesUnitType... + */ +@Getter +@AllArgsConstructor +public enum EnterprisesUnitType implements BaseEnum, IEnum { + + party_government("party_government", "党政机关", "party_government.png"), + medical("medical", "医疗机构", "medical.png"), + residential("residential", "小区", "residential.png"), + higher_learning("higher_learning", "高等院校", "higher_learning.png"), + primary_and_secondary("primary_and_secondary", "中小学幼儿园", "primary_and_secondary.png"), + shopping_supermarkets("shopping_supermarkets", "商场超市", "shopping_supermarkets.png"), + financial("financial", "金融机构", "financial.png"), + hydropower("hydropower", "水电油气", "hydropower.png"), + key_projects("key_projects", "重点工程建设单位", "key_projects.png"), + delivery_logistics("delivery_logistics", "寄递物流", "delivery_logistics.png"), + military("military", "军工、科研单位", "military.png"), + wen_bo("wen_bo", "文博单位", "wen_bo.png"), + important_news("important_news ", "重要新闻单位", "important_news.png"), + large_scale_material("large_scale_material ", "大型物资储备", "large_scale_material.png"), + transportation("transportation", "交通运输企业", "transportation.png"), + industrial_park("industrial_park", "工业园区企业", "industrial_park.png"), + complex_public_security("complex_public_security", "治安复杂场所", "complex_public_security.png"), + making_explosive_easily("making_explosive_easily ", "易制爆", "making_explosive_easily.png"), + hazardous_materials("hazardous_materials ", "危化物品存放场所", "hazardous_materials.png"), + other("other", "其他单位", "other.png"); + + private final String value; + private final String label; + @IsExtData + private final String icon; + + @Override + public SelectNodeVo serializer() { + return SelectNodeVo.builder() + .value(this.getValue()) + .label(this.getLabel()) + .extData(Dict.of("icon", "/resources/icon/gaode/marker/" + this.icon)) + .build(); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/IsEnable.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/IsEnable.java index 9ab863e..5244f02 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/IsEnable.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/IsEnable.java @@ -1,6 +1,5 @@ package com.changhu.common.db.enums; -import cn.hutool.core.lang.Dict; import com.baomidou.mybatisplus.annotation.IEnum; import com.changhu.common.annotation.IsExtData; import com.changhu.common.db.BaseEnum; @@ -25,12 +24,4 @@ public enum IsEnable implements BaseEnum, IEnum { @IsExtData private final String color; - @Override - public Object serializer() { - return Dict.of( - "value", this.getValue(), - "label", this.getLabel(), - "extData", Dict.of("color", this.color) - ); - } } \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/SelectType.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/SelectType.java new file mode 100644 index 0000000..abdc606 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/SelectType.java @@ -0,0 +1,25 @@ +package com.changhu.common.db.enums; + +import com.baomidou.mybatisplus.annotation.IEnum; +import com.changhu.common.db.BaseEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * author: luozhun + * desc: 单选或多选 + * createTime: 2023/8/16 17:39 + */ +@Getter +@AllArgsConstructor +public enum SelectType implements BaseEnum, IEnum { + + RADIO("radio", "单选"), + MULTIPLE("multiple", "多选"), + ; + + private final String value; + private final String label; + +} + diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectTwoType.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectTwoType.java new file mode 100644 index 0000000..70b506a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectTwoType.java @@ -0,0 +1,28 @@ +package com.changhu.common.db.enums; + +import com.baomidou.mybatisplus.annotation.IEnum; +import com.changhu.common.annotation.IsExtData; +import com.changhu.common.db.BaseEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 20252 + * @createTime 2024/9/5 上午11:04 + * @desc 服务项目二级类型 + */ +@AllArgsConstructor +@Getter +public enum ServiceProjectTwoType implements BaseEnum, IEnum { + + SECURITY("outsource", "外包", ServiceProjectType.SECURITY.getValue()), + PROPERTY_RECRUITMENT("property_recruitment", "物业自招", ServiceProjectType.SECURITY.getValue()), + OTHER_RECRUITMENT("other_recruitment", "其他自招", ServiceProjectType.SECURITY.getValue()), + ; + + + private final String value; + private final String label; + @IsExtData + private final String parentType; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectType.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectType.java index d7d3961..6177aa3 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectType.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/ServiceProjectType.java @@ -15,7 +15,6 @@ import lombok.Getter; public enum ServiceProjectType implements BaseEnum, IEnum { SECURITY("security", "安保"), - PROPERTY("property", "物业"), ; diff --git a/policeSecurityServer/src/main/java/com/changhu/common/db/enums/UserType.java b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/UserType.java new file mode 100644 index 0000000..5a8d11e --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/db/enums/UserType.java @@ -0,0 +1,24 @@ +package com.changhu.common.db.enums; + +import com.changhu.common.db.BaseEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 20252 + * @createTime 2024/9/6 上午11:13 + * @desc UserType... + */ +@AllArgsConstructor +@Getter +public enum UserType implements BaseEnum { + MANAGEMENT_POLICE("management_police", "公安后台用户"), + MANAGEMENT_SECURITY("management_security", "保安后台用户"), + MANAGEMENT_SUPER("management_super", "超级后台用户"), + + MINI_PROGRAM_POLICE("mini_program_police", "小程序公安用户"), + MINI_PROGRAM_PROJECT_MANAGE("mini_program_project_manage", "小程序项目经理"); + + private final String value; + private final String label; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/pojo/params/MapVisionParams.java b/policeSecurityServer/src/main/java/com/changhu/common/pojo/params/MapVisionParams.java new file mode 100644 index 0000000..4842296 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/pojo/params/MapVisionParams.java @@ -0,0 +1,22 @@ +package com.changhu.common.pojo.params; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.locationtech.jts.geom.Point; + +/** + * @author 20252 + * @createTime 2024/11/21 上午11:18 + * @desc MapVisionParams... + */ +@Data +public class MapVisionParams { + @Schema(description = "左上角") + private Point upperLeft; + @Schema(description = "右上角") + private Point upperRight; + @Schema(description = "左下角") + private Point lowerLeft; + @Schema(description = "右下角") + private Point lowerRight; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/CreateOrUpdateUser.java b/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/CreateOrUpdateUser.java new file mode 100644 index 0000000..5780d34 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/CreateOrUpdateUser.java @@ -0,0 +1,24 @@ +package com.changhu.common.pojo.vo; + +import com.changhu.common.db.enums.UserType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/12 下午3:27 + * @desc 通过视图去找出数据创建人 + */ +@Data +public class CreateOrUpdateUser { + @Schema(description = "用户id") + private Long snowFlakeId; + @Schema(description = "用户名字") + private String name; + @Schema(description = "用户类型") + private UserType type; + @Schema(description = "单位id") + private Long unitId; + @Schema(description = "单位名字") + private String unitName; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/DesensitizedVo.java b/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/DesensitizedVo.java new file mode 100644 index 0000000..91e1eca --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/DesensitizedVo.java @@ -0,0 +1,26 @@ +package com.changhu.common.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author 20252 + * @createTime 2024/11/19 上午9:17 + * @desc 脱敏数据 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DesensitizedVo { + /** + * 原始数据 + */ + private String originalValue; + /** + * 脱敏数据 + */ + private String desensitizedValue; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/TreeNodeVo.java b/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/TreeNodeVo.java index 8b21da7..96a7780 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/TreeNodeVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/pojo/vo/TreeNodeVo.java @@ -46,6 +46,11 @@ public class TreeNodeVo implements Serializable { */ @Schema(description = "节点名称") private String label; + /** + * 是否是叶子节点 + */ + @Schema(description = "是否是叶子节点") + private Boolean isLeaf; /** * 排序 */ diff --git a/policeSecurityServer/src/main/java/com/changhu/common/utils/GeometryUtil.java b/policeSecurityServer/src/main/java/com/changhu/common/utils/GeometryUtil.java new file mode 100644 index 0000000..fc330d7 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/utils/GeometryUtil.java @@ -0,0 +1,428 @@ +package com.changhu.common.utils; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.changhu.common.exception.MessageException; +import lombok.extern.slf4j.Slf4j; +import org.geotools.geojson.geom.GeometryJSON; +import org.geotools.geometry.jts.JTS; +import org.geotools.referencing.CRS; +import org.geotools.referencing.GeodeticCalculator; +import org.locationtech.jts.geom.*; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKBReader; +import org.locationtech.jts.io.WKTReader; +import org.opengis.referencing.FactoryException; +import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.opengis.referencing.operation.MathTransform; +import org.opengis.referencing.operation.TransformException; + +import java.awt.geom.Point2D; +import java.io.IOException; +import java.io.StringReader; +import java.math.BigDecimal; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.List; +import java.util.Objects; + +/** + * author: luozhun + * desc: GeometryUtil + * createTime: 2023/8/25 18:03 + */ +@Slf4j +public class GeometryUtil { + + /** + * - WGS 84(srid=4326):用于全球地理坐标系统的标准参考坐标系。 + * - 美国地理参考系统(srid=4269):用于美国本土的地图和地理数据。 + * - 欧洲地理参考系统(srid=4258):用于欧洲地图和地理数据。 + * - 中国国家大地坐标系(srid=4490):用于中国的地图和地理数据。 + */ + public static final int SRID = 4326; + public static final String ST_GeomFromText = StrUtil.format("ST_GeomFromText({},{},{})", "?", SRID, "'axis-order=long-lat'"); + private static final GeometryFactory GEOMETRY_FACTORY = new GeometryFactory(new PrecisionModel(), SRID); + private static final GeometryFactory LOCATION_TECH_GEOMETRY_FACTORY = new GeometryFactory(new PrecisionModel(), SRID); + + /** + * 空对象,因为简历空间索引不能为空 Mysql 不支持创建 Empty 的数据 这里自定义一个类型 标识为null + */ + public static Point emptyPoint() { + return createPoint("POINT(0 0)"); + } + + public static Polygon emptyPolygon() { + return createPolygon("POLYGON((0 0, 0 0, 0 0, 0 0))"); + } + + public static LineString emptyLineString() { + return createLineString("LINESTRING(0 0, 0 0)"); + } + + public static MultiPoint emptyMultiPoint() { + return createMultiPoint("MULTIPOINT((0 0))"); + } + + public static MultiPolygon emptyMultiPolygon() { + return createMultiPolygon("MULTIPOLYGON(((0 0, 0 0, 0 0, 0 0)))"); + } + + public static MultiLineString emptyMultiLineString() { + return createMultiLineString("MULTILINESTRING(((0 0, 0 0)))"); + } + + + public static boolean equals(Geometry geometry1, Geometry geometry2) { + return StrUtil.equals(geometry1.toText(), geometry2.toText()); + } + + //** 点 **\\ + + /** + * 创建点对象 + */ + public static Point createPoint(List param) { + if (param == null) { + return null; + } + BigDecimal longitude = param.get(0); + BigDecimal latitude = param.get(1); + if (longitude == null || latitude == null) { + return null; + } + Coordinate coordinate = new Coordinate(longitude.doubleValue(), latitude.doubleValue()); + return GEOMETRY_FACTORY.createPoint(coordinate); + } + + public static Point createPoint(double longitude, double latitude) { + Coordinate coordinate = new Coordinate(longitude, latitude); + return GEOMETRY_FACTORY.createPoint(coordinate); + } + + /** + * 从WKT创建点对象 + * + * @param wkt 注WKT类似: POINT(109.013388 32.715519) + */ + public static Point createPoint(String wkt) { + return createGeometryFromWkt(wkt, Point.class); + } + + /** + * 从WKT创建点对象 + * + * @param bytes 数据库二进制数据 + */ + public static Point createPoint(byte[] bytes) { + return createGeometryFromBytes(bytes, Point.class); + } + + + //** 多边形 **\\ + + /** + * 创建多边形对象 + *

+ * 注:后面可能考虑兼容折线类型,如果是折线类型那么需要规范首尾结点要相同才能构成 polygon 否则构成 polyline + * 目前暂时没有做这方面的规划,用代码兼容了首尾不相等的情况构成polygon + */ + public static Polygon createPolygon(List> params) { + if (params == null || params.size() < 4) { + throw new MessageException("构成多边形至少需要三个有效坐标,并且保证尾部坐标和首部坐标相同"); + } + // 检测首尾是否相等,不相等则补充尾坐标 + List startPoint = params.get(0); + List entPoint = params.get(params.size() - 1); + if (!Objects.equals(startPoint.get(0), entPoint.get(0)) + || !Objects.equals(startPoint.get(1), entPoint.get(1))) { + params.add(params.get(0)); + } + Coordinate[] coordinates = convertBigDecimalList2CoordinateArray(params); + return GEOMETRY_FACTORY.createPolygon(coordinates); + } + + public static Polygon createPolygonWithDouble(List> params) { + if (params == null || params.size() < 4) { + throw new MessageException("构成多边形至少需要三个有效坐标,并且保证尾部坐标和首部坐标相同"); + } + // 检测首尾是否相等,不相等则补充尾坐标 + List startPoint = params.get(0); + List entPoint = params.get(params.size() - 1); + if (!Objects.equals(startPoint.get(0), entPoint.get(0)) + || !Objects.equals(startPoint.get(1), entPoint.get(1))) { + params.add(params.get(0)); + } + Coordinate[] coordinates = convertDoubleList2CoordinateArray(params); + return GEOMETRY_FACTORY.createPolygon(coordinates); + } + + /** + * 从WKT创建多边形对象 + * + * @param wkt 注WKT类似:POLYGON((20 10, 30 0, 40 10, 30 20, 20 10)) + */ + public static Polygon createPolygon(String wkt) { + return createGeometryFromWkt(wkt, Polygon.class); + } + + /** + * 创建多边形对象 + * + * @param bytes 数据库二进制数据 + */ + public static Polygon createPolygon(byte[] bytes) { + return createGeometryFromBytes(bytes, Polygon.class); + } + + //** 折线 **\\ + + /** + * 创建折线对象 + */ + public static LineString createLineString(List> params) { + if (params == null || params.size() < 2) { + throw new MessageException("构成折线至少需要两个有效坐标"); + } + Coordinate[] coordinates = convertBigDecimalList2CoordinateArray(params); + return GEOMETRY_FACTORY.createLineString(coordinates); + } + + /** + * 从 wkt 创建折线对象 + */ + public static LineString createLineString(String wkt) { + return createGeometryFromWkt(wkt, LineString.class); + } + + /** + * 从 bytes 创建折线对象 + */ + public static LineString createLineString(byte[] bytes) { + return createGeometryFromBytes(bytes, LineString.class); + } + + + //** 多点 **\\ + + /** + * 创建多点对象 + */ + public static MultiPoint createMultiPoint(List> multiParam) { + int size = multiParam.size(); + Point[] points = new Point[size]; + for (int i = 0; i < size; i++) { + points[i] = createPoint(multiParam.get(i)); + } + return GEOMETRY_FACTORY.createMultiPoint(points); + } + + + /** + * 从 wkt 创建多点对象 + */ + public static MultiPoint createMultiPoint(String wkt) { + return createGeometryFromWkt(wkt, MultiPoint.class); + } + + + /** + * 从 bytes 创建多点对象 + */ + public static MultiPoint createMultiPoint(byte[] bytes) { + return createGeometryFromBytes(bytes, MultiPoint.class); + } + + + //** 多折线 **\\ + + /** + * 创建多折线对象 + */ + public static MultiLineString createMultiLineString(List>> multiParams) { + int size = multiParams.size(); + LineString[] lineStrings = new LineString[size]; + for (int i = 0; i < size; i++) { + lineStrings[i] = createLineString(multiParams.get(i)); + } + return GEOMETRY_FACTORY.createMultiLineString(lineStrings); + } + + /** + * 从 wkt 创建多折线对象 + */ + public static MultiLineString createMultiLineString(String wkt) { + return createGeometryFromWkt(wkt, MultiLineString.class); + } + + /** + * 从 wkt 创建多折线对象 + */ + public static MultiLineString createMultiLineString(byte[] bytes) { + return createGeometryFromBytes(bytes, MultiLineString.class); + } + + //** 多多边形 **\\ + + /** + * 创建多多边形 + */ + public static MultiPolygon createMultiPolygon(List>> multiParams) { + int size = multiParams.size(); + Polygon[] polygons = new Polygon[size]; + for (int i = 0; i < size; i++) { + polygons[i] = createPolygon(multiParams.get(i)); + } + return GEOMETRY_FACTORY.createMultiPolygon(polygons); + } + + /** + * 从 wkt 创建多多边形 + */ + public static MultiPolygon createMultiPolygon(String wkt) { + return createGeometryFromWkt(wkt, MultiPolygon.class); + } + + /** + * 从 bytes 创建多多边形 + */ + public static MultiPolygon createMultiPolygon(byte[] bytes) { + return createGeometryFromBytes(bytes, MultiPolygon.class); + } + + //** 通用工具 **\\ + + + /** + * bytes 创建空间对象 + * + * @param bytes 数据库的二进制数据 + */ + public static T createGeometryFromBytes(byte[] bytes, Class clazz) { + if (bytes == null) { + return null; + } + try { + WKBReader wkbReader = new WKBReader(GEOMETRY_FACTORY); + byte[] geomBytes = ByteBuffer.allocate(bytes.length - 4).order(ByteOrder.LITTLE_ENDIAN) + .put(bytes, 4, bytes.length - 4).array(); + Geometry geometry = wkbReader.read(geomBytes); + return Convert.convert(clazz, geometry); + } catch (Exception e) { + throw new MessageException("从 Bytes 创建空间对象 {} 时出现错误:{}", clazz.getSimpleName(), e.getMessage()); + } + } + + /** + * 从 wkt 创建空间对象 + * + * @param wkt 类似:POLYGON((20 10, 30 0, 40 10, 30 20, 20 10)) , POINT(109.013388 32.715519) 等 + * @param clazz 继承 + */ + public static T createGeometryFromWkt(String wkt, Class clazz) { + if (wkt == null || StrUtil.isBlank(wkt)) { + return null; + } + try { + WKTReader reader = new WKTReader(GEOMETRY_FACTORY); + Geometry geometry = reader.read(wkt); + return Convert.convert(clazz, geometry); + } catch (ParseException e) { + throw new MessageException("从WKT创建空间对象 {} 时出现错误。wkt:{}", clazz.getSimpleName(), wkt); + } + } + + /** + * 从 GeoJson 创建空间对象 + */ + public static T createGeometryFromGeoJson(String geoJson, Class clazz) { + try { + GeometryJSON geometryJson = new GeometryJSON(20); + Geometry read = geometryJson.read(new StringReader(geoJson)); + return createGeometryFromWkt(read.toString(), clazz); + } catch (IOException e) { + log.error("从 GeoJson 创建空间对象出错:{}", e.getMessage()); + } + return null; + } + + /** + * 将 List 转化为 Coordinate[] + */ + private static Coordinate[] convertBigDecimalList2CoordinateArray(List> params) { + int size = params.size(); + Coordinate[] coordinates = new Coordinate[size]; + for (int i = 0; i < params.size(); i++) { + List param = params.get(i); + Coordinate coordinate = new Coordinate(param.get(0).doubleValue(), param.get(1).doubleValue()); + coordinates[i] = coordinate; + } + return coordinates; + } + + private static Coordinate[] convertDoubleList2CoordinateArray(List> params) { + int size = params.size(); + Coordinate[] coordinates = new Coordinate[size]; + for (int i = 0; i < params.size(); i++) { + List param = params.get(i); + Coordinate coordinate = new Coordinate(param.get(0), param.get(1)); + coordinates[i] = coordinate; + } + return coordinates; + } + + /** + * 计算面积 平方米 + * 28155 .195928.042862 + */ + public static BigDecimal getApproximateArea(Geometry geometry) { + try { + String wkt = geometry.toText(); + WKTReader wktReader = new WKTReader(LOCATION_TECH_GEOMETRY_FACTORY); + Geometry geom = wktReader.read(wkt); + // WGS84(一般项目中常用的是CSR:84和EPSG:4326) + CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:4326"); + // Pseudo-Mercator(墨卡托投影) + CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4490"); + MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true); + Geometry geometryMercator = JTS.transform(geom, transform); + // 面积、周长 + return BigDecimal.valueOf(geometryMercator.getArea()); + } catch (FactoryException | TransformException | ParseException e) { + log.error("计算面积出错:{}", e.getMessage()); + } + return null; + } + + /** + * 当前数据库的数据来源都是高德数据源 坐标系为GCJ02 如果来源是其他的地图的需要根据规则转换成GCJ02 + * 同理如果需要转换到其他的数据源的坐标系也需要进行转换 + */ + public static T convertWgs84ToGcj02(T geometry) { + log.info("原始数据:{}", geometry.toText()); + Coordinate[] coordinates = geometry.getCoordinates(); + for (Coordinate coordinate : coordinates) { + double lon = coordinate.x; + double lat = coordinate.y; + double[] doubles = GpsConvertUtil.wgs84ToGcj02(lon, lat); + coordinate.x = doubles[0]; + coordinate.y = doubles[1]; + } + log.info("转后数据:{}", geometry.toText()); + return geometry; + } + + public static double distance(Point p0, Point p1) { + GeodeticCalculator calculator = new GeodeticCalculator(); + calculator.setStartingGeographicPoint(p0.getX(), p0.getY()); + calculator.setDestinationGeographicPoint(p1.getX(), p1.getY()); + return calculator.getOrthodromicDistance(); + } + + public static Point2D calculateEndingGlobalCoordinates(double longitude, double latitude, double azi, double dis) { + GeodeticCalculator calculator = new GeodeticCalculator(); + calculator.setStartingGeographicPoint(longitude, latitude); + calculator.setDirection(azi, dis); + return calculator.getDestinationGeographicPoint(); + } +} \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/common/utils/GpsConvertUtil.java b/policeSecurityServer/src/main/java/com/changhu/common/utils/GpsConvertUtil.java new file mode 100644 index 0000000..e524a80 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/common/utils/GpsConvertUtil.java @@ -0,0 +1,135 @@ +package com.changhu.common.utils; + +/** + * author: luozhun + * desc: 坐标系转换 + * createTime: 2023/8/25 18:18 + */ +public class GpsConvertUtil { + public static final double pi = 3.1415926535897932384626; + public static final double xpi = 3.14159265358979324 * 3000.0 / 180.0; + public static final double a = 6378245.0; + public static final double ee = 0.00669342162296594323; + + public static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + public static double[] transform(double lon, double lat) { + if (outOfChina(lon, lat)) { + return new double[]{lon, lat}; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[]{mgLon, mgLat}; + } + + public static boolean outOfChina(double lon, double lat) { + if (lon < 72.004 || lon > 137.8347) + return true; + return lat < 0.8293 || lat > 55.8271; + } + + /** + * 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System + */ + public static double[] wgs84ToGcj02(double lon, double lat) { + if (outOfChina(lon, lat)) { + return new double[]{lon, lat}; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[]{mgLon, mgLat}; + } + + /** + * * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return + */ + public static double[] gcj02ToWgs84(double lon, double lat) { + double[] gps = transform(lon, lat); + double longitude = lon * 2 - gps[0]; + double latitude = lat * 2 - gps[1]; + return new double[]{longitude, latitude}; + } + + /** + * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标 + */ + public static double[] gcj02ToBd09(double lon, double lat) { + double z = Math.sqrt(lon * lon + lat * lat) + 0.00002 * Math.sin(lat * xpi); + double theta = Math.atan2(lat, lon) + 0.000003 * Math.cos(lon * xpi); + double tempLon = z * Math.cos(theta) + 0.0065; + double tempLat = z * Math.sin(theta) + 0.006; + return new double[]{tempLon, tempLat}; + } + + /** + * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param + * bdlat * @param bdlon * @return + */ + public static double[] bd09ToGcj02(double lon, double lat) { + double x = lon - 0.0065, y = lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * xpi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * xpi); + double tempLon = z * Math.cos(theta); + double tempLat = z * Math.sin(theta); + return new double[]{tempLon, tempLat}; + } + + /** + * 将wgs84转为bd09 + */ + public static double[] wgs84ToBd09(double lon, double lat) { + double[] gcj02 = wgs84ToGcj02(lon, lat); + return gcj02ToBd09(gcj02[0], gcj02[1]); + } + + public static double[] bd09ToWgs84(double lon, double lat) { + double[] gcj02 = bd09ToGcj02(lon, lat); + double[] wgs84 = gcj02ToWgs84(gcj02[0], gcj02[1]); + // 保留小数点后六位 + wgs84[1] = retain6(wgs84[1]); + wgs84[0] = retain6(wgs84[0]); + return wgs84; + } + + /** + * 保留小数点后六位 + */ + private static double retain6(double num) { + String result = String.format("%.6f", num); + return Double.parseDouble(result); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/common/utils/JavaClassToTsUtil.java b/policeSecurityServer/src/main/java/com/changhu/common/utils/JavaClassToTsUtil.java index c4ded54..059ce7a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/utils/JavaClassToTsUtil.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/utils/JavaClassToTsUtil.java @@ -52,8 +52,16 @@ public class JavaClassToTsUtil { * @return ts类型 */ private static String convertJavaTypeToTS(Class type) { - Set> stringList = Set.of(String.class); - Set> boolList = Set.of(Boolean.class, boolean.class); + Set> stringList = Set.of( + String.class, + LocalDateTime.class, + LocalDate.class, + LocalTime.class + ); + Set> boolList = Set.of( + Boolean.class, + boolean.class + ); Set> numberList = Set.of( Integer.class, int.class, Double.class, double.class, @@ -63,15 +71,12 @@ public class JavaClassToTsUtil { BigDecimal.class, Byte.class, byte.class ); - Set> dateList = Set.of(LocalDateTime.class, LocalDate.class, LocalTime.class); if (stringList.contains(type)) { return "string"; } else if (boolList.contains(type)) { return "boolean"; } else if (numberList.contains(type)) { return "number"; - } else if (dateList.contains(type)) { - return "Dayjs"; } else { return "unsupported"; } diff --git a/policeSecurityServer/src/main/java/com/changhu/common/utils/RsaUtil.java b/policeSecurityServer/src/main/java/com/changhu/common/utils/RsaUtil.java index 3c61de5..ec36116 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/utils/RsaUtil.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/utils/RsaUtil.java @@ -58,10 +58,4 @@ public class RsaUtil { } } - public static void main(String[] args) { - RSA rs = new RSA(); - System.out.println(rs.getPublicKeyBase64()); - System.out.println(rs.getPrivateKeyBase64()); - } - } diff --git a/policeSecurityServer/src/main/java/com/changhu/common/utils/UserUtil.java b/policeSecurityServer/src/main/java/com/changhu/common/utils/UserUtil.java index ef4b3cd..7cca7ec 100644 --- a/policeSecurityServer/src/main/java/com/changhu/common/utils/UserUtil.java +++ b/policeSecurityServer/src/main/java/com/changhu/common/utils/UserUtil.java @@ -6,7 +6,7 @@ import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import com.changhu.common.annotation.UserType; +import com.changhu.common.db.enums.UserType; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import lombok.extern.slf4j.Slf4j; diff --git a/policeSecurityServer/src/main/java/com/changhu/config/WebConfig.java b/policeSecurityServer/src/main/java/com/changhu/config/WebConfig.java index 8e7b4cb..d958102 100644 --- a/policeSecurityServer/src/main/java/com/changhu/config/WebConfig.java +++ b/policeSecurityServer/src/main/java/com/changhu/config/WebConfig.java @@ -2,32 +2,121 @@ package com.changhu.config; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.stp.StpUtil; -import com.changhu.support.interceptor.JsonBodyInterceptor; -import com.changhu.support.interceptor.UserTypeInterceptor; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ClassUtil; +import com.changhu.common.annotation.IsWhiteList; +import com.changhu.common.annotation.JsonBody; +import com.changhu.filter.BodyWrapperFilter; +import com.changhu.interceptor.JsonBodyInterceptor; +import com.changhu.interceptor.OpenApiAuthInterceptor; +import com.changhu.interceptor.UserTypeInterceptor; +import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import java.util.ArrayList; -import java.util.List; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.*; +import java.util.stream.Collectors; /** * author: luozhun * desc: WebConfig * createTime: 2023/8/18 10:56 */ +@Slf4j @Configuration public class WebConfig implements WebMvcConfigurer { private final List whiteList = new ArrayList<>(); + /** + * 扫描所有Controller + */ + private static Set> scanRestController() { + //需要过滤出JsonBody + Set> classes = ClassUtil.scanPackage("com.changhu", clazz -> !JsonBody.class.equals(clazz)); + return classes.stream().filter(aClass -> { + //判断类上是否有Controller注解 + if (aClass.isAnnotationPresent(Controller.class) || aClass.isAnnotationPresent(RestController.class)) { + return true; + } + Annotation[] annotations = aClass.getAnnotations(); + for (Annotation annotation : annotations) { + if (annotation.annotationType().isAnnotationPresent(Controller.class) || annotation.annotationType().isAnnotationPresent(RestController.class)) { + return true; + } + } + return false; + }).collect(Collectors.toSet()); + } + public WebConfig() { - whiteList.add("/common/**"); - whiteList.add("/test/**"); - whiteList.add("/login"); - whiteList.add("/logout"); + Set w = new HashSet<>(); + for (Class clazz : scanRestController()) { + //类上的注解 + RequestMapping classRequestMapping = AnnotatedElementUtils.findMergedAnnotation(clazz, RequestMapping.class); + IsWhiteList clazzIsWhiteList = clazz.getAnnotation(IsWhiteList.class); + if (classRequestMapping != null && clazzIsWhiteList != null) { + //直接放行当前控制器的所有方法 + w.addAll(Arrays.stream(classRequestMapping.value()).map(path -> { + if (!path.startsWith("/")) { + path = "/" + path; + } + if (!path.endsWith("/")) { + path = path + "/"; + } + return path + "**"; + }).toList()); + continue; + } + //看方法上是否有白名单注解 + Method[] methods = clazz.getDeclaredMethods(); + for (Method method : methods) { + IsWhiteList methodIsWhiteList = method.getAnnotation(IsWhiteList.class); + RequestMapping methodRequestMapping = AnnotatedElementUtils.findMergedAnnotation(method, RequestMapping.class); + if (methodRequestMapping != null && methodIsWhiteList != null) { + List> list1 = Arrays.stream(methodRequestMapping.value()).map(path -> { + if (!path.startsWith("/")) { + path = "/" + path; + } + if (path.endsWith("/")) { + path = path.substring(0, path.length() - 1); + } + List list = new ArrayList<>(); + if (classRequestMapping != null && CollUtil.isNotEmpty(Arrays.asList(classRequestMapping.value()))) { + for (String p : classRequestMapping.value()) { + if (!p.startsWith("/")) { + p = "/" + p; + } + if (p.endsWith("/")) { + p = p.substring(0, p.length() - 1); + } + list.add(p + path); + } + } else { + list.add(path); + } + return list; + }).toList(); + w.addAll(list1.stream().flatMap(List::stream).toList()); + } + } + } + log.info("加载路由白名单:{}", w); + whiteList.addAll(w); + + //网站图标 whiteList.add("/favicon.ico"); //druid console whiteList.add("/druid/**"); @@ -37,12 +126,6 @@ public class WebConfig implements WebMvcConfigurer { whiteList.add("/swagger-resources"); whiteList.add("/**webjars/**"); whiteList.add("/v3/**"); - //获取企业注册审核状态 - whiteList.add("/management/getCheckStatus"); - //微信小程序注册 - whiteList.add("/miniProgramUser/register"); - //二维码表单录入保安人员 - whiteList.add("/miniProgramUser/qrCodeFormInputSecurityUser"); } @Override @@ -51,10 +134,33 @@ public class WebConfig implements WebMvcConfigurer { registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) .addPathPatterns("/**") .excludePathPatterns(whiteList); - // 注册jsonBody 拦截器 用于标识是否需要JsonResult返回 + // 注册jsonBody拦截器 用于标识是否需要JsonResult返回 registry.addInterceptor(new JsonBodyInterceptor()); - // 注册clientType 拦截器 用于校验当前用户是否匹配操作客户端 + // 注册用户类型拦截器 用于校验当前用户是否匹配操作客户端 registry.addInterceptor(new UserTypeInterceptor()); + // 注册开放接口认证拦截器 用于校验第三方是否授权 + registry.addInterceptor(new OpenApiAuthInterceptor()) + .addPathPatterns("/open/**"); + } + + @Bean + public FilterRegistrationBean loggingFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new BodyWrapperFilter()); + registrationBean.addUrlPatterns("/open/*"); // 指定过滤的URL模式 + registrationBean.setOrder(1000); + return registrationBean; + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOriginPatterns("*") + .allowedMethods("GET", "POST", "OPTION", "PUT", "DELETE") + .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method", + "Access-Control-Request-Headers", "Authorization", "Token", "*") + .allowCredentials(true) + .maxAge(3600); } @Override diff --git a/policeSecurityServer/src/main/java/com/changhu/controller/CommonController.java b/policeSecurityServer/src/main/java/com/changhu/controller/CommonController.java index 0984600..a070440 100644 --- a/policeSecurityServer/src/main/java/com/changhu/controller/CommonController.java +++ b/policeSecurityServer/src/main/java/com/changhu/controller/CommonController.java @@ -1,13 +1,9 @@ package com.changhu.controller; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Dict; -import cn.hutool.core.util.ClassUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReflectUtil; -import com.changhu.common.annotation.IsExtData; +import com.alibaba.fastjson2.JSONObject; +import com.changhu.common.annotation.IsWhiteList; import com.changhu.common.annotation.JsonBody; -import com.changhu.common.db.BaseEnum; +import com.changhu.common.cache.GlobalCacheManager; import com.changhu.common.pojo.model.JsonResult; import com.changhu.common.pojo.vo.SelectNodeVo; import com.changhu.common.pojo.vo.TreeNodeVo; @@ -20,16 +16,14 @@ import com.changhu.support.minio.service.MinioService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.PostConstruct; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.web.bind.annotation.*; -import java.lang.reflect.Field; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author 20252 @@ -39,6 +33,8 @@ import java.util.stream.Stream; @Tag(name = "公共接口") @RequestMapping("/common") @JsonBody +@IsWhiteList +@RestController public class CommonController { @Autowired @@ -50,9 +46,6 @@ public class CommonController { @Autowired private AdministrativeDivisionService administrativeDivisionService; - private static final Map>> enumsResult = new HashMap<>(); - - @Cacheable(value = "common", key = "'AdministrativeDivisionLevel' + #level + 'Tree'") @Operation(summary = "行政区划树") @GetMapping("/administrativeDivisionTree") @@ -95,53 +88,17 @@ public class CommonController { @Operation(summary = "字典数据") @GetMapping("/enums") public Map>> enums() { + // 初始化 enumsResult + Map>> enumsResult = new HashMap<>(); + //将缓存的数据转换 + GlobalCacheManager.ENUM_CACHE.forEach((aClass, item) -> enumsResult.put(aClass.getSimpleName(), item.values().stream().toList())); return enumsResult; } - @SuppressWarnings("unchecked") - @PostConstruct - public void initEnums() { - Set> classes = ClassUtil.scanPackageBySuper("com.changhu.common.db.enums", BaseEnum.class); - for (Class aClass : classes) { - if (BaseEnum.class.isAssignableFrom(aClass)) { - enumsResult.put(aClass.getSimpleName(), listSelectNodes((Class>) aClass)); - } - } + @Operation(summary = "根据身份证查询保安证") + @GetMapping("/querySecurityNumberByIdCard") + public JSONObject querySecurityNumberByIdCard(@RequestParam @Schema(description = "身份证") String idCard) { + return commonService.querySecurityNumberByIdCard(idCard); } - public static > List> listSelectNodes(Class enumType) { - if (enumType == null) { - return null; - } - Field[] fields = ReflectUtil.getFields(enumType); - - List extras = new ArrayList<>(); - - for (Field field : fields) { - IsExtData annotation = field.getAnnotation(IsExtData.class); - if (ObjectUtil.isNotNull(annotation)) { - extras.add(field.getName()); - } - } - - T[] enumConstants = enumType.getEnumConstants(); - if (enumConstants == null) { - return null; - } - - return Stream.of(enumConstants).map(v -> { - SelectNodeVo vo = new SelectNodeVo<>(); - vo.setValue(v.getValue()); - vo.setLabel(v.getLabel()); - if (CollUtil.isNotEmpty(extras)) { - Dict map = Dict.create(); - for (String extra : extras) { - map.put(extra, ReflectUtil.getFieldValue(v, extra)); - } - vo.setExtData(map); - } - return vo; - }).collect(Collectors.toList()); - - } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/EnterprisesUnitController.java b/policeSecurityServer/src/main/java/com/changhu/controller/EnterprisesUnitController.java similarity index 67% rename from policeSecurityServer/src/main/java/com/changhu/module/management/controller/EnterprisesUnitController.java rename to policeSecurityServer/src/main/java/com/changhu/controller/EnterprisesUnitController.java index e2ac2a1..dc8336b 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/EnterprisesUnitController.java +++ b/policeSecurityServer/src/main/java/com/changhu/controller/EnterprisesUnitController.java @@ -1,13 +1,15 @@ -package com.changhu.module.management.controller; +package com.changhu.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.annotation.CheckUserType; import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.vo.SelectNodeVo; -import com.changhu.module.management.pojo.params.EnterprisesUnitSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.EnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.EnterprisesUnitPagerVo; -import com.changhu.module.management.service.EnterprisesUnitService; +import com.changhu.pojo.params.EnterprisesUnitSaveOrUpdateParams; +import com.changhu.pojo.queryParams.EnterprisesUnitPagerQueryParams; +import com.changhu.pojo.vo.EnterprisesUnitPagerVo; +import com.changhu.service.EnterprisesUnitService; import com.changhu.support.mybatisplus.pojo.params.PageParams; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Schema; @@ -25,7 +27,8 @@ import java.util.List; */ @Tag(name = "企事业单位") @JsonBody -@RequestMapping("/enterprisesUnit") +@RequestMapping("/eu") +@RestController public class EnterprisesUnitController { @Autowired @@ -33,18 +36,21 @@ public class EnterprisesUnitController { @Operation(summary = "分页查询") @PostMapping("/pager") - public Page pager(@RequestBody @Valid PageParams queryParams) { + @CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SUPER}) + public Page pager(@RequestBody PageParams queryParams) { return enterprisesUnitService.pager(queryParams); } @Operation(summary = "新增或保存") - @PostMapping("/saveOrUpdate") + @PostMapping("/add_upd") + @CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SUPER}) public void saveOrUpdate(@RequestBody @Valid EnterprisesUnitSaveOrUpdateParams params) { enterprisesUnitService.saveOrUpdate(params); } @Operation(summary = "根据id删除") - @DeleteMapping("/deleteById") + @DeleteMapping("/del_id") + @CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SUPER}) public void deleteById(@RequestParam @Schema(description = "企事业单位id") Long enterprisesUnitId) { boolean b = enterprisesUnitService.removeById(enterprisesUnitId); if (!b) { @@ -53,7 +59,7 @@ public class EnterprisesUnitController { } @Operation(summary = "根据行政区划编码查询下面的企事业单位") - @PostMapping("/queryListByAdministrativeDivisionCodes") + @PostMapping("/list_ad_codes") public List> queryListByAdministrativeDivisionCodes(@RequestBody @Schema(description = "行政区划编码") List administrativeDivisionCodes) { return enterprisesUnitService.queryListByAdministrativeDivisionCodes(administrativeDivisionCodes); } diff --git a/policeSecurityServer/src/main/java/com/changhu/controller/LoginController.java b/policeSecurityServer/src/main/java/com/changhu/controller/LoginController.java index 3694b31..852b527 100644 --- a/policeSecurityServer/src/main/java/com/changhu/controller/LoginController.java +++ b/policeSecurityServer/src/main/java/com/changhu/controller/LoginController.java @@ -1,5 +1,6 @@ package com.changhu.controller; +import com.changhu.common.annotation.IsWhiteList; import com.changhu.common.annotation.JsonBody; import com.changhu.common.pojo.vo.TokenInfo; import com.changhu.pojo.params.LoginParams; @@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; /** * @author 20252 @@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestBody; */ @Tag(name = "登录相关") @JsonBody +@RestController public class LoginController { @Autowired @@ -25,12 +28,14 @@ public class LoginController { @Operation(summary = "登录") @PostMapping("/login") + @IsWhiteList public TokenInfo login(@RequestBody LoginParams loginParams) { return loginService.login(loginParams); } @Operation(summary = "登出") @GetMapping("/logout") + @IsWhiteList public void logout() { loginService.logout(); } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/ManagementController.java b/policeSecurityServer/src/main/java/com/changhu/controller/ManagementController.java similarity index 54% rename from policeSecurityServer/src/main/java/com/changhu/module/management/controller/ManagementController.java rename to policeSecurityServer/src/main/java/com/changhu/controller/ManagementController.java index 2c66c49..857b65f 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/ManagementController.java +++ b/policeSecurityServer/src/main/java/com/changhu/controller/ManagementController.java @@ -1,58 +1,48 @@ -package com.changhu.module.management.controller; +package com.changhu.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.IsWhiteList; import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; -import com.changhu.module.management.pojo.params.IndexCheckPassParams; -import com.changhu.module.management.pojo.params.IndexCheckStatusParams; -import com.changhu.module.management.pojo.params.IndexDisableOrEnableParams; -import com.changhu.module.management.pojo.queryParams.UnitMiniProgramUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.UnitCheckStatusVo; -import com.changhu.module.management.pojo.vo.UnitMiniProgramUserPagerVo; -import com.changhu.module.management.service.ManagementService; +import com.changhu.common.db.enums.MiniProgramUserIdentity; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.pojo.params.CheckStatusParams; +import com.changhu.pojo.params.UnitDisableOrEnableParams; +import com.changhu.pojo.vo.UnitCheckStatusVo; +import com.changhu.pojo.vo.UnitMiniProgramUserPagerQueryParams; +import com.changhu.pojo.vo.UnitMiniProgramUserPagerVo; +import com.changhu.service.ManagementService; import com.changhu.support.mybatisplus.pojo.params.PageParams; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * @author 20252 - * @createTime 2024/9/2 上午9:48 - * @desc IndexController... + * @createTime 2024/11/22 上午9:03 + * @desc ManagementController... */ @Tag(name = "后台-通用接口") @JsonBody @RequestMapping("/management") +@RestController public class ManagementController { - @Autowired private ManagementService managementService; - @Operation(summary = "审核通过") - @PostMapping("/checkPass") - @CheckUserType(userTypes = UserType.MANAGEMENT_SUPER) - public void checkPass(@RequestBody @Valid IndexCheckPassParams params) { - managementService.checkPass(params); - } - @Operation(summary = "获取审核状态") @PostMapping("/getCheckStatus") - public UnitCheckStatusVo getCheckStatus(@RequestBody @Valid IndexCheckStatusParams params) { + @IsWhiteList + public UnitCheckStatusVo getCheckStatus(@RequestBody @Valid CheckStatusParams params) { return managementService.getCheckStatus(params); } - @Operation(summary = "启用或禁用状态") - @PostMapping("/disableOrEnable") - @CheckUserType(userTypes = UserType.MANAGEMENT_SUPER) - public void disableOrEnable(@RequestBody @Valid IndexDisableOrEnableParams params) { - managementService.disableOrEnable(params); - } - @Operation(summary = "查询单位下的小程序用户") @PostMapping("/miniProgramUserPager") @CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SECURITY}) @@ -63,14 +53,27 @@ public class ManagementController { @Operation(summary = "审核通过小程序用户") @PostMapping("/passMiniProgramUser") @CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SECURITY}) - public void passMiniProgramUser(@RequestBody @Valid IndexDisableOrEnableParams params) { + public void passMiniProgramUser(@RequestBody @Valid UnitDisableOrEnableParams params) { managementService.passMiniProgramUser(params); } @Operation(summary = "禁用或启用小程序用户") @PostMapping("/disableOrEnableMiniProgramUser") @CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SECURITY}) - public void disableOrEnableMiniProgramUser(@RequestBody @Valid IndexDisableOrEnableParams params) { + public void disableOrEnableMiniProgramUser(@RequestBody @Valid UnitDisableOrEnableParams params) { managementService.disableOrEnableMiniProgramUser(params); } + + @Operation(summary = "所有的保安单位列表") + @GetMapping("/listSecurityUnit") + public List> listSecurityUnit() { + return managementService.listSecurityUnit(); + } + + @Operation(summary = "保安单位下的项目经理") + @GetMapping("/listMinUserByUnitId") + public List> listMinUserByUnitId(@RequestParam @Schema(description = "保安单位id") Long securityUnitId, + @RequestParam @Schema(description = "身份类型") MiniProgramUserIdentity identity) { + return managementService.listMinUserByUnitId(securityUnitId, identity); + } } diff --git a/policeSecurityServer/src/main/java/com/changhu/controller/OpenController.java b/policeSecurityServer/src/main/java/com/changhu/controller/OpenController.java new file mode 100644 index 0000000..9deb25a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/controller/OpenController.java @@ -0,0 +1,71 @@ +package com.changhu.controller; + +import com.changhu.common.annotation.IsWhiteList; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.pojo.dto.DataViewDTO; +import com.changhu.pojo.dto.EnterprisesUnitDetailDTO; +import com.changhu.pojo.dto.SecurityUnitUseStatisticsDTO; +import com.changhu.pojo.dto.SecurityUserRosterDTO; +import com.changhu.pojo.params.EnterprisesUnitOrServiceProjectType; +import com.changhu.service.OpenApiService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/10/9 下午5:02 + * @desc 可以给第三方对接的controller + */ +@Tag(name = "开放接口") +@JsonBody +@RequestMapping("/open") +@IsWhiteList +@RestController +public class OpenController { + + @Autowired + private OpenApiService openApiService; + + @Operation(summary = "获取企事业单位列表") + @GetMapping("/getEnterprisesUnit") + public List> getEnterprisesUnit(@Schema(description = "代码") @RequestParam String code, + @Schema(description = "等级") @RequestParam Integer level) { + return openApiService.getEnterprisesUnit(code, level); + } + + @Operation(summary = "企事业单位详情") + @GetMapping("/enterprisesUnitDetailById") + public EnterprisesUnitDetailDTO enterprisesUnitDetailById(@Schema(description = "企事业单位id") @RequestParam Long enterprisesUnitId) { + return openApiService.enterprisesUnitDetailById(enterprisesUnitId); + } + + @Operation(summary = "数据总览") + @GetMapping("/dataView") + public DataViewDTO dataView() { + return openApiService.dataView(); + } + + @Operation(summary = "保安单位使用情况统计") + @GetMapping("/securityUnitUseStatistics") + public List securityUnitUseStatistics(@Schema(description = "代码") @RequestParam String code, + @Schema(description = "等级") @RequestParam Integer level) { + return openApiService.securityUnitUseStatistics(code, level); + } + + @Operation(summary = "安保人员花名册") + @GetMapping("/securityUserRoster") + public List securityUserRoster(@Schema(description = "事业单位或服务项目id") Long id, + @Schema(description = "类型") EnterprisesUnitOrServiceProjectType type) { + return openApiService.securityUserRoster(id, type); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/controller/WeChatController.java b/policeSecurityServer/src/main/java/com/changhu/controller/WeChatController.java new file mode 100644 index 0000000..7c419ae --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/controller/WeChatController.java @@ -0,0 +1,36 @@ +package com.changhu.controller; + +import com.changhu.common.annotation.JsonBody; +import com.changhu.service.WxService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author 20252 + * @createTime 2024/11/22 上午11:42 + * @desc WeChatController... + */ +@Tag(name = "微信相关") +@Controller +@RequestMapping("/wx") +public class WeChatController { + + @Autowired + private WxService wxService; + + @JsonBody(value = false) + @Operation(summary = "获取小程序页面二维码") + @GetMapping(value = "/qrCode") + public ResponseEntity qrCode(@Schema(description = "要生成的路径") @RequestParam String path, + @Schema(description = "生成二维码的宽度") @RequestParam(defaultValue = "430") Integer width) { + return wxService.qrCode(path, width); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/filter/BodyWrapperFilter.java b/policeSecurityServer/src/main/java/com/changhu/filter/BodyWrapperFilter.java new file mode 100644 index 0000000..f88a6ee --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/filter/BodyWrapperFilter.java @@ -0,0 +1,27 @@ +package com.changhu.filter; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.Objects; + +/** + * @author 20252 + * @createTime 2024/11/19 下午3:07 + * @desc BodyWrapperFilter... + */ +@Slf4j +public class BodyWrapperFilter implements Filter { + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + log.info("进入filter:{}", servletRequest.getRemoteAddr()); + ServletRequest requestWrapper = null; + if (servletRequest instanceof HttpServletRequest) { + requestWrapper = new CustomHttpServletRequestWrapper((HttpServletRequest) servletRequest); + } + filterChain.doFilter(Objects.requireNonNullElse(requestWrapper, servletRequest), servletResponse); + + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/filter/CustomHttpServletRequestWrapper.java b/policeSecurityServer/src/main/java/com/changhu/filter/CustomHttpServletRequestWrapper.java new file mode 100644 index 0000000..6bcd244 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/filter/CustomHttpServletRequestWrapper.java @@ -0,0 +1,65 @@ +package com.changhu.filter; + +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; + +import java.io.*; +import java.nio.charset.StandardCharsets; + +/** + * @author 20252 + * @createTime 2024/11/19 下午3:12 + * @desc CustomHttpServletRequestWrapper... + */ +public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper { + private final byte[] body; + + public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException { + super(request); + BufferedReader reader = request.getReader(); + try (StringWriter writer = new StringWriter()) { + int read; + char[] buf = new char[1024 * 8]; + while ((read = reader.read(buf)) != -1) { + writer.write(buf, 0, read); + } + this.body = writer.getBuffer().toString().getBytes(); + } + } + + public String getBody() { + return new String(body, StandardCharsets.UTF_8); + } + + @Override + public ServletInputStream getInputStream() { + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + } + + @Override + public int read() { + return byteArrayInputStream.read(); + } + }; + } + + @Override + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(this.getInputStream())); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/support/handler/GlobalExceptionHandler.java b/policeSecurityServer/src/main/java/com/changhu/handler/GlobalExceptionHandler.java similarity index 99% rename from policeSecurityServer/src/main/java/com/changhu/support/handler/GlobalExceptionHandler.java rename to policeSecurityServer/src/main/java/com/changhu/handler/GlobalExceptionHandler.java index 05ba1d5..b9c2b76 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/handler/GlobalExceptionHandler.java +++ b/policeSecurityServer/src/main/java/com/changhu/handler/GlobalExceptionHandler.java @@ -1,4 +1,4 @@ -package com.changhu.support.handler; +package com.changhu.handler; import cn.dev33.satoken.exception.NotLoginException; import cn.hutool.core.exceptions.ExceptionUtil; diff --git a/policeSecurityServer/src/main/java/com/changhu/support/handler/JsonBodyHandler.java b/policeSecurityServer/src/main/java/com/changhu/handler/JsonBodyHandler.java similarity index 94% rename from policeSecurityServer/src/main/java/com/changhu/support/handler/JsonBodyHandler.java rename to policeSecurityServer/src/main/java/com/changhu/handler/JsonBodyHandler.java index 550cf15..4c712cf 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/handler/JsonBodyHandler.java +++ b/policeSecurityServer/src/main/java/com/changhu/handler/JsonBodyHandler.java @@ -1,7 +1,7 @@ -package com.changhu.support.handler; +package com.changhu.handler; import com.changhu.common.pojo.model.JsonResult; -import com.changhu.support.interceptor.JsonBodyInterceptor; +import com.changhu.interceptor.JsonBodyInterceptor; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; diff --git a/policeSecurityServer/src/main/java/com/changhu/support/interceptor/JsonBodyInterceptor.java b/policeSecurityServer/src/main/java/com/changhu/interceptor/JsonBodyInterceptor.java similarity index 98% rename from policeSecurityServer/src/main/java/com/changhu/support/interceptor/JsonBodyInterceptor.java rename to policeSecurityServer/src/main/java/com/changhu/interceptor/JsonBodyInterceptor.java index 64449a2..530b9e6 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/interceptor/JsonBodyInterceptor.java +++ b/policeSecurityServer/src/main/java/com/changhu/interceptor/JsonBodyInterceptor.java @@ -1,4 +1,4 @@ -package com.changhu.support.interceptor; +package com.changhu.interceptor; import cn.hutool.core.collection.ConcurrentHashSet; import com.changhu.common.annotation.JsonBody; diff --git a/policeSecurityServer/src/main/java/com/changhu/interceptor/OpenApiAuthInterceptor.java b/policeSecurityServer/src/main/java/com/changhu/interceptor/OpenApiAuthInterceptor.java new file mode 100644 index 0000000..c80858d --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/interceptor/OpenApiAuthInterceptor.java @@ -0,0 +1,118 @@ +package com.changhu.interceptor; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import cn.hutool.crypto.digest.MD5; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.db.enums.IsEnable; +import com.changhu.common.exception.MessageException; +import com.changhu.common.utils.IpUtil; +import com.changhu.filter.CustomHttpServletRequestWrapper; +import com.changhu.pojo.entity.AccessKeys; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author 20252 + * @createTime 2024/11/19 下午1:58 + * @desc 开放接口认证拦截器 + */ +@Slf4j +public class OpenApiAuthInterceptor implements HandlerInterceptor { + + private static final String ACCESS_KEY = "Access-Key";//调用者身份唯一标识 + private static final String TIMESTAMP = "Time-Stamp";//时间戳 + private static final String SIGN = "Sign";//签名 + + @Override + public boolean preHandle(@NotNull HttpServletRequest request, + @NotNull HttpServletResponse response, + @NotNull Object handler) throws Exception { + if (handler instanceof HandlerMethod) { + String ip = IpUtil.getIp(request); + try { + return checkSign(request); + } catch (MessageException e) { + log.error("开放接口访问失败:{} 访问时间:{} IP:{} 访问接口:{} ", e.getMessage(), LocalDateTime.now(), ip, request.getRequestURI()); + throw e; + } + } + return false; + } + + private boolean checkSign(HttpServletRequest request) throws MessageException { + + String accessKey = request.getHeader(ACCESS_KEY); + String timestamp = request.getHeader(TIMESTAMP); + String sign = request.getHeader(SIGN); + + if (StrUtil.isBlank(accessKey) || StrUtil.isBlank(timestamp) || StrUtil.isBlank(sign)) { + throw new MessageException("请求体缺失"); + } + + AccessKeys accessKeyEntity = Db.lambdaQuery(AccessKeys.class) + .eq(AccessKeys::getAccessKey, accessKey) + .oneOpt() + .orElseThrow(() -> new MessageException("无效的accessKey")); + + if (IsEnable.FALSE.equals(accessKeyEntity.getIsEnable())) { + throw new MessageException("accessKey已禁用"); + } + + if (accessKeyEntity.getEffectiveTime() > 0 && System.currentTimeMillis() - Long.parseLong(timestamp) > accessKeyEntity.getEffectiveTime()) { + throw new MessageException("请求已过期"); + } + + List allowedResources = Optional.ofNullable(accessKeyEntity.getAllowedResources()).orElseThrow(() -> new MessageException("暂无允许访问的资源")); + if (!allowedResources.contains(request.getRequestURI())) { + throw new MessageException("无效的请求资源"); + } + + Map hashMap = new HashMap<>(); + hashMap.put(ACCESS_KEY, accessKey); + hashMap.put(TIMESTAMP, timestamp); + //添加请求url参数 + Optional.ofNullable(HttpUtil.decodeParamMap(request.getQueryString(), StandardCharsets.UTF_8)) + .ifPresent(hashMap::putAll); + //添加body参数 + Optional.ofNullable(JSON.>parseObject(((CustomHttpServletRequestWrapper) request).getBody(), Map.class)) + .ifPresent(hashMap::putAll); + //生成签名 + String nowSign = generatedSign(hashMap, accessKeyEntity.getSecretKey()); + //比对签名 + if (!sign.equals(nowSign)) { + throw new MessageException("签名错误"); + } + return true; + } + + /** + * 获取签名 + * + * @param map 参数结果 + * @param secretKey 密钥 + * @return 签名字符串 + */ + private String generatedSign(Map map, String secretKey) { + List> entries = new ArrayList<>(map.entrySet()); + String str = entries.stream() + .filter(en -> null == en.getValue() || StrUtil.isNotBlank(en.getValue().toString())) + .sorted(Comparator.comparing(o -> o.getKey().toLowerCase())) + .map(en -> StrUtil.format("{}={}", en.getKey(), URLUtil.encodeAll(en.getValue() + ""))) + .collect(Collectors.joining("&")); + str += ("&Secret-Key=" + secretKey); + return MD5.create().digestHex(str).toUpperCase(); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/support/interceptor/UserTypeInterceptor.java b/policeSecurityServer/src/main/java/com/changhu/interceptor/UserTypeInterceptor.java similarity index 94% rename from policeSecurityServer/src/main/java/com/changhu/support/interceptor/UserTypeInterceptor.java rename to policeSecurityServer/src/main/java/com/changhu/interceptor/UserTypeInterceptor.java index bac23f7..07032d2 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/interceptor/UserTypeInterceptor.java +++ b/policeSecurityServer/src/main/java/com/changhu/interceptor/UserTypeInterceptor.java @@ -1,8 +1,8 @@ -package com.changhu.support.interceptor; +package com.changhu.interceptor; import cn.hutool.core.util.ArrayUtil; import com.changhu.common.annotation.CheckUserType; -import com.changhu.common.annotation.UserType; +import com.changhu.common.db.enums.UserType; import com.changhu.common.exception.MessageException; import com.changhu.common.utils.UserUtil; import jakarta.servlet.http.HttpServletRequest; @@ -14,7 +14,7 @@ import org.springframework.web.servlet.HandlerInterceptor; /** * @author 20252 * @createTime 2024/9/4 下午4:00 - * @desc UserTypeInterceptor... + * @desc 用户类型校验拦截器 */ public class UserTypeInterceptor implements HandlerInterceptor { diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/AccessKeysMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/AccessKeysMapper.java new file mode 100644 index 0000000..04ac5cd --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/AccessKeysMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.AccessKeys; +import org.apache.ibatis.annotations.Mapper; + +/** + * access_keys (开放接口的授权) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface AccessKeysMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/AdministrativeDivisionMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/AdministrativeDivisionMapper.java index eb31e58..2e53acb 100644 --- a/policeSecurityServer/src/main/java/com/changhu/mapper/AdministrativeDivisionMapper.java +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/AdministrativeDivisionMapper.java @@ -23,4 +23,12 @@ public interface AdministrativeDivisionMapper extends BaseMapper> treeList(@Param("level") Integer level); + + /** + * 根据父编码查询子级行政区划 + * + * @param parentCode 父编码 + * @return 结果 + */ + List> administrativeDivisionByParentCode(@Param("parentCode") String parentCode); } diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/CkAssessmentRecordDetailsMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/CkAssessmentRecordDetailsMapper.java new file mode 100644 index 0000000..7c16064 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/CkAssessmentRecordDetailsMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.CkAssessmentRecordDetails; +import org.apache.ibatis.annotations.Mapper; + +/** + * ck_assessment_record_details (考核记录明细) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface CkAssessmentRecordDetailsMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/CkAssessmentRecordMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/CkAssessmentRecordMapper.java new file mode 100644 index 0000000..cd25384 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/CkAssessmentRecordMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.CkAssessmentRecord; +import org.apache.ibatis.annotations.Mapper; + +/** + * ck_assessment_record (考核记录) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface CkAssessmentRecordMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/CkGroupMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/CkGroupMapper.java new file mode 100644 index 0000000..3cf0d22 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/CkGroupMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.CkGroup; +import org.apache.ibatis.annotations.Mapper; + +/** + * ck_group (考核组) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface CkGroupMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/CkItemMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/CkItemMapper.java new file mode 100644 index 0000000..a58cfd8 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/CkItemMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.CkItem; +import org.apache.ibatis.annotations.Mapper; + +/** + * ck_item (分组内的考核项) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface CkItemMapper extends BaseMapper{ + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/CkProjectMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/CkProjectMapper.java new file mode 100644 index 0000000..416aac1 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/CkProjectMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.CkProject; +import org.apache.ibatis.annotations.Mapper; + +/** + * ck_project (考核项目) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface CkProjectMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/CkStandardMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/CkStandardMapper.java new file mode 100644 index 0000000..c1d94a1 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/CkStandardMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.CkStandard; +import org.apache.ibatis.annotations.Mapper; + +/** + * ck_standard (扣分标准) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface CkStandardMapper extends BaseMapper{ + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/EnterprisesUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/EnterprisesUnitMapper.java new file mode 100644 index 0000000..17ab57f --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/EnterprisesUnitMapper.java @@ -0,0 +1,30 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.pojo.entity.EnterprisesUnit; +import com.changhu.pojo.queryParams.EnterprisesUnitPagerQueryParams; +import com.changhu.pojo.vo.EnterprisesUnitPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * enterprises_unit (企事业单位) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface EnterprisesUnitMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页参数 + * @param params 查询参数 + * @return 结果 + */ + Page pager(@Param("page") Page page, + @Param("unitId") Long unitId, + @Param("params") EnterprisesUnitPagerQueryParams params); + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementMapper.java new file mode 100644 index 0000000..c14645a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementMapper.java @@ -0,0 +1,28 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.db.enums.MiniProgramUserIdentity; +import com.changhu.pojo.vo.UnitMiniProgramUserPagerQueryParams; +import com.changhu.pojo.vo.UnitMiniProgramUserPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:05 + * @desc ManagementMapper... + */ +@Mapper +public interface ManagementMapper { + /** + * 分页查询 + * + * @param page 分页参数 + * @param params 查询参数 + * @param identity 用户身份 + * @return 结果 + */ + Page miniProgramUserPager(@Param("page") Page page, + @Param("params") UnitMiniProgramUserPagerQueryParams params, + @Param("identity") MiniProgramUserIdentity identity); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementPoliceUnitUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementPoliceUnitUserMapper.java new file mode 100644 index 0000000..fe27829 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementPoliceUnitUserMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.ManagementPoliceUnitUser; +import org.apache.ibatis.annotations.Mapper; + +/** + * management_police_user (后台-公安单位用户表) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface ManagementPoliceUnitUserMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementSecurityUnitUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementSecurityUnitUserMapper.java new file mode 100644 index 0000000..6fb9b37 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementSecurityUnitUserMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.ManagementSecurityUnitUser; +import org.apache.ibatis.annotations.Mapper; + +/** + * management_security_unit_user (后台-保安单位用户表) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface ManagementSecurityUnitUserMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementSuperUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementSuperUserMapper.java similarity index 73% rename from policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementSuperUserMapper.java rename to policeSecurityServer/src/main/java/com/changhu/mapper/ManagementSuperUserMapper.java index bf086ea..cc8588b 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementSuperUserMapper.java +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/ManagementSuperUserMapper.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.mapper; +package com.changhu.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.changhu.module.management.pojo.entity.ManagementSuperUser; +import com.changhu.pojo.entity.ManagementSuperUser; import org.apache.ibatis.annotations.Mapper; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/MiniProgramUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/MiniProgramUserMapper.java new file mode 100644 index 0000000..4dc4bf0 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/MiniProgramUserMapper.java @@ -0,0 +1,14 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.MiniProgramUser; +import org.apache.ibatis.annotations.Mapper; + +/** + * mini_program_user (小程序用户) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface MiniProgramUserMapper extends BaseMapper { +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/OpenApiMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/OpenApiMapper.java new file mode 100644 index 0000000..863abb5 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/OpenApiMapper.java @@ -0,0 +1,54 @@ +package com.changhu.mapper; + +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.pojo.dto.SecurityUnitUseStatisticsDTO; +import com.changhu.pojo.dto.SecurityUserRosterDTO; +import com.changhu.pojo.dto.ServiceProjectDTO; +import com.changhu.pojo.params.EnterprisesUnitOrServiceProjectType; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/15 下午2:27 + * @desc OpenApiMapper... + */ +@Mapper +public interface OpenApiMapper { + + /** + * 根据单位获取企事业单位 + * + * @param code 代码 + * @param level 等级 + * @return 企事业单位 + */ + List> getEnterprisesUnit(@Param("code") String code, + @Param("level") Integer level); + + /** + * 获取企事业单位下的服务项目 + * + * @param enterprisesUnitId 企事业单位id + * @return 服务项目列表 + */ + List getServiceProjectByEnterprisesUnitId(@Param("enterprisesUnitId") Long enterprisesUnitId); + + /** + * 保安单位使用情况统计 + * + * @param code 代码 + * @param level 等级 + * @return 结果 + */ + List securityUnitUseStatistics(@Param("code") String code, + @Param("level") Integer level); + + /** + * 获取服务人员花名册 + */ + List securityUserRoster(@Param("id") Long id, + @Param("type") EnterprisesUnitOrServiceProjectType type); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/PoliceUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/PoliceUnitMapper.java new file mode 100644 index 0000000..d40a66b --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/PoliceUnitMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.PoliceUnit; +import org.apache.ibatis.annotations.Mapper; + +/** + * police_unit (公安单位) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface PoliceUnitMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/mapper/SecurityUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/SecurityUnitMapper.java new file mode 100644 index 0000000..94de684 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/SecurityUnitMapper.java @@ -0,0 +1,15 @@ +package com.changhu.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.changhu.pojo.entity.SecurityUnit; +import org.apache.ibatis.annotations.Mapper; + +/** + * security_unit (保安单位) 固化类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Mapper +public interface SecurityUnitMapper extends BaseMapper { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/mapper/SecurityUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/SecurityUserMapper.java similarity index 89% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/mapper/SecurityUserMapper.java rename to policeSecurityServer/src/main/java/com/changhu/mapper/SecurityUserMapper.java index 52472a8..d016312 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/mapper/SecurityUserMapper.java +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/SecurityUserMapper.java @@ -1,10 +1,10 @@ -package com.changhu.module.miniProgram.mapper; +package com.changhu.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.miniProgram.pojo.entity.SecurityUser; import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; +import com.changhu.pojo.entity.SecurityUser; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ServiceProjectMapper.java b/policeSecurityServer/src/main/java/com/changhu/mapper/ServiceProjectMapper.java similarity index 54% rename from policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ServiceProjectMapper.java rename to policeSecurityServer/src/main/java/com/changhu/mapper/ServiceProjectMapper.java index f1af734..3c11a7e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ServiceProjectMapper.java +++ b/policeSecurityServer/src/main/java/com/changhu/mapper/ServiceProjectMapper.java @@ -1,11 +1,8 @@ -package com.changhu.module.management.mapper; +package com.changhu.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.entity.ServiceProject; -import com.changhu.module.management.pojo.queryParams.ServiceProjectPagerQueryParams; -import com.changhu.module.management.pojo.vo.ServiceProjectPagerVo; import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; +import com.changhu.pojo.entity.ServiceProject; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -19,16 +16,6 @@ import java.util.List; @Mapper public interface ServiceProjectMapper extends BaseMapper { - /** - * 分页查询 - * - * @param page 分页对象 - * @param params 查询参数 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") ServiceProjectPagerQueryParams params); - /** * 获取服务项目 * @@ -36,4 +23,5 @@ public interface ServiceProjectMapper extends BaseMapper { */ List getServiceProjectList(@Param("policeUnitId") Long policeUnitId, @Param("projectManagerMiniProgramUserId") Long projectManagerMiniProgramUserId); + } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/PoliceController.java b/policeSecurityServer/src/main/java/com/changhu/module/management/controller/PoliceController.java deleted file mode 100644 index dcf3512..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/PoliceController.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.changhu.module.management.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.annotation.CheckUserType; -import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; -import com.changhu.module.management.pojo.params.ManagementPoliceUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ManagementPoliceUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.PoliceEnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementPoliceUnitUserPagerVo; -import com.changhu.module.management.pojo.vo.PoliceEnterprisesUnitPagerVo; -import com.changhu.module.management.service.PoliceService; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -/** - * @author 20252 - * @createTime 2024/9/11 上午9:39 - * @desc PoliceController... - */ -@Tag(name = "后台-公安") -@JsonBody -@RequestMapping("/management/police") -@CheckUserType(userTypes = UserType.MANAGEMENT_POLICE) -public class PoliceController { - - @Autowired - private PoliceService policeService; - - @Operation(summary = "新增或保存后台用户") - @PostMapping("/user/saveOrUpdate") - public void userSaveOrUpdate(@RequestBody @Valid ManagementPoliceUserSaveOrUpdateParams params) { - policeService.userSaveOrUpdate(params); - } - - @Operation(summary = "分页查询后台用户") - @PostMapping("/user/pager") - public Page userPager(@RequestBody PageParams queryParams) { - return policeService.userPager(queryParams); - } - - @Operation(summary = "根据id删除后台用户") - @DeleteMapping("/user/deleteById") - public void userDeleteById(@RequestParam @Schema(description = "后台公安用户id") Long managementPoliceUnitUserId) { - policeService.userDeleteById(managementPoliceUnitUserId); - } - - @Operation(summary = "公安单位下的企事业单位分页") - @PostMapping("/enterprisesUnitPager") - public Page enterprisesUnitPager(@RequestBody PageParams queryParams) { - return policeService.enterprisesUnitPager(queryParams); - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/SecurityController.java b/policeSecurityServer/src/main/java/com/changhu/module/management/controller/SecurityController.java deleted file mode 100644 index 3daec7d..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/SecurityController.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.changhu.module.management.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.annotation.CheckUserType; -import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; -import com.changhu.common.pojo.vo.SelectNodeVo; -import com.changhu.module.management.pojo.params.ManagementSecurityUnitUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ManagementSecurityUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementSecurityUnitUserPagerVo; -import com.changhu.module.management.service.SecurityService; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author 20252 - * @createTime 2024/9/11 上午9:39 - * @desc SecurityController... - */ -@Tag(name = "后台-保安") -@JsonBody -@RequestMapping("/management/security") -@CheckUserType(userTypes = UserType.MANAGEMENT_SECURITY) -public class SecurityController { - - @Autowired - private SecurityService securityService; - - @Operation(summary = "新增或修改后台用户") - @PostMapping("/user/saveOrUpdate") - public void userSaveOrUpdate(@RequestBody @Valid ManagementSecurityUnitUserSaveOrUpdateParams saveOrUpdateParams) { - securityService.userSaveOrUpdate(saveOrUpdateParams); - } - - @Operation(summary = "分页查询后台用户") - @PostMapping("/user/pager") - public Page userPager(@RequestBody PageParams queryParams) { - return securityService.userPager(queryParams); - } - - @Operation(summary = "根据id删除后台用户") - @DeleteMapping("/user/deleteById") - public void userDeleteById(@RequestParam @Schema(description = "后台保安用户id") Long managementSecurityUnitUserId) { - securityService.userDeleteById(managementSecurityUnitUserId); - } - - @Operation(summary = "查询单位下的项目经理") - @GetMapping("/listProjectManager") - public List> listProjectManager() { - return securityService.listProjectManager(); - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/SuperController.java b/policeSecurityServer/src/main/java/com/changhu/module/management/controller/SuperController.java deleted file mode 100644 index acee393..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/SuperController.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.changhu.module.management.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.annotation.CheckUserType; -import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; -import com.changhu.module.management.pojo.params.ManagementSuperUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.PoliceUnitPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.SecurityUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.PoliceUnitPagerVo; -import com.changhu.module.management.pojo.vo.SecurityUnitPagerVo; -import com.changhu.module.management.service.SuperService; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -/** - * @author 20252 - * @createTime 2024/9/11 上午9:38 - * @desc ManagementSuperController... - */ -@Tag(name = "超级后台") -@JsonBody -@RequestMapping("/management/super") -@CheckUserType(userTypes = UserType.MANAGEMENT_SUPER) -public class SuperController { - - @Autowired - private SuperService superService; - - @Operation(summary = "新增或保存后台用户") - @PostMapping("/saveOrUpdateUser") - public void saveOrUpdateUser(@RequestBody @Valid ManagementSuperUserSaveOrUpdateParams params) { - superService.saveOrUpdateUser(params); - } - - @Operation(summary = "公安单位分页查询") - @PostMapping("/policeUnit/pager") - public Page policeUnitPager(@RequestBody PageParams queryParams) { - return superService.policeUnitPager(queryParams); - } - - @Operation(summary = "保安单位分页查询") - @PostMapping("/securityUnit/pager") - public Page securityUnitPager(@RequestBody PageParams queryParams) { - return superService.securityUnitPager(queryParams); - } - -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/EnterprisesUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/EnterprisesUnitMapper.java deleted file mode 100644 index 7b273e8..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/EnterprisesUnitMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.changhu.module.management.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.entity.EnterprisesUnit; -import com.changhu.module.management.pojo.queryParams.EnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.PoliceEnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.EnterprisesUnitPagerVo; -import com.changhu.module.management.pojo.vo.PoliceEnterprisesUnitPagerVo; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * enterprises_unit (企事业单位) 固化类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Mapper -public interface EnterprisesUnitMapper extends BaseMapper { - - /** - * 分页查询 - * - * @param page 分页参数 - * @param params 查询参数 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") EnterprisesUnitPagerQueryParams params); - - /** - * 公安单位下的企事业单位分页 - * - * @param page 分页对象 - * @param params 查询参数 - * @return 结果 - */ - Page policeEnterprisesUnitPager(@Param("page") Page page, - @Param("params") PoliceEnterprisesUnitPagerQueryParams params); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementPoliceUnitUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementPoliceUnitUserMapper.java deleted file mode 100644 index 0c60b83..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementPoliceUnitUserMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.changhu.module.management.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser; -import com.changhu.module.management.pojo.queryParams.ManagementPoliceUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementPoliceUnitUserPagerVo; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * management_police_user (后台-公安单位用户表) 固化类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Mapper -public interface ManagementPoliceUnitUserMapper extends BaseMapper { - - /** - * 分页查询 - * - * @param page 分页参数 - * @param params 查询参数 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") ManagementPoliceUnitUserPagerQueryParams params); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementSecurityUnitUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementSecurityUnitUserMapper.java deleted file mode 100644 index d87e762..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/ManagementSecurityUnitUserMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.changhu.module.management.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.entity.ManagementSecurityUnitUser; -import com.changhu.module.management.pojo.queryParams.ManagementSecurityUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementSecurityUnitUserPagerVo; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * management_security_unit_user (后台-保安单位用户表) 固化类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Mapper -public interface ManagementSecurityUnitUserMapper extends BaseMapper { - - /** - * 分页查询 - * - * @param page 分页参数 - * @param params 查询参数 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") ManagementSecurityUnitUserPagerQueryParams params); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/PoliceUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/PoliceUnitMapper.java deleted file mode 100644 index 7626c2c..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/PoliceUnitMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.changhu.module.management.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.entity.PoliceUnit; -import com.changhu.module.management.pojo.queryParams.PoliceUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.PoliceUnitPagerVo; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * police_unit (公安单位) 固化类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Mapper -public interface PoliceUnitMapper extends BaseMapper { - - /** - * 分页查询 - * - * @param page 分页参数 - * @param params 查询参数 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") PoliceUnitPagerQueryParams params); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/SecurityUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/SecurityUnitMapper.java deleted file mode 100644 index cf0e1fe..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/mapper/SecurityUnitMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.changhu.module.management.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.entity.SecurityUnit; -import com.changhu.module.management.pojo.queryParams.SecurityUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.SecurityUnitPagerVo; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * security_unit (保安单位) 固化类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Mapper -public interface SecurityUnitMapper extends BaseMapper { - - /** - * 分页查询 - * - * @param page 分页对象 - * @param params 查询参数 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") SecurityUnitPagerQueryParams params); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/PoliceEnterprisesUnitPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/PoliceEnterprisesUnitPagerQueryParams.java deleted file mode 100644 index d349d76..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/PoliceEnterprisesUnitPagerQueryParams.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.changhu.module.management.pojo.queryParams; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -/** - * @author 20252 - * @createTime 2024/9/5 下午2:49 - * @desc PoliceEnterprisesUnitPagerQueryParams... - */ -@Data -public class PoliceEnterprisesUnitPagerQueryParams { - @Schema(description = "名称") - private String name; - @Schema(description = "详细地址") - private String address; - @Schema(description = "备注") - private String remark; -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/PoliceEnterprisesUnitPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/PoliceEnterprisesUnitPagerVo.java deleted file mode 100644 index 83322fe..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/PoliceEnterprisesUnitPagerVo.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.changhu.module.management.pojo.vo; - -import com.changhu.module.management.pojo.model.ContactPersonInfo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * @author 20252 - * @createTime 2024/9/5 下午2:46 - * @desc PoliceEnterprisesUnitPagerVo... - */ -@Data -public class PoliceEnterprisesUnitPagerVo { - @Schema(description = "id") - private Long snowFlakeId; - @Schema(description = "名称") - private String name; - - @Schema(description = "省编码") - private String province; - @Schema(description = "省名称") - private String provinceName; - @Schema(description = "市编码") - private String city; - @Schema(description = "市名称") - private String cityName; - @Schema(description = "县编码") - private String districts; - @Schema(description = "县名称") - private String districtsName; - @Schema(description = "乡镇编码") - private String street; - @Schema(description = "乡镇名称") - private String streetName; - - @Schema(description = "详细地址") - private String address; - @Schema(description = "联系人") - private ContactPersonInfo contactPersonInfo; - @Schema(description = "备注") - private String remark; - @Schema(description = "创建时间") - private LocalDateTime createTime; -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementService.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementService.java deleted file mode 100644 index 9fd2787..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.changhu.module.management.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.params.IndexCheckPassParams; -import com.changhu.module.management.pojo.params.IndexCheckStatusParams; -import com.changhu.module.management.pojo.params.IndexDisableOrEnableParams; -import com.changhu.module.management.pojo.queryParams.UnitMiniProgramUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.UnitCheckStatusVo; -import com.changhu.module.management.pojo.vo.UnitMiniProgramUserPagerVo; -import com.changhu.support.mybatisplus.pojo.params.PageParams; - -/** - * @author 20252 - * @createTime 2024/9/2 上午9:49 - * @desc IndexService... - */ -public interface ManagementService { - - /** - * 审核通过 - * - * @param params 审核参数 - */ - void checkPass(IndexCheckPassParams params); - - /** - * 获取审核状态 - * - * @param params 参数 - * @return 结果 - */ - UnitCheckStatusVo getCheckStatus(IndexCheckStatusParams params); - - /** - * 启用或者禁用单位 - * - * @param params 参数 - */ - void disableOrEnable(IndexDisableOrEnableParams params); - - /** - * 查询单位下的小程序用户 - * - * @param queryParams 查询参数 - * @return 结果 - */ - Page miniProgramUserPager(PageParams queryParams); - - /** - * 审核通过小程序用户 - * - * @param params 参数 - */ - void passMiniProgramUser(IndexDisableOrEnableParams params); - - /** - * 禁用或启用小程序用户 - * - * @param params 参数 - */ - void disableOrEnableMiniProgramUser(IndexDisableOrEnableParams params); - -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/PoliceService.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/PoliceService.java deleted file mode 100644 index d1fac7a..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/PoliceService.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.changhu.module.management.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.params.ManagementPoliceUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ManagementPoliceUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.PoliceEnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementPoliceUnitUserPagerVo; -import com.changhu.module.management.pojo.vo.PoliceEnterprisesUnitPagerVo; -import com.changhu.support.mybatisplus.pojo.params.PageParams; - -/** - * @author 20252 - * @createTime 2024/9/11 上午9:59 - * @desc MPoliceService... - */ -public interface PoliceService { - /** - * 新增或保存后台用户 - * - * @param params 参数 - */ - void userSaveOrUpdate(ManagementPoliceUserSaveOrUpdateParams params); - - /** - * 后台用户分页查询 - * - * @param queryParams 查询参数 - * @return 结果 - */ - Page userPager(PageParams queryParams); - - /** - * 根据id删除后台用户 - * - * @param managementPoliceUnitUserId 后台用户id - */ - void userDeleteById(Long managementPoliceUnitUserId); - - /** - * 公安单位下的企事业单位分页 - * - * @param queryParams 查询参数 - * @return 结果 - */ - Page enterprisesUnitPager(PageParams queryParams); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/SecurityService.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/SecurityService.java deleted file mode 100644 index fde7bda..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/SecurityService.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.changhu.module.management.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.pojo.vo.SelectNodeVo; -import com.changhu.module.management.pojo.params.ManagementSecurityUnitUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ManagementSecurityUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementSecurityUnitUserPagerVo; -import com.changhu.support.mybatisplus.pojo.params.PageParams; - -import java.util.List; - -/** - * @author 20252 - * @createTime 2024/9/11 上午10:17 - * @desc SecurityService... - */ -public interface SecurityService { - /** - * 新增或修改后台用户 - * - * @param saveOrUpdateParams 参数 - */ - void userSaveOrUpdate(ManagementSecurityUnitUserSaveOrUpdateParams saveOrUpdateParams); - - /** - * 分页查询后台用户 - * - * @param queryParams 分页查询后台用户 - * @return 结果 - */ - Page userPager(PageParams queryParams); - - /** - * 根据id删除后台用户 - * - * @param managementSecurityUnitUserId 用户id - */ - void userDeleteById(Long managementSecurityUnitUserId); - - /** - * 查询单位下的项目经理 - * - * @return 项目经理 - */ - List> listProjectManager(); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ServiceProjectService.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/ServiceProjectService.java deleted file mode 100644 index 75ce667..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ServiceProjectService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.changhu.module.management.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.management.pojo.entity.ServiceProject; -import com.changhu.module.management.pojo.params.ServiceProjectSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ServiceProjectPagerQueryParams; -import com.changhu.module.management.pojo.vo.ServiceProjectPagerVo; -import com.changhu.support.mybatisplus.pojo.params.PageParams; - -/** - * service_project (服务项目) 服务类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -public interface ServiceProjectService extends IService { - - /** - * 分页查询 - * - * @param queryParams 查询参数 - * @return 结果 - */ - Page pager(PageParams queryParams); - - /** - * 新增或者修改 - * - * @param params 参数 - */ - void saveOrUpdate(ServiceProjectSaveOrUpdateParams params); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/SuperService.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/SuperService.java deleted file mode 100644 index abf8694..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/SuperService.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.changhu.module.management.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.module.management.pojo.params.ManagementSuperUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.PoliceUnitPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.SecurityUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.PoliceUnitPagerVo; -import com.changhu.module.management.pojo.vo.SecurityUnitPagerVo; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import org.apache.ibatis.annotations.Param; - -/** - * @author 20252 - * @createTime 2024/9/11 上午9:52 - * @desc SuperService... - */ -public interface SuperService { - /** - * 新增或保存后台用户 - * - * @param params 参数 - */ - void saveOrUpdateUser(ManagementSuperUserSaveOrUpdateParams params); - - /** - * 公安单位分页查询 - * - * @param queryParams 查询参数 - * @return 结果 - */ - Page policeUnitPager(@Param("queryParams") PageParams queryParams); - - /** - * 保安单位分页查询 - * - * @param queryParams 查询参数 - * @return 结果 - */ - Page securityUnitPager(PageParams queryParams); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ManagementServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ManagementServiceImpl.java deleted file mode 100644 index 8a2450b..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ManagementServiceImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.changhu.module.management.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.annotation.UserType; -import com.changhu.common.db.enums.MiniProgramUserIdentity; -import com.changhu.common.exception.MessageException; -import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.pojo.params.IndexCheckPassParams; -import com.changhu.module.management.pojo.params.IndexCheckStatusParams; -import com.changhu.module.management.pojo.params.IndexDisableOrEnableParams; -import com.changhu.module.management.pojo.queryParams.UnitMiniProgramUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.UnitCheckStatusVo; -import com.changhu.module.management.pojo.vo.UnitMiniProgramUserPagerVo; -import com.changhu.module.management.service.ManagementService; -import com.changhu.module.miniProgram.mapper.MiniProgramUserMapper; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * @author 20252 - * @createTime 2024/9/2 上午9:49 - * @desc IndexServiceImpl... - */ -@Service -public class ManagementServiceImpl implements ManagementService { - - @Autowired - private MiniProgramUserMapper miniProgramUserMapper; - - @Override - public void checkPass(IndexCheckPassParams params) { - params.getUnitOptType() - .getHandler() - .pass(params.getCheckDataId()); - } - - @Override - public UnitCheckStatusVo getCheckStatus(IndexCheckStatusParams params) { - return params.getUnitOptType() - .getHandler() - .getCheckStatus(params.getOnlyCode()); - } - - @Override - public void disableOrEnable(IndexDisableOrEnableParams params) { - params.getUnitOptType() - .getHandler() - .disableOrEnable(params.getDataId()); - } - - @Override - public Page miniProgramUserPager(PageParams queryParams) { - UserType userType = UserUtil.getUserType(); - MiniProgramUserIdentity identity = switch (userType) { - case MANAGEMENT_POLICE -> MiniProgramUserIdentity.POLICE; - case MANAGEMENT_SECURITY -> MiniProgramUserIdentity.PROJECT_MANAGER; - default -> throw new MessageException("用户类型不匹配"); - }; - return miniProgramUserMapper.pager(queryParams.getPage(), queryParams.getParams(), identity); - } - - @Override - public void passMiniProgramUser(IndexDisableOrEnableParams params) { - params.getUnitOptType() - .getHandler() - .passMiniProgramUser(params.getDataId()); - } - - @Override - public void disableOrEnableMiniProgramUser(IndexDisableOrEnableParams params) { - params.getUnitOptType() - .getHandler() - .disableOrEnableMiniProgramUser(params.getDataId()); - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ServiceProjectServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ServiceProjectServiceImpl.java deleted file mode 100644 index 150b684..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ServiceProjectServiceImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.changhu.module.management.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.changhu.common.exception.MessageException; -import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.mapper.ServiceProjectMapper; -import com.changhu.module.management.pojo.entity.ServiceProject; -import com.changhu.module.management.pojo.params.ServiceProjectSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ServiceProjectPagerQueryParams; -import com.changhu.module.management.pojo.vo.ServiceProjectPagerVo; -import com.changhu.module.management.service.ServiceProjectService; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import org.springframework.stereotype.Service; - -/** - * service_project (服务项目) 服务实现类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Service -public class ServiceProjectServiceImpl extends ServiceImpl implements ServiceProjectService { - - @Override - public Page pager(PageParams queryParams) { - return baseMapper.pager(queryParams.getPage(), queryParams.getParams()); - } - - @Override - public void saveOrUpdate(ServiceProjectSaveOrUpdateParams params) { - ServiceProject serviceProject = BeanUtil.copyProperties(params, ServiceProject.class); - serviceProject.setSecurityUnitId(UserUtil.getUnitId()); - boolean b = this.saveOrUpdate(serviceProject); - if (!b) { - throw new MessageException(); - } - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/MiniProgramUserController.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/MiniProgramUserController.java deleted file mode 100644 index 467439a..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/MiniProgramUserController.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.changhu.module.miniProgram.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.annotation.JsonBody; -import com.changhu.module.miniProgram.pojo.params.MiniProgramUserRegisterParams; -import com.changhu.module.miniProgram.pojo.params.SaveOrUpdateSecurityUserParams; -import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; -import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; -import com.changhu.module.miniProgram.service.MiniProgramUserService; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -/** - * @author 20252 - * @createTime 2024/9/6 上午10:42 - * @desc MiniProgramUserController... - */ -@Tag(name = "小程序用户接口") -@JsonBody -@RequestMapping("/miniProgramUser") -public class MiniProgramUserController { - - @Autowired - private MiniProgramUserService miniProgramUserService; - - @Operation(summary = "注册") - @PostMapping("/register") - public void register(@RequestBody @Valid MiniProgramUserRegisterParams params) { - miniProgramUserService.register(params); - } - - @Operation(summary = "二维码表单录入保安人员") - @PostMapping("/qrCodeFormInputSecurityUser") - public void qrCodeFormInputSecurityUser(@RequestBody @Valid SaveOrUpdateSecurityUserParams params) { - miniProgramUserService.qrCodeFormInputSecurityUser(params); - } - - @Operation(summary = "服务项目保安人员分页") - @PostMapping("/securityUserPager") - public Page securityUserPager(@RequestBody PageParams queryParams) { - return miniProgramUserService.securityUserPager(queryParams); - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/PoliceIndexController.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/PoliceIndexController.java index 7c2c0bc..fb6af13 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/PoliceIndexController.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/PoliceIndexController.java @@ -2,14 +2,17 @@ package com.changhu.module.miniProgram.controller; import com.changhu.common.annotation.CheckUserType; import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.module.miniProgram.pojo.vo.IndexDataStatisticsVo; import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; -import com.changhu.module.miniProgram.service.MPoliceService; +import com.changhu.module.miniProgram.service.PoliceIndexService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -18,13 +21,21 @@ import java.util.List; * @createTime 2024/9/11 上午10:44 * @desc PoliceIndexController... */ -@Tag(name = "公安人员首页") +@Tag(name = "微信小程序-首页-公安") @JsonBody @RequestMapping("/policeIndex") +@RestController public class PoliceIndexController { @Autowired - private MPoliceService policeIndexService; + private PoliceIndexService policeIndexService; + + @Operation(summary = "首页数据统计") + @GetMapping("/dataStatistics") + @CheckUserType(userTypes = UserType.MINI_PROGRAM_POLICE) + public IndexDataStatisticsVo dataStatistics() { + return policeIndexService.dataStatistics(); + } @Operation(summary = "获取单位内的服务项目") @GetMapping("/getUnitServiceProjectList") @@ -32,4 +43,11 @@ public class PoliceIndexController { public List getUnitServiceProjectList() { return policeIndexService.getUnitServiceProjectList(); } + + @Operation(summary = "获取单位内的企事业单位列表") + @GetMapping("/getUnitEnterprisesUnitList") + @CheckUserType(userTypes = UserType.MINI_PROGRAM_POLICE) + public List> getUnitEnterprisesUnitList() { + return policeIndexService.getUnitEnterprisesUnitList(); + } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/ProjectManageIndexController.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/ProjectManageIndexController.java index b64d237..6a9ecf0 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/ProjectManageIndexController.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/ProjectManageIndexController.java @@ -2,19 +2,15 @@ package com.changhu.module.miniProgram.controller; import com.changhu.common.annotation.CheckUserType; import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; -import com.changhu.module.miniProgram.pojo.params.SaveOrUpdateSecurityUserParams; +import com.changhu.common.db.enums.UserType; import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; import com.changhu.module.miniProgram.service.ProjectManageIndexService; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -23,38 +19,20 @@ import java.util.List; * @createTime 2024/9/10 下午3:48 * @desc 项目经理首页控制器 */ -@Tag(name = "项目经理首页") +@Tag(name = "微信小程序-首页-项目经理") @JsonBody -@RequestMapping("/projectManageIndex") +@RequestMapping("/mp/pmi") +@RestController public class ProjectManageIndexController { @Autowired private ProjectManageIndexService projectManageIndexService; @Operation(summary = "获取我的服务项目") - @GetMapping("/getMyServiceProject") + @GetMapping("/get_my_sp") @CheckUserType(userTypes = UserType.MINI_PROGRAM_PROJECT_MANAGE) public List getMyServiceProjectList() { return projectManageIndexService.getMyServiceProjectList(); } - @Operation(summary = "根据id删除保安人员") - @DeleteMapping("/deleteSecurityUserByServiceProjectId") - public void deleteSecurityUserById(@RequestParam @Schema(description = "保安人员id") Long securityUserId) { - projectManageIndexService.deleteSecurityUserByServiceProjectId(securityUserId); - } - - @Operation(summary = "保存或更新保安人员") - @PostMapping("/saveOrUpdateSecurityUser") - public void saveOrUpdateSecurityUser(@RequestBody @Valid SaveOrUpdateSecurityUserParams params) { - projectManageIndexService.saveOrUpdateSecurityUser(params); - } - - @JsonBody(value = false) - @Operation(summary = "获取表单分享二维码") - @GetMapping(value = "/shareForm_QR_Code") - public ResponseEntity shareForm_QR_Code(@Schema(description = "要生成的路径") @RequestParam String path, - @Schema(description = "生成二维码的宽度") @RequestParam(defaultValue = "430") Integer width) { - return projectManageIndexService.shareForm_QR_Code(path, width); - } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/SupervisionAssessmentController.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/SupervisionAssessmentController.java new file mode 100644 index 0000000..ccf8365 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/SupervisionAssessmentController.java @@ -0,0 +1,51 @@ +package com.changhu.module.miniProgram.controller; + +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.module.miniProgram.pojo.params.AssessmentRecordParams; +import com.changhu.module.miniProgram.pojo.vo.AssessmentCriteriaRuleVo; +import com.changhu.module.miniProgram.service.SupervisionAssessmentService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:47 + * @desc SupervisionAssessmentController... + */ +@Tag(name = "微信小程序-监督考核") +@JsonBody +@RequestMapping("/mp/sa") +@CheckUserType(userTypes = UserType.MINI_PROGRAM_POLICE) +@RestController +public class SupervisionAssessmentController { + + @Autowired + private SupervisionAssessmentService supervisionAssessmentService; + + @Operation(summary = "根据类型获取考核项目列表") + @GetMapping("/ckProjectListByType") + public List> ckProjectListByType(@RequestParam EnterprisesUnitType type) { + return supervisionAssessmentService.assessmentCriteriaListByType(type); + } + + @Operation(summary = "根据考核项目获取考核规则") + @GetMapping("/assessmentCriteriaRulesByCkProjectId") + public List assessmentCriteriaRulesByCkProjectId(@RequestParam Long ckProjectId) { + return supervisionAssessmentService.assessmentCriteriaRulesByCkProjectId(ckProjectId); + } + + @Operation(summary = "提交考核记录") + @PostMapping("/submitAssessmentRecord") + public void submitAssessmentRecord(@Validated @RequestBody AssessmentRecordParams params) { + supervisionAssessmentService.submitAssessmentRecord(params); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/UserController.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/UserController.java new file mode 100644 index 0000000..a97500a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/controller/UserController.java @@ -0,0 +1,64 @@ +package com.changhu.module.miniProgram.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.annotation.IsWhiteList; +import com.changhu.common.annotation.JsonBody; +import com.changhu.module.miniProgram.pojo.params.SecurityUserSaveOrUpdateParams; +import com.changhu.module.miniProgram.pojo.params.UserRegisterParams; +import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; +import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; +import com.changhu.module.miniProgram.service.UserService; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author 20252 + * @createTime 2024/9/6 上午10:42 + * @desc UserController... + */ +@Tag(name = "微信小程序-用户相关") +@JsonBody +@RequestMapping("/mp/user") +@RestController("miniProgramUserController") +public class UserController { + + @Autowired + private UserService userService; + + @Operation(summary = "注册小程序用户") + @PostMapping("/register") + @IsWhiteList + public void register(@RequestBody @Valid UserRegisterParams params) { + userService.register(params); + } + + @Operation(summary = "保存或更新保安人员") + @PostMapping("/add_security_user_upd") + public void saveOrUpdateSecurityUser(@RequestBody @Valid SecurityUserSaveOrUpdateParams params) { + userService.saveOrUpdateSecurityUser(params); + } + + @Operation(summary = "二维码表单录入保安人员") + @PostMapping("/qrCodeFormInputSecurityUser") + @IsWhiteList + public void qrCodeFormInputSecurityUser(@RequestBody @Valid SecurityUserSaveOrUpdateParams params) { + userService.qrCodeFormInputSecurityUser(params); + } + + @Operation(summary = "服务项目保安人员分页") + @PostMapping("/securityUserPager") + public Page securityUserPager(@RequestBody PageParams queryParams) { + return userService.securityUserPager(queryParams); + } + + @Operation(summary = "根据id删除保安人员") + @DeleteMapping("/del_security_user_id") + public void deleteSecurityUserById(@RequestParam @Schema(description = "保安人员id") Long securityUserId) { + userService.deleteSecurityUserById(securityUserId); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/mapper/MiniProgramUserMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/mapper/MiniProgramUserMapper.java deleted file mode 100644 index 4ae4e0c..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/mapper/MiniProgramUserMapper.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.changhu.module.miniProgram.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.changhu.common.db.enums.MiniProgramUserIdentity; -import com.changhu.module.management.pojo.queryParams.UnitMiniProgramUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.UnitMiniProgramUserPagerVo; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * mini_program_user (小程序用户) 固化类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Mapper -public interface MiniProgramUserMapper extends BaseMapper { - - /** - * 分页查询 - * - * @param page 分页参数 - * @param params 查询参数 - * @param identity 用户身份 - * @return 结果 - */ - Page pager(@Param("page") Page page, - @Param("params") UnitMiniProgramUserPagerQueryParams params, - @Param("identity") MiniProgramUserIdentity identity); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/AssessmentRecordParams.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/AssessmentRecordParams.java new file mode 100644 index 0000000..e766774 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/AssessmentRecordParams.java @@ -0,0 +1,54 @@ +package com.changhu.module.miniProgram.pojo.params; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/7 上午11:15 + * @desc AssessmentRecordParams... + */ +@Data +public class AssessmentRecordParams { + @Schema(description = "企事业单位id") + @NotNull(message = "被考核单位不能为空") + private Long enterprisesUnitId; + + @Schema(description = "考核项目") + @NotNull(message = "考核项目不能为空") + private Long ckProjectId; + + @Schema(description = "考核人员签字") + @NotEmpty(message = "考核人员需签字") + private String assessmentUserSignature; + @Schema(description = "被考核单位人员签字") + @NotEmpty(message = "被考核单位需人员签字") + private String byAssessmentEnterprisesUnitUserSignature; + + @Schema(description = "考核备注") + private String remark; + + @Valid + @Schema(description = "考核记录详情") + private List assessmentRecordDetails; + + @Data + public static class RecordDetailParams { + @NotNull(message = "考核分组不能为空") + @Schema(description = "考核分组id") + private Long ckGroupId; + + @NotNull(message = "考核项不能为空") + @Schema(description = "考核项id") + private Long ckItemId; + + @NotNull(message = "考核标准不能为空") + @Schema(description = "考核标准id") + private Long ckStandardId; + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/SaveOrUpdateSecurityUserParams.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/SecurityUserSaveOrUpdateParams.java similarity index 89% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/SaveOrUpdateSecurityUserParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/SecurityUserSaveOrUpdateParams.java index 0b4dc16..3969f4a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/SaveOrUpdateSecurityUserParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/SecurityUserSaveOrUpdateParams.java @@ -15,7 +15,7 @@ import lombok.Data; * @desc SaveOrUpdateSecurityUserParams... */ @Data -public class SaveOrUpdateSecurityUserParams { +public class SecurityUserSaveOrUpdateParams { @Schema(description = "id") private Long snowFlakeId; @@ -27,6 +27,9 @@ public class SaveOrUpdateSecurityUserParams { @Schema(description = "保安单位id") private Long securityUnitId; + @Schema(description = "照片") + private String photo; + @NotBlank(message = "名字不能为空") @Schema(description = "名称") private String name; @@ -57,6 +60,9 @@ public class SaveOrUpdateSecurityUserParams { @Schema(description = "保安证号") private String securityNumber; + @Schema(description = "无证说明") + private String noSecurityNumberDesc; + @Schema(description = "家庭住址") private String homeAddress; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/MiniProgramUserRegisterParams.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/UserRegisterParams.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/MiniProgramUserRegisterParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/UserRegisterParams.java index 39a67e2..e50c3c9 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/MiniProgramUserRegisterParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/params/UserRegisterParams.java @@ -10,10 +10,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/6 上午10:47 - * @desc MiniProgramUserRegisterParams... + * @desc UserRegisterParams... */ @Data -public class MiniProgramUserRegisterParams { +public class UserRegisterParams { @Schema(description = "微信code") @NotBlank(message = "code不能为空") private String code; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/AssessmentCriteriaRuleVo.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/AssessmentCriteriaRuleVo.java new file mode 100644 index 0000000..22be2a8 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/AssessmentCriteriaRuleVo.java @@ -0,0 +1,57 @@ +package com.changhu.module.miniProgram.pojo.vo; + +import com.changhu.common.db.enums.SelectType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/7 上午10:00 + * @desc 考核标准规则 + */ +@Data +public class AssessmentCriteriaRuleVo { + @Schema(description = "考核组id") + private Long snowFlakeId; + @Schema(description = "考核组名称") + private String name; + @Schema(description = "考核组总成绩") + private Integer totalScore; + @Schema(description = "考核组备注") + private String remark; + + @Schema(description = "考核项") + private List itemList; + + @Data + public static class Item { + @Schema(description = "考核项id") + private Long snowFlakeId; + @Schema(description = "考核分组id") + private Long ckGroupId; + @Schema(description = "考核项名称") + private String name; + @Schema(description = "考核项组件类型") + private SelectType type; + @Schema(description = "考核项备注") + private String remark; + + @Schema(description = "考核标准") + private List standardList; + } + + @Data + public static class Standard { + @Schema(description = "考核标准id") + private Long snowFlakeId; + @Schema(description = "考核项id") + private Long ckItemId; + @Schema(description = "考核标准名字") + private String name; + @Schema(description = "扣分值") + private Double deductionPoints; + } + +} \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexDataStatisticsVo.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexDataStatisticsVo.java new file mode 100644 index 0000000..5de0f7a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexDataStatisticsVo.java @@ -0,0 +1,21 @@ +package com.changhu.module.miniProgram.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/7 下午2:23 + * @desc IndexDataStatisticsVo... + */ +@Data +public class IndexDataStatisticsVo { + @Schema(description = "企事业单位数量") + private Integer enterprisesUnitCount = 0; + @Schema(description = "服务项目数量") + private Integer serviceProjectCount = 0; + @Schema(description = "保安人员数量") + private Integer securityUserCount = 0; + @Schema(description = "无证保安人员数量") + private Integer noCardSecurityUserCount = 0; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexServiceProjectListVo.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexServiceProjectListVo.java index ec5e49d..36fa61f 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexServiceProjectListVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/IndexServiceProjectListVo.java @@ -1,9 +1,9 @@ package com.changhu.module.miniProgram.pojo.vo; import cn.hutool.core.lang.Dict; -import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.EnterprisesUnitType; import com.changhu.common.db.enums.ServiceProjectType; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.pojo.model.ContactPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -21,6 +21,8 @@ public class IndexServiceProjectListVo { private Long snowFlakeId; @Schema(description = "企事业单位名称") private String name; + @Schema(description = "单位类型") + private EnterprisesUnitType type; @Schema(description = "省编码") private String province; @@ -53,16 +55,19 @@ public class IndexServiceProjectListVo { static class ServiceProjectVo { @Schema(description = "服务项目id") private Long snowFlakeId; + @Schema(description = "保安单位id") private Long securityUnitId; + @Schema(description = "保安单位名字") + private String securityUnitName; + @Schema(description = "项目经理信息") private Dict projectManagerMiniProgramUserInfo; + @Schema(description = "服务项目名称") private String name; @Schema(description = "服务项目类型") private ServiceProjectType type; - @Schema(description = "是否自招保安(只有当type为property 此字段必填)") - private IsOrNot isRecruitSecurity; @Schema(description = "证件号(服务类型为保安必填 服务类型为物业则需自招保安为必填)") private String idNumber; @Schema(description = "服务区域面积") diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/ServiceProjectSecurityUserPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/ServiceProjectSecurityUserPagerVo.java index 0dc1a84..ba17501 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/ServiceProjectSecurityUserPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/vo/ServiceProjectSecurityUserPagerVo.java @@ -1,5 +1,7 @@ package com.changhu.module.miniProgram.pojo.vo; +import cn.hutool.core.util.DesensitizedUtil; +import com.changhu.common.annotation.Desensitized; import com.changhu.common.db.enums.Sex; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -27,9 +29,12 @@ public class ServiceProjectSecurityUserPagerVo { @Schema(description = "名称") private String name; + @Schema(description = "照片") + private String photo; + + @Desensitized(value = DesensitizedUtil.DesensitizedType.MOBILE_PHONE, keepOriginalField = true) @Schema(description = "手机号") private String telephone; - ; @Schema(description = "工作岗位") private String workPost; @@ -40,6 +45,7 @@ public class ServiceProjectSecurityUserPagerVo { @Schema(description = "籍贯") private String nativePlace; + @Desensitized(value = DesensitizedUtil.DesensitizedType.ID_CARD, keepOriginalField = true) @Schema(description = "身份证") private String idCard; @@ -48,6 +54,8 @@ public class ServiceProjectSecurityUserPagerVo { @Schema(description = "保安证号") private String securityNumber; + @Schema(description = "无证说明") + private String noSecurityNumberDesc; @Schema(description = "家庭住址") private String homeAddress; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/MPoliceService.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/MPoliceService.java deleted file mode 100644 index 60954f9..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/MPoliceService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.changhu.module.miniProgram.service; - -import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; - -import java.util.List; - -/** - * @author 20252 - * @createTime 2024/9/11 上午10:52 - * @desc MPoliceService... - */ -public interface MPoliceService { - /** - * 获取单位内的服务项目 - * - * @return 服务项目 - */ - List getUnitServiceProjectList(); -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/PoliceIndexService.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/PoliceIndexService.java new file mode 100644 index 0000000..9f3d243 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/PoliceIndexService.java @@ -0,0 +1,37 @@ +package com.changhu.module.miniProgram.service; + +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.module.miniProgram.pojo.vo.IndexDataStatisticsVo; +import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/9/11 上午10:52 + * @desc MPoliceService... + */ +public interface PoliceIndexService { + + /** + * 首页数据统计 + * + * @return 首页数据统计 + */ + IndexDataStatisticsVo dataStatistics(); + + /** + * 获取单位内的服务项目 + * + * @return 服务项目 + */ + List getUnitServiceProjectList(); + + /** + * 获取单位内的企事业单位列表 + * + * @return 企事业单位列表 + */ + List> getUnitEnterprisesUnitList(); + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/ProjectManageIndexService.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/ProjectManageIndexService.java index 69c3f9d..bb0bd99 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/ProjectManageIndexService.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/ProjectManageIndexService.java @@ -1,10 +1,6 @@ package com.changhu.module.miniProgram.service; -import com.changhu.module.miniProgram.pojo.params.SaveOrUpdateSecurityUserParams; import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; import java.util.List; @@ -21,22 +17,4 @@ public interface ProjectManageIndexService { */ List getMyServiceProjectList(); - /** - * 根据id删除保安人员 - * - * @param securityUserId 保安人员id - */ - void deleteSecurityUserByServiceProjectId(Long securityUserId); - - /** - * 保存或更新保安人员 - * - * @param params 保安人员参数 - */ - void saveOrUpdateSecurityUser(SaveOrUpdateSecurityUserParams params); - - /** - * 分享表单录入的二维码 - */ - ResponseEntity shareForm_QR_Code(String path, Integer width); } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/SupervisionAssessmentService.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/SupervisionAssessmentService.java new file mode 100644 index 0000000..b20d84f --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/SupervisionAssessmentService.java @@ -0,0 +1,38 @@ +package com.changhu.module.miniProgram.service; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.module.miniProgram.pojo.params.AssessmentRecordParams; +import com.changhu.module.miniProgram.pojo.vo.AssessmentCriteriaRuleVo; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:48 + * @desc SupervisionAssessmentService... + */ +public interface SupervisionAssessmentService { + /** + * 根据类型获取考核标准列表 + * + * @param type 类型 + * @return 结果 + */ + List> assessmentCriteriaListByType(EnterprisesUnitType type); + + /** + * 根据考核项目获取考核规则 + * + * @param ckProjectId 考核项目id + * @return 结果 + */ + List assessmentCriteriaRulesByCkProjectId(Long ckProjectId); + + /** + * 提交考核记录 + * + * @param params 参数 + */ + void submitAssessmentRecord(AssessmentRecordParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/MiniProgramUserService.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/UserService.java similarity index 54% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/MiniProgramUserService.java rename to policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/UserService.java index 543e642..dcf084e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/MiniProgramUserService.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/UserService.java @@ -1,27 +1,38 @@ package com.changhu.module.miniProgram.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; -import com.changhu.module.miniProgram.pojo.params.MiniProgramUserRegisterParams; -import com.changhu.module.miniProgram.pojo.params.SaveOrUpdateSecurityUserParams; +import com.changhu.module.miniProgram.pojo.params.SecurityUserSaveOrUpdateParams; +import com.changhu.module.miniProgram.pojo.params.UserRegisterParams; import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; import com.changhu.support.mybatisplus.pojo.params.PageParams; /** - * mini_program_user (小程序用户) 服务类 - * author: luozhun - * desc 由groovy脚本自动生成 + * @author 20252 + * @createTime 2024/11/22 下午4:14 + * @desc UserService... */ -public interface MiniProgramUserService extends IService { - +public interface UserService { /** * 注册 * * @param params 参数 */ - void register(MiniProgramUserRegisterParams params); + void register(UserRegisterParams params); + + /** + * 保存或更新保安人员 + * + * @param params 保安人员参数 + */ + void saveOrUpdateSecurityUser(SecurityUserSaveOrUpdateParams params); + + /** + * 二维码表单录入保安人员 + * + * @param params 参数 + */ + void qrCodeFormInputSecurityUser(SecurityUserSaveOrUpdateParams params); /** * 服务项目内的保安人员分页 @@ -32,9 +43,9 @@ public interface MiniProgramUserService extends IService { Page securityUserPager(PageParams queryParams); /** - * 二维码表单录入保安人员 + * 根据id删除保安人员 * - * @param params 参数 + * @param securityUserId 保安人员id */ - void qrCodeFormInputSecurityUser(SaveOrUpdateSecurityUserParams params); + void deleteSecurityUserById(Long securityUserId); } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/MPoliceServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/MPoliceServiceImpl.java deleted file mode 100644 index d8ec8b6..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/MPoliceServiceImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.changhu.module.miniProgram.service.impl; - -import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.mapper.ServiceProjectMapper; -import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; -import com.changhu.module.miniProgram.service.MPoliceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @author 20252 - * @createTime 2024/9/11 上午10:53 - * @desc MPoliceServiceImpl... - */ -@Service -public class MPoliceServiceImpl implements MPoliceService { - - @Autowired - private ServiceProjectMapper serviceProjectMapper; - - @Override - public List getUnitServiceProjectList() { - return serviceProjectMapper.getServiceProjectList(UserUtil.getUnitId(), null); - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/MiniProgramUserServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/MiniProgramUserServiceImpl.java deleted file mode 100644 index fb85ceb..0000000 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/MiniProgramUserServiceImpl.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.changhu.module.miniProgram.service.impl; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.changhu.common.exception.MessageException; -import com.changhu.common.utils.SnowFlakeIdUtil; -import com.changhu.module.miniProgram.mapper.MiniProgramUserMapper; -import com.changhu.module.miniProgram.mapper.SecurityUserMapper; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; -import com.changhu.module.miniProgram.pojo.entity.SecurityUser; -import com.changhu.module.miniProgram.pojo.params.MiniProgramUserRegisterParams; -import com.changhu.module.miniProgram.pojo.params.SaveOrUpdateSecurityUserParams; -import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; -import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; -import com.changhu.module.miniProgram.service.MiniProgramUserService; -import com.changhu.module.miniProgram.service.ProjectManageIndexService; -import com.changhu.support.mybatisplus.pojo.params.PageParams; -import me.chanjar.weixin.common.error.WxErrorException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * mini_program_user (小程序用户) 服务实现类 - * author: luozhun - * desc 由groovy脚本自动生成 - */ -@Service -public class MiniProgramUserServiceImpl extends ServiceImpl implements MiniProgramUserService { - - @Autowired - private WxMaService wxMaService; - - @Autowired - private SecurityUserMapper securityUserMapper; - - @Autowired - private ProjectManageIndexService projectManageIndexService; - - @Override - public void register(MiniProgramUserRegisterParams params) { - MiniProgramUser miniProgramUser = BeanUtil.copyProperties(params, MiniProgramUser.class); - try { - WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(params.getCode()); - miniProgramUser.setOpenId(sessionInfo.getOpenid()); - miniProgramUser.setSessionKey(sessionInfo.getSessionKey()); - } catch (WxErrorException e) { - throw new MessageException(e.getMessage()); - } - boolean exists = baseMapper.exists(Wrappers.lambdaQuery().eq(MiniProgramUser::getOpenId, miniProgramUser.getOpenId())); - if (exists) { - throw new MessageException("该用户已存在,请勿重复注册!"); - } - long userId = SnowFlakeIdUtil.snowflakeId(); - miniProgramUser.setSnowFlakeId(userId); - boolean save = this.save(miniProgramUser); - if (!save) { - throw new MessageException(); - } - } - - @Override - public Page securityUserPager(PageParams queryParams) { - return securityUserMapper.securityUserPager(queryParams.getPage(), queryParams.getParams()); - } - - @Override - public void qrCodeFormInputSecurityUser(SaveOrUpdateSecurityUserParams params) { - projectManageIndexService.saveOrUpdateSecurityUser(params); - } -} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/PoliceIndexServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/PoliceIndexServiceImpl.java new file mode 100644 index 0000000..de7952c --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/PoliceIndexServiceImpl.java @@ -0,0 +1,89 @@ +package com.changhu.module.miniProgram.service.impl; + +import cn.hutool.core.lang.Dict; +import cn.hutool.core.lang.func.LambdaUtil; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.common.utils.UserUtil; +import com.changhu.mapper.ServiceProjectMapper; +import com.changhu.module.miniProgram.pojo.vo.IndexDataStatisticsVo; +import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; +import com.changhu.module.miniProgram.service.PoliceIndexService; +import com.changhu.pojo.entity.EnterprisesUnit; +import com.changhu.pojo.entity.SecurityUser; +import com.changhu.pojo.entity.ServiceProject; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/9/11 上午10:53 + * @desc MPoliceServiceImpl... + */ +@Service +public class PoliceIndexServiceImpl implements PoliceIndexService { + + @Autowired + private ServiceProjectMapper serviceProjectMapper; + + @Override + public IndexDataStatisticsVo dataStatistics() { + Long unitId = UserUtil.getUnitId(); + IndexDataStatisticsVo indexDataStatisticsVo = new IndexDataStatisticsVo(); + List enterprisesUnitIds = Db.lambdaQuery(EnterprisesUnit.class) + .eq(EnterprisesUnit::getPoliceUnitId, unitId) + .list() + .stream().map(BaseEntity::getSnowFlakeId) + .toList(); + if (enterprisesUnitIds.isEmpty()) { + return indexDataStatisticsVo; + } + indexDataStatisticsVo.setEnterprisesUnitCount(enterprisesUnitIds.size()); + + List serviceProjectIds = Db.lambdaQuery(ServiceProject.class) + .in(ServiceProject::getEnterprisesUnitId, enterprisesUnitIds) + .list() + .stream() + .map(BaseEntity::getSnowFlakeId) + .toList(); + if (serviceProjectIds.isEmpty()) { + return indexDataStatisticsVo; + } + indexDataStatisticsVo.setServiceProjectCount(serviceProjectIds.size()); + + Long securityUserCount = Db.lambdaQuery(SecurityUser.class) + .in(SecurityUser::getServiceProjectId, serviceProjectIds) + .count(); + indexDataStatisticsVo.setSecurityUserCount(securityUserCount.intValue()); + + Long noCardSecurityUserCount = Db.lambdaQuery(SecurityUser.class) + .in(SecurityUser::getServiceProjectId, serviceProjectIds) + .isNull(SecurityUser::getSecurityNumber) + .count(); + indexDataStatisticsVo.setNoCardSecurityUserCount(noCardSecurityUserCount.intValue()); + + return indexDataStatisticsVo; + } + + @Override + public List getUnitServiceProjectList() { + return serviceProjectMapper.getServiceProjectList(UserUtil.getUnitId(), null); + } + + @Override + public List> getUnitEnterprisesUnitList() { + return Db.lambdaQuery(EnterprisesUnit.class) + .eq(EnterprisesUnit::getPoliceUnitId, UserUtil.getUnitId()) + .list() + .stream() + .map(item -> SelectNodeVo.builder() + .value(item.getSnowFlakeId()) + .label(item.getName()) + .extData(Dict.of(LambdaUtil.getFieldName(EnterprisesUnit::getType), item.getType())) + .build()) + .toList(); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/ProjectManageIndexServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/ProjectManageIndexServiceImpl.java index 82ee67c..9eb86f1 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/ProjectManageIndexServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/ProjectManageIndexServiceImpl.java @@ -1,31 +1,14 @@ package com.changhu.module.miniProgram.service.impl; -import cn.binarywang.wx.miniapp.api.WxMaQrcodeService; -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.changhu.common.exception.MessageException; import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.mapper.ServiceProjectMapper; -import com.changhu.module.miniProgram.pojo.entity.SecurityUser; -import com.changhu.module.miniProgram.pojo.params.SaveOrUpdateSecurityUserParams; +import com.changhu.mapper.ServiceProjectMapper; import com.changhu.module.miniProgram.pojo.vo.IndexServiceProjectListVo; import com.changhu.module.miniProgram.service.ProjectManageIndexService; -import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; -import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.FileSystemResource; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import java.io.*; import java.util.List; -import java.util.Optional; /** * @author 20252 @@ -39,66 +22,9 @@ public class ProjectManageIndexServiceImpl implements ProjectManageIndexService @Autowired private ServiceProjectMapper serviceProjectMapper; - @Autowired - private WxMaService wxMaService; - @Override public List getMyServiceProjectList() { return serviceProjectMapper.getServiceProjectList(null, UserUtil.getUserId()); } - @Override - public void deleteSecurityUserByServiceProjectId(Long securityUserId) { - boolean b = Db.removeById(securityUserId, SecurityUser.class); - if (!b) { - throw new MessageException(); - } - } - - @Override - public void saveOrUpdateSecurityUser(SaveOrUpdateSecurityUserParams params) { - SecurityUser securityUser = BeanUtil.copyProperties(params, SecurityUser.class); - //新增的情况 - Long snowFlakeId = securityUser.getSnowFlakeId(); - if (snowFlakeId == null) { - //判断是否已经存在 - boolean exists = Db.lambdaQuery(SecurityUser.class) - .eq(SecurityUser::getServiceProjectId, securityUser.getServiceProjectId()) - .eq(SecurityUser::getIdCard, securityUser.getIdCard()) - .exists(); - if (exists) { - throw new MessageException("服务项目下已经存在该人员"); - } - } else { - //如果修改了身份证 需要查重 - SecurityUser byId = Db.getById(snowFlakeId, SecurityUser.class); - if (!securityUser.getIdCard().equals(byId.getIdCard())) { - boolean exists = Db.lambdaQuery(SecurityUser.class) - .eq(SecurityUser::getServiceProjectId, securityUser.getServiceProjectId()) - .eq(SecurityUser::getIdCard, securityUser.getIdCard()) - .exists(); - if (exists) { - throw new MessageException("服务项目下已经存在该人员"); - } - } - } - boolean b = Db.saveOrUpdate(securityUser); - if (!b) { - throw new MessageException(); - } - } - - @Override - public ResponseEntity shareForm_QR_Code(String path, Integer width) { - WxMaQrcodeService qrcodeService = wxMaService.getQrcodeService(); - try { - File qrcodeFile = qrcodeService.createQrcode(path, width); - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + qrcodeFile.getName()) - .contentType(MediaType.APPLICATION_OCTET_STREAM) - .body(new FileSystemResource(qrcodeFile)); - } catch (WxErrorException e) { - throw new MessageException("生成表单二维码失败:{}", e.getMessage()); - } - } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/SupervisionAssessmentServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/SupervisionAssessmentServiceImpl.java new file mode 100644 index 0000000..472109d --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/SupervisionAssessmentServiceImpl.java @@ -0,0 +1,145 @@ +package com.changhu.module.miniProgram.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.lang.func.LambdaUtil; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.common.exception.MessageException; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.common.utils.SnowFlakeIdUtil; +import com.changhu.module.miniProgram.pojo.params.AssessmentRecordParams; +import com.changhu.module.miniProgram.pojo.vo.AssessmentCriteriaRuleVo; +import com.changhu.module.miniProgram.service.SupervisionAssessmentService; +import com.changhu.pojo.entity.*; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:48 + * @desc SupervisionAssessmentServiceImpl... + */ +@Service +public class SupervisionAssessmentServiceImpl implements SupervisionAssessmentService { + + @Override + public List> assessmentCriteriaListByType(EnterprisesUnitType type) { + return Db.lambdaQuery(CkProject.class).eq(CkProject::getType, type).list() + .stream() + .map(e -> SelectNodeVo.builder() + .value(e.getSnowFlakeId()) + .label(e.getName()) + .extData(Dict.create() + .set(LambdaUtil.getFieldName(CkProject::getRemark), e.getRemark()) + .set(LambdaUtil.getFieldName(CkProject::getTotalScore), e.getTotalScore()) + .set(LambdaUtil.getFieldName(CkProject::getType), e.getType()) + .set(LambdaUtil.getFieldName(CkProject::getCreateTime), e.getCreateTime()) + ) + .build()) + .toList(); + } + + @Override + public List assessmentCriteriaRulesByCkProjectId(Long ckProjectId) { + //根据考核项目拿到考核分组 + List groupList = Db.lambdaQuery(CkGroup.class) + .eq(CkGroup::getCkProjectId, ckProjectId) + .orderByAsc(BaseEntity::getCreateTime) + .list() + .stream() + .map(e -> { + AssessmentCriteriaRuleVo assessmentCriteriaRuleVo = new AssessmentCriteriaRuleVo(); + assessmentCriteriaRuleVo.setSnowFlakeId(e.getSnowFlakeId()); + assessmentCriteriaRuleVo.setName(e.getName()); + assessmentCriteriaRuleVo.setTotalScore(e.getTotalScore()); + assessmentCriteriaRuleVo.setRemark(e.getRemark()); + return assessmentCriteriaRuleVo; + }).toList(); + if (groupList.isEmpty()) { + throw new MessageException("该考核项目内暂未制定规则"); + } + //根据考核分组拿到考核项 + List itemList = Db.lambdaQuery(CkItem.class) + .in(CkItem::getCkGroupId, groupList.stream().map(AssessmentCriteriaRuleVo::getSnowFlakeId).toList()) + .orderByAsc(BaseEntity::getCreateTime) + .list() + .stream() + .map(e -> { + AssessmentCriteriaRuleVo.Item item = new AssessmentCriteriaRuleVo.Item(); + item.setSnowFlakeId(e.getSnowFlakeId()); + item.setCkGroupId(e.getCkGroupId()); + item.setName(e.getName()); + item.setType(e.getType()); + item.setRemark(e.getRemark()); + return item; + }).toList(); + if (itemList.isEmpty()) { + throw new MessageException("该考核项目内未制定考核项"); + } + //根据考核项拿到考核标准 + List standardList = Db.lambdaQuery(CkStandard.class) + .in(CkStandard::getCkItemId, itemList.stream().map(AssessmentCriteriaRuleVo.Item::getSnowFlakeId).toList()) + .orderByAsc(BaseEntity::getCreateTime) + .list().stream() + .map(e -> { + AssessmentCriteriaRuleVo.Standard standard = new AssessmentCriteriaRuleVo.Standard(); + standard.setSnowFlakeId(e.getSnowFlakeId()); + standard.setCkItemId(e.getCkItemId()); + standard.setName(e.getName()); + standard.setDeductionPoints(e.getDeductionPoints()); + return standard; + }).toList(); + if (standardList.isEmpty()) { + throw new MessageException("该考核项目内未制定考核标准"); + } + //先将考核标准塞到考核项内 + Map> standardMap = standardList.stream().collect(Collectors.groupingBy(AssessmentCriteriaRuleVo.Standard::getCkItemId)); + itemList.forEach(e -> e.setStandardList(standardMap.get(e.getSnowFlakeId()))); + //将考核项塞到考核分组内 + Map> itemMap = itemList.stream().collect(Collectors.groupingBy(AssessmentCriteriaRuleVo.Item::getCkGroupId)); + groupList.forEach(e -> e.setItemList(itemMap.get(e.getSnowFlakeId()))); + + return groupList; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void submitAssessmentRecord(AssessmentRecordParams params) { + CkAssessmentRecord ckAssessmentRecord = CkAssessmentRecord.builder() + .snowFlakeId(SnowFlakeIdUtil.snowflakeId()) + .enterprisesUnitId(params.getEnterprisesUnitId()) + .ckProjectId(params.getCkProjectId()) + .assessmentUserSignature(params.getAssessmentUserSignature()) + .byAssessmentEnterprisesUnitUserSignature(params.getByAssessmentEnterprisesUnitUserSignature()) + .remark(params.getRemark()) + .build(); + //保存考核记录 + boolean save = Db.save(ckAssessmentRecord); + if (!save) { + throw new MessageException(); + } + List assessmentRecordDetails = params.getAssessmentRecordDetails(); + if (CollUtil.isEmpty(assessmentRecordDetails)) { + return; + } + //保存考核明细 + boolean b = Db.saveBatch(assessmentRecordDetails.stream() + .map(e -> CkAssessmentRecordDetails.builder() + .ckAssessmentRecordId(ckAssessmentRecord.getSnowFlakeId()) + .ckProjectId(ckAssessmentRecord.getCkProjectId()) + .ckGroupId(e.getCkGroupId()) + .ckItemId(e.getCkItemId()) + .ckStandardId(e.getCkStandardId()) + .build()) + .toList()); + if (!b) { + throw new MessageException(); + } + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/UserServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..b40f924 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/UserServiceImpl.java @@ -0,0 +1,104 @@ +package com.changhu.module.miniProgram.service.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.enums.ResultCode; +import com.changhu.common.exception.MessageException; +import com.changhu.common.utils.SnowFlakeIdUtil; +import com.changhu.mapper.SecurityUserMapper; +import com.changhu.module.miniProgram.pojo.params.SecurityUserSaveOrUpdateParams; +import com.changhu.module.miniProgram.pojo.params.UserRegisterParams; +import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; +import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; +import com.changhu.module.miniProgram.service.UserService; +import com.changhu.pojo.entity.MiniProgramUser; +import com.changhu.pojo.entity.SecurityUser; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 20252 + * @createTime 2024/11/22 下午4:14 + * @desc UserServiceImpl... + */ +@Service("miniProgramUserService") +public class UserServiceImpl implements UserService { + @Autowired + private WxMaService wxMaService; + + @Autowired + private SecurityUserMapper securityUserMapper; + + @Override + public void register(UserRegisterParams params) { + MiniProgramUser miniProgramUser = BeanUtil.copyProperties(params, MiniProgramUser.class); + try { + WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(params.getCode()); + miniProgramUser.setOpenId(sessionInfo.getOpenid()); + miniProgramUser.setSessionKey(sessionInfo.getSessionKey()); + } catch (WxErrorException e) { + throw new MessageException(e.getMessage()); + } + boolean exists = Db.lambdaQuery(MiniProgramUser.class).eq(MiniProgramUser::getOpenId, miniProgramUser.getOpenId()).exists(); + if (exists) { + throw new MessageException("该用户已存在,请勿重复注册!"); + } + long userId = SnowFlakeIdUtil.snowflakeId(); + miniProgramUser.setSnowFlakeId(userId); + boolean save = Db.save(miniProgramUser); + if (!save) { + throw new MessageException(); + } + } + + @Override + public void saveOrUpdateSecurityUser(SecurityUserSaveOrUpdateParams params) { + SecurityUser securityUser = BeanUtil.copyProperties(params, SecurityUser.class); + //新增的情况 + Long snowFlakeId = securityUser.getSnowFlakeId(); + if (snowFlakeId == null) { + //判断是否已经存在 + boolean exists = Db.lambdaQuery(SecurityUser.class) + .eq(SecurityUser::getServiceProjectId, securityUser.getServiceProjectId()) + .eq(SecurityUser::getIdCard, securityUser.getIdCard()) + .exists(); + if (exists) { + throw new MessageException("服务项目下已经存在该人员"); + } + } else { + //如果修改了身份证 需要查重 + SecurityUser byId = Db.getById(snowFlakeId, SecurityUser.class); + if (!securityUser.getIdCard().equals(byId.getIdCard())) { + boolean exists = Db.lambdaQuery(SecurityUser.class) + .eq(SecurityUser::getServiceProjectId, securityUser.getServiceProjectId()) + .eq(SecurityUser::getIdCard, securityUser.getIdCard()) + .exists(); + if (exists) { + throw new MessageException("服务项目下已经存在该人员"); + } + } + } + Assert.isTrue(Db.saveOrUpdate(securityUser), ResultCode.ERROR.getMessage()); + } + + @Override + public void qrCodeFormInputSecurityUser(SecurityUserSaveOrUpdateParams params) { + this.saveOrUpdateSecurityUser(params); + } + + @Override + public Page securityUserPager(PageParams queryParams) { + return securityUserMapper.securityUserPager(queryParams.getPage(), queryParams.getParams()); + } + + @Override + public void deleteSecurityUserById(Long securityUserId) { + Assert.isTrue(Db.removeById(securityUserId, SecurityUser.class), ResultCode.ERROR.getMessage()); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/controller/EnterprisesUnitController.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/controller/EnterprisesUnitController.java new file mode 100644 index 0000000..19b2b0c --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/controller/EnterprisesUnitController.java @@ -0,0 +1,79 @@ +package com.changhu.module.policeManagement.controller; + +import com.baomidou.mybatisplus.core.toolkit.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.enums.ResultCode; +import com.changhu.module.miniProgram.pojo.params.SecurityUserSaveOrUpdateParams; +import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; +import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; +import com.changhu.module.policeManagement.pojo.params.ServiceProjectSaveOrUpdateParams; +import com.changhu.module.policeManagement.pojo.vo.ServiceProjectListVo; +import com.changhu.module.policeManagement.service.PoliceEnterprisesUnitService; +import com.changhu.pojo.entity.ServiceProject; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/27 下午2:37 + * @desc EnterprisesUnitController... + */ +@Tag(name = "公安后台-企事业单位") +@JsonBody +@RequestMapping("/m2/eu") +@RestController("policeManagementEnterprisesUnit") +@CheckUserType(userTypes = UserType.MANAGEMENT_POLICE) +public class EnterprisesUnitController { + + @Autowired + private PoliceEnterprisesUnitService policeEnterprisesUnitService; + + @Operation(summary = "事业单位下服务项目列表") + @GetMapping("/listSp") + public List listSp(@RequestParam @Schema(description = "事业单位id") Long enterprisesUnitId) { + return policeEnterprisesUnitService.listSp(enterprisesUnitId); + } + + @Operation(summary = "新增或保存服务项目") + @PostMapping("/add_upd_sp") + public void saveOrUpdateSp(@RequestBody @Valid ServiceProjectSaveOrUpdateParams params) { + policeEnterprisesUnitService.saveOrUpdateSp(params); + } + + @Operation(summary = "根据id删除服务项目") + @DeleteMapping("/deleteSpById") + public void deleteSpById(@RequestParam Long serviceProjectId) { + Assert.isTrue(Db.removeById(serviceProjectId, ServiceProject.class), ResultCode.ERROR.getMessage()); + } + + @Operation(summary = "新增或修改保安人员") + @PostMapping("/add_upd_sec_user") + public void saveOrUpdateSecurityUser(@RequestBody @Valid SecurityUserSaveOrUpdateParams params) { + policeEnterprisesUnitService.saveOrUpdateSecurityUser(params); + } + + @Operation(summary = "服务项目保安人员分页") + @PostMapping("/sec_user_pager") + public Page securityUserPager(@RequestBody PageParams queryParams) { + return policeEnterprisesUnitService.securityUserPager(queryParams); + } + + @Operation(summary = "根据id删除保安人员") + @DeleteMapping("/del_security_user_id") + public void deleteSecurityUserById(@RequestParam @Schema(description = "保安人员id") Long securityUserId) { + policeEnterprisesUnitService.deleteSecurityUserById(securityUserId); + } + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/controller/UserController.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/controller/UserController.java new file mode 100644 index 0000000..7ee87d3 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/controller/UserController.java @@ -0,0 +1,51 @@ +package com.changhu.module.policeManagement.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; +import com.changhu.module.policeManagement.pojo.params.UserSaveOrUpdateParams; +import com.changhu.module.policeManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.policeManagement.pojo.vo.UserPagerVo; +import com.changhu.module.policeManagement.service.UserService; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:26 + * @desc UserController... + */ +@Tag(name = "公安后台-用户管理") +@JsonBody +@RequestMapping("/m2/user") +@RestController("policeUserManagement") +@CheckUserType(userTypes = UserType.MANAGEMENT_POLICE) +public class UserController { + @Autowired + private UserService userService; + + @Operation(summary = "新增或保存后台用户") + @PostMapping("/add_upd") + public void userSaveOrUpdate(@RequestBody @Valid UserSaveOrUpdateParams params) { + userService.saveOrUpdate(params); + } + + @Operation(summary = "分页查询后台用户") + @PostMapping("/pager") + public Page userPager(@RequestBody PageParams queryParams) { + return userService.pager(queryParams); + } + + @Operation(summary = "根据id删除后台用户") + @DeleteMapping("/del_id") + public void userDeleteById(@RequestParam @Schema(description = "后台公安用户id") Long managementPoliceUnitUserId) { + userService.deleteById(managementPoliceUnitUserId); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/mapper/PoliceEnterprisesUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/mapper/PoliceEnterprisesUnitMapper.java new file mode 100644 index 0000000..1fc544e --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/mapper/PoliceEnterprisesUnitMapper.java @@ -0,0 +1,22 @@ +package com.changhu.module.policeManagement.mapper; + +import com.changhu.module.policeManagement.pojo.vo.ServiceProjectListVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/27 下午2:39 + * @desc PoliceEnterprisesUnitMapper... + */ +@Mapper +public interface PoliceEnterprisesUnitMapper { + + /** + * 事业单位下的服务项目 + */ + List listSp(@Param("unitId") Long unitId, + @Param("enterprisesUnitId") Long enterprisesUnitId); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/mapper/UserMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/mapper/UserMapper.java new file mode 100644 index 0000000..ca41f6a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/mapper/UserMapper.java @@ -0,0 +1,27 @@ +package com.changhu.module.policeManagement.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.policeManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.policeManagement.pojo.vo.UserPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:34 + * @desc UserMapper... + */ +@Mapper +@Repository("policeManagementUserMapper") +public interface UserMapper { + /** + * 分页查询用户 + * + * @param page 分页参数 + * @param params 查询参数 + * @return 用户 + */ + Page pager(@Param("page") Page page, + @Param("params") UserPagerQueryParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/params/ServiceProjectSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/params/ServiceProjectSaveOrUpdateParams.java new file mode 100644 index 0000000..a381c70 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/params/ServiceProjectSaveOrUpdateParams.java @@ -0,0 +1,68 @@ +package com.changhu.module.policeManagement.pojo.params; + +import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.ServiceProjectTwoType; +import com.changhu.common.db.enums.ServiceProjectType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/27 下午3:24 + * @desc ServiceProjectSaveOrUpdateParams... + */ +@Data +public class ServiceProjectSaveOrUpdateParams { + @Schema(description = "id") + private Long snowFlakeId; + + @Schema(description = "企事业单位id") + @NotNull(message = "企事业单位不能为空") + private Long enterprisesUnitId; + + @Schema(description = "保安单位id") + @NotNull(message = "保安单位不能为空") + private Long securityUnitId; + + @Schema(description = "项目经理小程序用户id") + private Long projectManagerMiniProgramUserId; + + @Schema(description = "名称") + @NotNull(message = "名称不能为空") + private String name; + + @Schema(description = "服务类型") + @NotNull(message = "服务类型不能为空") + private ServiceProjectType type; + + @Schema(description = "二级类型") + private ServiceProjectTwoType twoType; + + @Schema(description = "外包公司名称") + private String outsourceName; + + @Schema(description = "是否备案") + private IsOrNot isFiling; + + @Schema(description = "证件号(保安服务许可证/备案证)") + private String idNumber; + + @Schema(description = "服务区域面积") + private Double serviceArea; + + @Schema(description = "楼栋数量") + private Integer buildingTotal; + + @Schema(description = "户数") + private Integer houseTotal; + + @Schema(description = "工作人员数量") + private Integer staffTotal; + + @Schema(description = "保安人员数量") + private Integer securityUserTotal; + + @Schema(description = "备注") + private String remark; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementPoliceUserSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/params/UserSaveOrUpdateParams.java similarity index 85% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementPoliceUserSaveOrUpdateParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/params/UserSaveOrUpdateParams.java index 13a1e2a..67289f0 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementPoliceUserSaveOrUpdateParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/params/UserSaveOrUpdateParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.module.policeManagement.pojo.params; import com.changhu.common.db.enums.IsEnable; import com.changhu.common.db.enums.Sex; @@ -11,10 +11,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/4 下午3:04 - * @desc ManagementPoliceUserSaveOrUpdateParams... + * @desc UserSaveOrUpdateParams... */ @Data -public class ManagementPoliceUserSaveOrUpdateParams { +public class UserSaveOrUpdateParams { @Schema(description = "id") private Long snowFlakeId; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ManagementPoliceUnitUserPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/queryParams/UserPagerQueryParams.java similarity index 74% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ManagementPoliceUnitUserPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/queryParams/UserPagerQueryParams.java index 815a0ab..a064350 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ManagementPoliceUnitUserPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/queryParams/UserPagerQueryParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.module.policeManagement.pojo.queryParams; import com.changhu.common.db.enums.IsEnable; import com.changhu.common.db.enums.Sex; @@ -8,10 +8,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/4 下午3:22 - * @desc ManagementPoliceUnitUserPagerQueryParams... + * @desc UserPagerQueryParams... */ @Data -public class ManagementPoliceUnitUserPagerQueryParams { +public class UserPagerQueryParams { @Schema(description = "名字") private String name; @Schema(description = "手机号") diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/vo/ServiceProjectListVo.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/vo/ServiceProjectListVo.java new file mode 100644 index 0000000..569fcc4 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/vo/ServiceProjectListVo.java @@ -0,0 +1,63 @@ +package com.changhu.module.policeManagement.pojo.vo; + +import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.ServiceProjectTwoType; +import com.changhu.common.db.enums.ServiceProjectType; +import com.changhu.common.pojo.vo.CreateOrUpdateUser; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author 20252 + * @createTime 2024/11/27 下午2:42 + * @desc ServiceProjectListVo... + */ +@Data +public class ServiceProjectListVo { + @Schema(description = "id") + private Long snowFlakeId; + + @Schema(description = "企事业单位id") + private Long enterprisesUnitId; + @Schema(description = "保安单位id") + private Long securityUnitId; + + @Schema(description = "项目经理小程序用户id") + private Long projectManagerMiniProgramUserId; + @Schema(description = "项目经理小程序用户名称") + private String projectManagerMiniProgramUserName; + + @Schema(description = "服务项目名称") + private String name; + + @Schema(description = "服务类型") + private ServiceProjectType type; + @Schema(description = "二级类型") + private ServiceProjectTwoType twoType; + @Schema(description = "外包公司名称") + private String outsourceName; + + @Schema(description = "是否备案") + private IsOrNot isFiling; + @Schema(description = "证件号(服务类型为保安必填 服务类型为物业则需自招保安为必填)") + private String idNumber; + + @Schema(description = "服务区域面积") + private Double serviceArea; + @Schema(description = "楼栋数量") + private Integer buildingTotal; + @Schema(description = "户数") + private Integer houseTotal; + @Schema(description = "工作人员数量") + private Integer staffTotal; + @Schema(description = "保安人员数量") + private Integer securityUserTotal; + @Schema(description = "备注") + private String remark; + @Schema(description = "创建人") + private CreateOrUpdateUser createUserInfo; + @Schema(description = "创建时间") + private LocalDateTime createTime; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ManagementPoliceUnitUserPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/vo/UserPagerVo.java similarity index 86% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ManagementPoliceUnitUserPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/vo/UserPagerVo.java index 8866963..1a09318 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ManagementPoliceUnitUserPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/pojo/vo/UserPagerVo.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.module.policeManagement.pojo.vo; import com.changhu.common.db.enums.IsEnable; import com.changhu.common.db.enums.IsOrNot; @@ -11,10 +11,10 @@ import java.time.LocalDateTime; /** * @author 20252 * @createTime 2024/9/3 上午10:59 - * @desc ManagementSecurityUnitUserPagerVo... + * @desc UserPagerVo... */ @Data -public class ManagementPoliceUnitUserPagerVo { +public class UserPagerVo { @Schema(description = "id") private Long snowFlakeId; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/PoliceEnterprisesUnitService.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/PoliceEnterprisesUnitService.java new file mode 100644 index 0000000..f4434d7 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/PoliceEnterprisesUnitService.java @@ -0,0 +1,46 @@ +package com.changhu.module.policeManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.miniProgram.pojo.params.SecurityUserSaveOrUpdateParams; +import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; +import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; +import com.changhu.module.policeManagement.pojo.params.ServiceProjectSaveOrUpdateParams; +import com.changhu.module.policeManagement.pojo.vo.ServiceProjectListVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/27 下午2:38 + * @desc PoliceEnterprisesUnitService... + */ +public interface PoliceEnterprisesUnitService { + /** + * 事业单位下服务项目列表 + * + * @param enterprisesUnitId 事业单位id + * @return 服务项目列表 + */ + List listSp(Long enterprisesUnitId); + + /** + * 新增或者保存服务项目 + */ + void saveOrUpdateSp(ServiceProjectSaveOrUpdateParams params); + + /** + * 保险人员新增或者保存 + */ + void saveOrUpdateSecurityUser(SecurityUserSaveOrUpdateParams params); + + /** + * 服务项目下的保安人员分页 + */ + Page securityUserPager(PageParams queryParams); + + /** + * 根据保安人员id删除人员 + */ + void deleteSecurityUserById(Long securityUserId); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/UserService.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/UserService.java new file mode 100644 index 0000000..66ec0b5 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/UserService.java @@ -0,0 +1,36 @@ +package com.changhu.module.policeManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.policeManagement.pojo.params.UserSaveOrUpdateParams; +import com.changhu.module.policeManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.policeManagement.pojo.vo.UserPagerVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:30 + * @desc UserService... + */ +public interface UserService { + /** + * 新增或保存用户 + * + * @param params 参数 + */ + void saveOrUpdate(UserSaveOrUpdateParams params); + + /** + * 分页查询用户 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page pager(PageParams queryParams); + + /** + * 根据id删除用户 + * + * @param managementPoliceUnitUserId 公安单位用户id + */ + void deleteById(Long managementPoliceUnitUserId); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/impl/PoliceEnterprisesUnitServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/impl/PoliceEnterprisesUnitServiceImpl.java new file mode 100644 index 0000000..4e6e9f9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/impl/PoliceEnterprisesUnitServiceImpl.java @@ -0,0 +1,63 @@ +package com.changhu.module.policeManagement.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.enums.ResultCode; +import com.changhu.common.utils.UserUtil; +import com.changhu.module.miniProgram.pojo.params.SecurityUserSaveOrUpdateParams; +import com.changhu.module.miniProgram.pojo.queryParams.ServiceProjectSecurityUserPagerQueryParams; +import com.changhu.module.miniProgram.pojo.vo.ServiceProjectSecurityUserPagerVo; +import com.changhu.module.miniProgram.service.UserService; +import com.changhu.module.policeManagement.mapper.PoliceEnterprisesUnitMapper; +import com.changhu.module.policeManagement.pojo.params.ServiceProjectSaveOrUpdateParams; +import com.changhu.module.policeManagement.pojo.vo.ServiceProjectListVo; +import com.changhu.module.policeManagement.service.PoliceEnterprisesUnitService; +import com.changhu.pojo.entity.ServiceProject; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/27 下午2:38 + * @desc PoliceEnterprisesUnitServiceImpl... + */ +@Service +public class PoliceEnterprisesUnitServiceImpl implements PoliceEnterprisesUnitService { + + @Autowired + private PoliceEnterprisesUnitMapper policeEnterprisesUnitMapper; + + @Autowired + private UserService userService; + + @Override + public List listSp(Long enterprisesUnitId) { + return policeEnterprisesUnitMapper.listSp(UserUtil.getUnitId(), enterprisesUnitId); + } + + @Override + public void saveOrUpdateSp(ServiceProjectSaveOrUpdateParams params) { + ServiceProject serviceProject = BeanUtil.copyProperties(params, ServiceProject.class); + Assert.isTrue(Db.saveOrUpdate(serviceProject), ResultCode.ERROR.getMessage()); + } + + @Override + public void saveOrUpdateSecurityUser(SecurityUserSaveOrUpdateParams params) { + userService.saveOrUpdateSecurityUser(params); + } + + @Override + public Page securityUserPager(PageParams queryParams) { + return userService.securityUserPager(queryParams); + } + + @Override + public void deleteSecurityUserById(Long securityUserId) { + userService.deleteSecurityUserById(securityUserId); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/PoliceServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/impl/UserServiceImpl.java similarity index 63% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/PoliceServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/impl/UserServiceImpl.java index 821e5b4..c81944e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/PoliceServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/policeManagement/service/impl/UserServiceImpl.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.service.impl; +package com.changhu.module.policeManagement.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.RandomUtil; @@ -8,15 +8,12 @@ import com.baomidou.mybatisplus.extension.toolkit.Db; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.mapper.EnterprisesUnitMapper; -import com.changhu.module.management.mapper.ManagementPoliceUnitUserMapper; -import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser; -import com.changhu.module.management.pojo.params.ManagementPoliceUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ManagementPoliceUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.PoliceEnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementPoliceUnitUserPagerVo; -import com.changhu.module.management.pojo.vo.PoliceEnterprisesUnitPagerVo; -import com.changhu.module.management.service.PoliceService; +import com.changhu.module.policeManagement.mapper.UserMapper; +import com.changhu.module.policeManagement.pojo.params.UserSaveOrUpdateParams; +import com.changhu.module.policeManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.policeManagement.pojo.vo.UserPagerVo; +import com.changhu.module.policeManagement.service.UserService; +import com.changhu.pojo.entity.ManagementPoliceUnitUser; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import com.changhu.support.mybatisplus.pojo.params.PageParams; import org.springframework.beans.factory.annotation.Autowired; @@ -27,21 +24,18 @@ import java.util.List; /** * @author 20252 - * @createTime 2024/9/11 上午9:59 - * @desc MPoliceServiceImpl... + * @createTime 2024/11/22 上午9:30 + * @desc UserServiceImpl... */ -@Service -public class PoliceServiceImpl implements PoliceService { +@Service("policeManagementUserService") +public class UserServiceImpl implements UserService { @Autowired - private ManagementPoliceUnitUserMapper managementPoliceUnitUserMapper; - - @Autowired - private EnterprisesUnitMapper enterprisesUnitMapper; + private UserMapper userMapper; @Transactional(rollbackFor = Exception.class) @Override - public void userSaveOrUpdate(ManagementPoliceUserSaveOrUpdateParams params) { + public void saveOrUpdate(UserSaveOrUpdateParams params) { //查看手机号是否存在 boolean exists = Db.lambdaQuery(ManagementPoliceUnitUser.class) .ne(params.getSnowFlakeId() != null, BaseEntity::getSnowFlakeId, params.getSnowFlakeId()) @@ -72,12 +66,12 @@ public class PoliceServiceImpl implements PoliceService { } @Override - public Page userPager(PageParams queryParams) { - return managementPoliceUnitUserMapper.pager(queryParams.getPage(), queryParams.getParams()); + public Page pager(PageParams queryParams) { + return userMapper.pager(queryParams.getPage(), queryParams.getParams()); } @Override - public void userDeleteById(Long managementPoliceUnitUserId) { + public void deleteById(Long managementPoliceUnitUserId) { Long unitId = UserUtil.getUnitId(); Long l = Db.lambdaQuery(ManagementPoliceUnitUser.class) .eq(BaseEntity::getSnowFlakeId, managementPoliceUnitUserId) @@ -92,9 +86,4 @@ public class PoliceServiceImpl implements PoliceService { throw new MessageException(); } } - - @Override - public Page enterprisesUnitPager(PageParams queryParams) { - return enterprisesUnitMapper.policeEnterprisesUnitPager(queryParams.getPage(), queryParams.getParams()); - } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/SecurityController.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/SecurityController.java new file mode 100644 index 0000000..c3c4703 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/SecurityController.java @@ -0,0 +1,55 @@ +package com.changhu.module.securityManagement.controller; + +import cn.hutool.core.lang.Dict; +import cn.hutool.core.lang.func.LambdaUtil; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.IsEnable; +import com.changhu.common.db.enums.MiniProgramUserIdentity; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.common.utils.UserUtil; +import com.changhu.pojo.entity.MiniProgramUser; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 上午10:16 + * @desc SecurityController... + */ +@Tag(name = "保安后台-通用接口") +@JsonBody +@RequestMapping("/m3") +@CheckUserType(userTypes = UserType.MANAGEMENT_SECURITY) +@RestController +public class SecurityController { + + @Operation(summary = "查询单位下的项目经理") + @GetMapping("/list_p_m") + public List> listProjectManager() { + String tel = LambdaUtil.getFieldName(MiniProgramUser::getTelephone); + String sex = LambdaUtil.getFieldName(MiniProgramUser::getSex); + return Db.lambdaQuery(MiniProgramUser.class) + .eq(MiniProgramUser::getIsEnable, IsEnable.TRUE) + .eq(MiniProgramUser::getIdentity, MiniProgramUserIdentity.PROJECT_MANAGER) + .eq(MiniProgramUser::getUnitId, UserUtil.getUnitId()) + .list() + .stream() + .map(item -> SelectNodeVo.builder() + .value(item.getSnowFlakeId()) + .label(item.getName()) + .extData(Dict.of( + tel, item.getTelephone(), + sex, item.getSex() + )) + .build()) + .toList(); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/ServiceProjectController.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/ServiceProjectController.java similarity index 54% rename from policeSecurityServer/src/main/java/com/changhu/module/management/controller/ServiceProjectController.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/ServiceProjectController.java index c9dc499..f652613 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/controller/ServiceProjectController.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/ServiceProjectController.java @@ -1,14 +1,16 @@ -package com.changhu.module.management.controller; +package com.changhu.module.securityManagement.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; import com.changhu.common.annotation.CheckUserType; import com.changhu.common.annotation.JsonBody; -import com.changhu.common.annotation.UserType; +import com.changhu.common.db.enums.UserType; import com.changhu.common.exception.MessageException; -import com.changhu.module.management.pojo.params.ServiceProjectSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ServiceProjectPagerQueryParams; -import com.changhu.module.management.pojo.vo.ServiceProjectPagerVo; -import com.changhu.module.management.service.ServiceProjectService; +import com.changhu.module.securityManagement.pojo.params.ServiceProjectSaveOrUpdateParams; +import com.changhu.module.securityManagement.pojo.queryParams.ServiceProjectPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.ServiceProjectPagerVo; +import com.changhu.module.securityManagement.service.Service_ProjectService; +import com.changhu.pojo.entity.ServiceProject; import com.changhu.support.mybatisplus.pojo.params.PageParams; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -17,34 +19,35 @@ import org.springframework.web.bind.annotation.*; /** * @author 20252 - * @createTime 2024/9/5 上午11:09 + * @createTime 2024/11/22 上午10:19 * @desc ServiceProjectController... */ -@Tag(name = "服务项目") +@Tag(name = "保安后台-服务项目管理") @JsonBody -@RequestMapping("/serviceProject") +@RequestMapping("/m3/sp") +@RestController("securityServiceProjectManagement") @CheckUserType(userTypes = UserType.MANAGEMENT_SECURITY) public class ServiceProjectController { @Autowired - private ServiceProjectService serviceProjectService; + private Service_ProjectService service_projectService; @Operation(summary = "分页查询") @PostMapping("/pager") public Page pager(@RequestBody PageParams queryParams) { - return serviceProjectService.pager(queryParams); + return service_projectService.pager(queryParams); } @Operation(summary = "新增或者保存") - @PostMapping("/saveOrUpdate") + @PostMapping("/add_upd") public void saveOrUpdate(@RequestBody ServiceProjectSaveOrUpdateParams params) { - serviceProjectService.saveOrUpdate(params); + service_projectService.saveOrUpdate(params); } @Operation(summary = "根据id删除") - @DeleteMapping("/deleteById") + @DeleteMapping("/del_id") public void deleteById(@RequestParam Long serviceProjectId) { - boolean b = serviceProjectService.removeById(serviceProjectId); + boolean b = Db.removeById(serviceProjectId, ServiceProject.class); if (!b) { throw new MessageException(); } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/UserController.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/UserController.java new file mode 100644 index 0000000..eaa62de --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/controller/UserController.java @@ -0,0 +1,52 @@ +package com.changhu.module.securityManagement.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; +import com.changhu.module.securityManagement.pojo.params.UserSaveOrUpdateParams; +import com.changhu.module.securityManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.UserPagerVo; +import com.changhu.module.securityManagement.service.UserService; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:46 + * @desc UserController... + */ +@Tag(name = "保安后台-用户管理") +@JsonBody +@RequestMapping("/m3/user") +@RestController("securityUserManagement") +@CheckUserType(userTypes = UserType.MANAGEMENT_SECURITY) +public class UserController { + + @Autowired + private UserService userService; + + @Operation(summary = "新增或修改后台用户") + @PostMapping("/add_upd") + public void userSaveOrUpdate(@RequestBody @Valid UserSaveOrUpdateParams saveOrUpdateParams) { + userService.saveOrUpdate(saveOrUpdateParams); + } + + @Operation(summary = "分页查询后台用户") + @PostMapping("/pager") + public Page userPager(@RequestBody PageParams queryParams) { + return userService.pager(queryParams); + } + + @Operation(summary = "根据id删除后台用户") + @DeleteMapping("/del_id") + public void userDeleteById(@RequestParam @Schema(description = "后台保安用户id") Long managementSecurityUnitUserId) { + userService.deleteById(managementSecurityUnitUserId); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/mapper/Service_ProjectMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/mapper/Service_ProjectMapper.java new file mode 100644 index 0000000..9475334 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/mapper/Service_ProjectMapper.java @@ -0,0 +1,23 @@ +package com.changhu.module.securityManagement.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.securityManagement.pojo.queryParams.ServiceProjectPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.ServiceProjectPagerVo; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author 20252 + * @createTime 2024/11/22 上午10:25 + * @desc Service_ProjectMapper... + */ +@Mapper +public interface Service_ProjectMapper { + /** + * 分页查询 + * + * @param page 分页参数 + * @param params 查询参数 + * @return 结果 + */ + Page pager(Page page, ServiceProjectPagerQueryParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/mapper/UserMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/mapper/UserMapper.java new file mode 100644 index 0000000..58c0ff9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/mapper/UserMapper.java @@ -0,0 +1,27 @@ +package com.changhu.module.securityManagement.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.securityManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.UserPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:53 + * @desc UserMapper... + */ +@Mapper +@Repository("securityManagementUserMapper") +public interface UserMapper { + /** + * 分页查询 + * + * @param page 分页参数 + * @param params 查询参数 + * @return 结果 + */ + Page pager(@Param("page") Page page, + @Param("params") UserPagerQueryParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ServiceProjectSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/params/ServiceProjectSaveOrUpdateParams.java similarity index 76% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ServiceProjectSaveOrUpdateParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/params/ServiceProjectSaveOrUpdateParams.java index 2e83f4b..d20f9b5 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ServiceProjectSaveOrUpdateParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/params/ServiceProjectSaveOrUpdateParams.java @@ -1,6 +1,7 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.module.securityManagement.pojo.params; import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.ServiceProjectTwoType; import com.changhu.common.db.enums.ServiceProjectType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; @@ -32,10 +33,16 @@ public class ServiceProjectSaveOrUpdateParams { @NotNull(message = "服务类型不能为空") private ServiceProjectType type; - @Schema(description = "是否自招保安(只有当type为property 此字段必填)") - private IsOrNot isRecruitSecurity; + @Schema(description = "二级类型") + private ServiceProjectTwoType twoType; - @Schema(description = "证件号(服务类型为保安必填 服务类型为物业则需自招保安为必填)") + @Schema(description = "外包公司名称") + private String outsourceName; + + @Schema(description = "是否备案") + private IsOrNot isFiling; + + @Schema(description = "证件号(保安服务许可证/备案证)") private String idNumber; @Schema(description = "服务区域面积") diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementSecurityUnitUserSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/params/UserSaveOrUpdateParams.java similarity index 84% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementSecurityUnitUserSaveOrUpdateParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/params/UserSaveOrUpdateParams.java index 9e35740..b392891 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementSecurityUnitUserSaveOrUpdateParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/params/UserSaveOrUpdateParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.module.securityManagement.pojo.params; import com.changhu.common.db.enums.IsEnable; import com.changhu.common.db.enums.Sex; @@ -11,10 +11,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/3 上午10:26 - * @desc ManagementSecurityUnitUserSaveOrUpdateParams... + * @desc UserSaveOrUpdateParams... */ @Data -public class ManagementSecurityUnitUserSaveOrUpdateParams { +public class UserSaveOrUpdateParams { @Schema(description = "id") private Long snowFlakeId; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ServiceProjectPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/queryParams/ServiceProjectPagerQueryParams.java similarity index 90% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ServiceProjectPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/queryParams/ServiceProjectPagerQueryParams.java index 545ef53..9391c8a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ServiceProjectPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/queryParams/ServiceProjectPagerQueryParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.module.securityManagement.pojo.queryParams; import com.changhu.common.db.enums.ServiceProjectType; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ManagementSecurityUnitUserPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/queryParams/UserPagerQueryParams.java similarity index 68% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ManagementSecurityUnitUserPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/queryParams/UserPagerQueryParams.java index 4d7b2cd..2134e3c 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/ManagementSecurityUnitUserPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/queryParams/UserPagerQueryParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.module.securityManagement.pojo.queryParams; import com.changhu.common.db.enums.Sex; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,10 +7,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/3 上午11:02 - * @desc ManagementSecurityUnitUserPagerQueryParams... + * @desc UserPagerQueryParams... */ @Data -public class ManagementSecurityUnitUserPagerQueryParams { +public class UserPagerQueryParams { @Schema(description = "名字") private String name; @Schema(description = "手机号") diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ServiceProjectPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/vo/ServiceProjectPagerVo.java similarity index 84% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ServiceProjectPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/vo/ServiceProjectPagerVo.java index 61fc824..bb0b5d7 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ServiceProjectPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/vo/ServiceProjectPagerVo.java @@ -1,6 +1,7 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.module.securityManagement.pojo.vo; import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.ServiceProjectTwoType; import com.changhu.common.db.enums.ServiceProjectType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -36,10 +37,13 @@ public class ServiceProjectPagerVo { @Schema(description = "服务类型") private ServiceProjectType type; + @Schema(description = "二级类型") + private ServiceProjectTwoType twoType; + @Schema(description = "外包公司名称") + private String outsourceName; - @Schema(description = "是否自招保安(只有当type为property 此字段必填)") - private IsOrNot isRecruitSecurity; - + @Schema(description = "是否备案") + private IsOrNot isFiling; @Schema(description = "证件号(服务类型为保安必填 服务类型为物业则需自招保安为必填)") private String idNumber; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ManagementSecurityUnitUserPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/vo/UserPagerVo.java similarity index 87% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ManagementSecurityUnitUserPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/vo/UserPagerVo.java index d62c7af..b64503e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/ManagementSecurityUnitUserPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/pojo/vo/UserPagerVo.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.module.securityManagement.pojo.vo; import com.changhu.common.db.enums.IsEnable; import com.changhu.common.db.enums.IsOrNot; @@ -11,10 +11,10 @@ import java.time.LocalDateTime; /** * @author 20252 * @createTime 2024/9/3 上午10:59 - * @desc ManagementSecurityUnitUserPagerVo... + * @desc UserPagerVo... */ @Data -public class ManagementSecurityUnitUserPagerVo { +public class UserPagerVo { @Schema(description = "id") private Long snowFlakeId; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/Service_ProjectService.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/Service_ProjectService.java new file mode 100644 index 0000000..283207f --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/Service_ProjectService.java @@ -0,0 +1,29 @@ +package com.changhu.module.securityManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.securityManagement.pojo.params.ServiceProjectSaveOrUpdateParams; +import com.changhu.module.securityManagement.pojo.queryParams.ServiceProjectPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.ServiceProjectPagerVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +/** + * @author 20252 + * @createTime 2024/11/22 上午10:21 + * @desc Service_ProjectService... + */ +public interface Service_ProjectService { + /** + * 分页查询 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page pager(PageParams queryParams); + + /** + * 新增或者保存 + * + * @param params 参数 + */ + void saveOrUpdate(ServiceProjectSaveOrUpdateParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/UserService.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/UserService.java new file mode 100644 index 0000000..cade79f --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/UserService.java @@ -0,0 +1,36 @@ +package com.changhu.module.securityManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.securityManagement.pojo.params.UserSaveOrUpdateParams; +import com.changhu.module.securityManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.UserPagerVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +/** + * @author 20252 + * @createTime 2024/11/22 上午9:49 + * @desc UserService... + */ +public interface UserService { + /** + * 新增或修改 + * + * @param saveOrUpdateParams 参数 + */ + void saveOrUpdate(UserSaveOrUpdateParams saveOrUpdateParams); + + /** + * 分页查询 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page pager(PageParams queryParams); + + /** + * 根据id删除 + * + * @param managementSecurityUnitUserId 用户id + */ + void deleteById(Long managementSecurityUnitUserId); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/impl/Service_ProjectServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/impl/Service_ProjectServiceImpl.java new file mode 100644 index 0000000..5a22285 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/impl/Service_ProjectServiceImpl.java @@ -0,0 +1,43 @@ +package com.changhu.module.securityManagement.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.exception.MessageException; +import com.changhu.common.utils.UserUtil; +import com.changhu.module.securityManagement.mapper.Service_ProjectMapper; +import com.changhu.module.securityManagement.pojo.params.ServiceProjectSaveOrUpdateParams; +import com.changhu.module.securityManagement.pojo.queryParams.ServiceProjectPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.ServiceProjectPagerVo; +import com.changhu.module.securityManagement.service.Service_ProjectService; +import com.changhu.pojo.entity.ServiceProject; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 20252 + * @createTime 2024/11/22 上午10:22 + * @desc Service_ProjectServiceImpl... + */ +@Service +public class Service_ProjectServiceImpl implements Service_ProjectService { + + @Autowired + private Service_ProjectMapper service_projectMapper; + + @Override + public Page pager(PageParams queryParams) { + return service_projectMapper.pager(queryParams.getPage(), queryParams.getParams()); + } + + @Override + public void saveOrUpdate(ServiceProjectSaveOrUpdateParams params) { + ServiceProject serviceProject = BeanUtil.copyProperties(params, ServiceProject.class); + serviceProject.setSecurityUnitId(UserUtil.getUnitId()); + boolean b = Db.saveOrUpdate(serviceProject); + if (!b) { + throw new MessageException(); + } + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SecurityServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/impl/UserServiceImpl.java similarity index 55% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SecurityServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/impl/UserServiceImpl.java index f7a504b..514fa14 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SecurityServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/securityManagement/service/impl/UserServiceImpl.java @@ -1,28 +1,20 @@ -package com.changhu.module.management.service.impl; +package com.changhu.module.securityManagement.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.lang.Dict; -import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.changhu.common.annotation.UserType; -import com.changhu.common.db.enums.IsEnable; -import com.changhu.common.db.enums.MiniProgramUserIdentity; +import com.changhu.common.db.enums.UserType; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; -import com.changhu.common.pojo.vo.SelectNodeVo; import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.mapper.ManagementSecurityUnitUserMapper; -import com.changhu.module.management.pojo.entity.ManagementSecurityUnitUser; -import com.changhu.module.management.pojo.params.ManagementSecurityUnitUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.ManagementSecurityUnitUserPagerQueryParams; -import com.changhu.module.management.pojo.vo.ManagementSecurityUnitUserPagerVo; -import com.changhu.module.management.service.SecurityService; -import com.changhu.module.miniProgram.mapper.MiniProgramUserMapper; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; +import com.changhu.module.securityManagement.mapper.UserMapper; +import com.changhu.module.securityManagement.pojo.params.UserSaveOrUpdateParams; +import com.changhu.module.securityManagement.pojo.queryParams.UserPagerQueryParams; +import com.changhu.module.securityManagement.pojo.vo.UserPagerVo; +import com.changhu.module.securityManagement.service.UserService; +import com.changhu.pojo.entity.ManagementSecurityUnitUser; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import com.changhu.support.mybatisplus.pojo.params.PageParams; import org.springframework.beans.factory.annotation.Autowired; @@ -33,21 +25,18 @@ import java.util.List; /** * @author 20252 - * @createTime 2024/9/11 上午10:17 - * @desc SecurityServiceImpl... + * @createTime 2024/11/22 上午9:49 + * @desc UserServiceImpl... */ -@Service -public class SecurityServiceImpl implements SecurityService { +@Service("securityManagementUserService") +public class UserServiceImpl implements UserService { @Autowired - private ManagementSecurityUnitUserMapper managementSecurityUnitUserMapper; - - @Autowired - private MiniProgramUserMapper miniProgramUserMapper; + private UserMapper userMapper; @Transactional(rollbackFor = Exception.class) @Override - public void userSaveOrUpdate(ManagementSecurityUnitUserSaveOrUpdateParams saveOrUpdateParams) { + public void saveOrUpdate(UserSaveOrUpdateParams saveOrUpdateParams) { //查看手机号是否已存在 boolean exists = Db.lambdaQuery(ManagementSecurityUnitUser.class) .ne(saveOrUpdateParams.getSnowFlakeId() != null, BaseEntity::getSnowFlakeId, saveOrUpdateParams.getSnowFlakeId()) @@ -84,12 +73,12 @@ public class SecurityServiceImpl implements SecurityService { } @Override - public Page userPager(PageParams queryParams) { - return managementSecurityUnitUserMapper.pager(queryParams.getPage(), queryParams.getParams()); + public Page pager(PageParams queryParams) { + return userMapper.pager(queryParams.getPage(), queryParams.getParams()); } @Override - public void userDeleteById(Long managementSecurityUnitUserId) { + public void deleteById(Long managementSecurityUnitUserId) { Long unitId = UserUtil.getUnitId(); Long l = Db.lambdaQuery(ManagementSecurityUnitUser.class) .eq(BaseEntity::getSnowFlakeId, managementSecurityUnitUserId) @@ -104,24 +93,4 @@ public class SecurityServiceImpl implements SecurityService { throw new MessageException(); } } - - @Override - public List> listProjectManager() { - String tel = LambdaUtil.getFieldName(MiniProgramUser::getTelephone); - String sex = LambdaUtil.getFieldName(MiniProgramUser::getSex); - return miniProgramUserMapper.selectList(Wrappers.lambdaQuery() - .eq(MiniProgramUser::getIsEnable, IsEnable.TRUE) - .eq(MiniProgramUser::getIdentity, MiniProgramUserIdentity.PROJECT_MANAGER) - .eq(MiniProgramUser::getUnitId, UserUtil.getUnitId())) - .stream() - .map(item -> SelectNodeVo.builder() - .value(item.getSnowFlakeId()) - .label(item.getName()) - .extData(Dict.of( - tel, item.getTelephone(), - sex, item.getSex() - )) - .build()) - .toList(); - } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AccessKeysController.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AccessKeysController.java new file mode 100644 index 0000000..de3cb99 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AccessKeysController.java @@ -0,0 +1,68 @@ +package com.changhu.module.superManagement.controller; + +import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.lang.Dict; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.controller.OpenController; +import com.changhu.module.superManagement.pojo.params.GeneratedAccessKeyParams; +import com.changhu.pojo.entity.AccessKeys; +import com.changhu.service.AccessKeysService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/19 上午10:38 + * @desc AccessKeysController... + */ +@Tag(name = "超级后台-开放平台") +@RequestMapping("/m1/accessKeys") +@JsonBody +@CheckUserType(userTypes = UserType.MANAGEMENT_SUPER) +@RestController +public class AccessKeysController { + + @Autowired + private AccessKeysService accessKeysService; + + @GetMapping("/listOpenApi") + public List> listOpenApi() { + Class openControllerClass = OpenController.class; + RequestMapping requestMapping = AnnotatedElementUtils.findMergedAnnotation(openControllerClass, RequestMapping.class); + String controllerPath = requestMapping.value()[0]; + return Arrays.stream(openControllerClass.getMethods()) + .filter(m -> AnnotationUtil.hasAnnotation(m, RequestMapping.class)) + .map(m -> { + Operation operation = m.getAnnotation(Operation.class); + RequestMapping mReq = AnnotatedElementUtils.findMergedAnnotation(m, RequestMapping.class); + return SelectNodeVo.builder() + .value(controllerPath + mReq.value()[0]) + .label(operation.summary()) + .extData(Dict.of("methods", mReq.method())) + .build(); + }) + .toList(); + } + + @Operation(summary = "生成访问凭证") + @PostMapping("/generatedAccessKey") + public void generatedAccessKey(@RequestBody GeneratedAccessKeyParams params) { + accessKeysService.generatedAccessKey(params); + } + + @Operation(summary = "访问凭证列表") + @GetMapping("/tableList") + public List tableList() { + return accessKeysService.list(); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AssessmentCriteriaController.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AssessmentCriteriaController.java new file mode 100644 index 0000000..dc619d9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AssessmentCriteriaController.java @@ -0,0 +1,109 @@ +package com.changhu.module.superManagement.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.exception.MessageException; +import com.changhu.module.superManagement.pojo.params.CkGroupSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkItemSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkProjectSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkStandardSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.queryParams.CkProjectPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.CkProjectDetailTableVo; +import com.changhu.module.superManagement.pojo.vo.CkProjectPagerVo; +import com.changhu.module.superManagement.service.AssessmentCriteriaService; +import com.changhu.pojo.entity.CkGroup; +import com.changhu.pojo.entity.CkItem; +import com.changhu.pojo.entity.CkStandard; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:36 + * @desc AssessmentCriteriaController... + */ +@Tag(name = "超级后台-考核标准") +@JsonBody +@RequestMapping("/m1/ac") +@RestController +public class AssessmentCriteriaController { + + @Autowired + private AssessmentCriteriaService assessmentCriteriaService; + + @Operation(summary = "考核项目分页查询") + @PostMapping("/ckProjectPagerVoPager") + public Page ckProjectPagerVoPager(@RequestBody PageParams queryParams) { + return assessmentCriteriaService.ckProjectPagerVoPager(queryParams); + } + + @Operation(summary = "新增或修改考核项目") + @PostMapping("/saveOrUpdateCkProject") + public void saveOrUpdateCkProject(@Valid @RequestBody CkProjectSaveOrUpdateParams params) { + assessmentCriteriaService.saveOrUpdateCkProject(params); + } + + @Operation(summary = "删除考核项目") + @DeleteMapping("/deleteCkProjectById") + public void deleteCkProjectById(@RequestParam Long ckProjectId) { + assessmentCriteriaService.deleteCkProjectById(ckProjectId); + } + + @Operation(summary = "考核项目详情") + @GetMapping("/ckProjectDetail") + public List ckProjectDetail(@RequestParam Long ckProjectId) { + return assessmentCriteriaService.ckProjectDetail(ckProjectId); + } + + @Operation(summary = "新增或修改考核分组") + @PostMapping("/saveOrUpdateCkGroup") + public void saveOrUpdateCkGroup(@Valid @RequestBody CkGroupSaveOrUpdateParams params) { + assessmentCriteriaService.saveOrUpdateCkGroup(params); + } + + @Operation(summary = "新增或修改考核项") + @PostMapping("/saveOrUpdateCkItem") + public void saveOrUpdateCkItem(@Valid @RequestBody CkItemSaveOrUpdateParams params) { + assessmentCriteriaService.saveOrUpdateCkItem(params); + } + + @Operation(summary = "新增或修改考核标准") + @PostMapping("/saveOrUpdateCkStandard") + public void saveOrUpdateCkStandard(@Valid @RequestBody CkStandardSaveOrUpdateParams params) { + assessmentCriteriaService.saveOrUpdateCkStandard(params); + } + + @Operation(summary = "删除考核分组") + @DeleteMapping("/deleteCkGroupById") + public void deleteCkGroupById(@RequestParam Long ckGroupId) { + boolean b = Db.removeById(ckGroupId, CkGroup.class); + if (!b) { + throw new MessageException(); + } + } + + @Operation(summary = "删除考核项") + @DeleteMapping("/deleteCkItemById") + public void deleteCkItemById(@RequestParam Long ckItemId) { + boolean b = Db.removeById(ckItemId, CkItem.class); + if (!b) { + throw new MessageException(); + } + } + + @Operation(summary = "删除考核标准") + @DeleteMapping("/deleteCkStandardById") + public void deleteCkStandardById(@RequestParam Long ckStandardId) { + boolean b = Db.removeById(ckStandardId, CkStandard.class); + if (!b) { + throw new MessageException(); + } + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AssessmentRecordController.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AssessmentRecordController.java new file mode 100644 index 0000000..8434d15 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/AssessmentRecordController.java @@ -0,0 +1,46 @@ +package com.changhu.module.superManagement.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; +import com.changhu.module.superManagement.pojo.queryParams.AssessmentRecordPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordDetailVo; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordPagerVo; +import com.changhu.module.superManagement.service.AssessmentRecordService; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/8 下午3:51 + * @desc AssessmentRecordController... + */ +@Tag(name = "超级后台-考核记录") +@JsonBody +@RequestMapping("/m1/ar") +@CheckUserType(userTypes = {UserType.MANAGEMENT_POLICE, UserType.MANAGEMENT_SUPER}) +@RestController +public class AssessmentRecordController { + + @Autowired + private AssessmentRecordService assessmentRecordService; + + @Operation(summary = "考核记录分页") + @PostMapping("/pager") + public Page pager(@RequestBody PageParams queryParams) { + return assessmentRecordService.pager(queryParams); + } + + @Operation(summary = "扣分详情") + @GetMapping("/deductedDetail") + public List deductedDetail(@RequestParam Long assessmentRecordId) { + return assessmentRecordService.deductedDetail(assessmentRecordId); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/SuperIndexController.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/SuperIndexController.java new file mode 100644 index 0000000..920ab84 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/SuperIndexController.java @@ -0,0 +1,43 @@ +package com.changhu.module.superManagement.controller; + +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.annotation.JsonBody; +import com.changhu.module.superManagement.pojo.vo.EnterprisesUnitServiceProjectSecurityUserTotalVo; +import com.changhu.module.superManagement.service.SuperIndexService; +import com.changhu.pojo.entity.EnterprisesUnit; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/21 上午11:31 + * @desc SuperIndexController... + */ +@JsonBody +@Tag(name = "超级后台-首页") +@RequestMapping("/m1/index") +@RestController +public class SuperIndexController { + + @Autowired + private SuperIndexService superIndexService; + + @Operation(summary = "企事业单位地图点位") + @GetMapping("/points") + public List points() { + return Db.lambdaQuery(EnterprisesUnit.class).list(); + } + + @Operation(summary = "统计事业单位 服务项目及保安人数") + @GetMapping("/statistics") + public EnterprisesUnitServiceProjectSecurityUserTotalVo statistics() { + return superIndexService.statistics(); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/SuperUnitController.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/SuperUnitController.java new file mode 100644 index 0000000..0b98661 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/controller/SuperUnitController.java @@ -0,0 +1,70 @@ +package com.changhu.module.superManagement.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.annotation.CheckUserType; +import com.changhu.common.annotation.JsonBody; +import com.changhu.common.db.enums.UserType; +import com.changhu.module.superManagement.pojo.params.ManagementSuperUserSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.UnitCheckPassParams; +import com.changhu.module.superManagement.pojo.queryParams.PoliceUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.queryParams.SecurityUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.PoliceUnitPagerVo; +import com.changhu.module.superManagement.pojo.vo.SecurityUnitPagerVo; +import com.changhu.module.superManagement.service.SuperUnitService; +import com.changhu.pojo.params.UnitDisableOrEnableParams; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 20252 + * @createTime 2024/9/11 上午9:38 + * @desc ManagementSuperController... + */ +@Tag(name = "超级后台-单位管理") +@JsonBody +@RequestMapping("/m1/unit") +@CheckUserType(userTypes = UserType.MANAGEMENT_SUPER) +@RestController +public class SuperUnitController { + + @Autowired + private SuperUnitService superUnitService; + + @Operation(summary = "新增或保存后台用户") + @PostMapping("/add_upd/user") + public void saveOrUpdateUser(@RequestBody @Valid ManagementSuperUserSaveOrUpdateParams params) { + superUnitService.saveOrUpdateUser(params); + } + + @Operation(summary = "公安单位分页查询") + @PostMapping("/police/pager") + public Page policeUnitPager(@RequestBody PageParams queryParams) { + return superUnitService.policeUnitPager(queryParams); + } + + @Operation(summary = "保安单位分页查询") + @PostMapping("/security/pager") + public Page securityUnitPager(@RequestBody PageParams queryParams) { + return superUnitService.securityUnitPager(queryParams); + } + + @Operation(summary = "审核通过") + @PostMapping("/check_pass") + public void checkPass(@RequestBody @Valid UnitCheckPassParams params) { + superUnitService.checkPass(params); + } + + @Operation(summary = "启用或禁用状态") + @PostMapping("/disable_enable") + public void disableOrEnable(@RequestBody @Valid UnitDisableOrEnableParams params) { + superUnitService.disableOrEnable(params); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/AssessmentCriteriaMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/AssessmentCriteriaMapper.java new file mode 100644 index 0000000..0bfd096 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/AssessmentCriteriaMapper.java @@ -0,0 +1,36 @@ +package com.changhu.module.superManagement.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.superManagement.pojo.queryParams.CkProjectPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.CkProjectDetailTableVo; +import com.changhu.module.superManagement.pojo.vo.CkProjectPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:42 + * @desc AssessmentCriteriaMapper... + */ +@Mapper +public interface AssessmentCriteriaMapper { + /** + * 分页查询 + * + * @param page 分页参数 + * @param params 查询参数 + * @return 分页数据 + */ + Page ckProjectPager(@Param("page") Page page, + @Param("params") CkProjectPagerQueryParams params); + + /** + * 考核项目详情 + * + * @param ckProjectId 考核项目id + * @return 详情 + */ + List ckProjectDetail(@Param("ckProjectId") Long ckProjectId); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/AssessmentRecordMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/AssessmentRecordMapper.java new file mode 100644 index 0000000..8a42eac --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/AssessmentRecordMapper.java @@ -0,0 +1,27 @@ +package com.changhu.module.superManagement.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.superManagement.pojo.queryParams.AssessmentRecordPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 20252 + * @createTime 2024/11/22 下午3:05 + * @desc AssessmentRecordMapper... + */ +@Mapper +public interface AssessmentRecordMapper { + /** + * 分页查询 + * + * @param page 分页对象 + * @param policeUnitId 公安单位id + * @param params 查询参数 + * @return 结果 + */ + Page pager(@Param("page") Page page, + @Param("policeUnitId") Long policeUnitId, + @Param("params") AssessmentRecordPagerQueryParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/SuperIndexMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/SuperIndexMapper.java new file mode 100644 index 0000000..02d546e --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/SuperIndexMapper.java @@ -0,0 +1,12 @@ +package com.changhu.module.superManagement.mapper; + +import org.apache.ibatis.annotations.Mapper; + +/** + * @author 20252 + * @createTime 2024/11/21 上午11:32 + * @desc SuperIndexMapper... + */ +@Mapper +public interface SuperIndexMapper { +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/SuperUnitMapper.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/SuperUnitMapper.java new file mode 100644 index 0000000..f5a7c48 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/mapper/SuperUnitMapper.java @@ -0,0 +1,37 @@ +package com.changhu.module.superManagement.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.superManagement.pojo.queryParams.PoliceUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.queryParams.SecurityUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.PoliceUnitPagerVo; +import com.changhu.module.superManagement.pojo.vo.SecurityUnitPagerVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 20252 + * @createTime 2024/11/21 下午3:15 + * @desc SuperUnitMapper... + */ +@Mapper +public interface SuperUnitMapper { + /** + * 分页查询 + * + * @param page 分页参数 + * @param params 查询参数 + * @return 结果 + */ + Page policeUnitPager(@Param("page") Page page, + @Param("params") PoliceUnitPagerQueryParams params); + + /** + * 分页查询 + * + * @param page 分页对象 + * @param params 查询参数 + * @return 结果 + */ + Page securityUnitPager(@Param("page") Page page, + @Param("params") SecurityUnitPagerQueryParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkGroupSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkGroupSaveOrUpdateParams.java new file mode 100644 index 0000000..f7fa1a6 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkGroupSaveOrUpdateParams.java @@ -0,0 +1,32 @@ +package com.changhu.module.superManagement.pojo.params; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/6 上午10:31 + * @desc CkProjectSaveOrUpdateParams... + */ +@Data +public class CkGroupSaveOrUpdateParams { + @Schema(description = "考核分组id") + private Long snowFlakeId; + + @Schema(description = "考核项目id") + @NotNull(message = "所属考核项目不能为空") + private Long ckProjectId; + + @NotBlank(message = "考核组名不能为空") + @Schema(description = "考核组名称") + private String name; + + @NotNull(message = "考核组分数不能为空") + @Schema(description = "考核组总分") + private Integer totalScore; + + @Schema(description = "备注") + private String remark; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkItemSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkItemSaveOrUpdateParams.java new file mode 100644 index 0000000..48948f7 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkItemSaveOrUpdateParams.java @@ -0,0 +1,33 @@ +package com.changhu.module.superManagement.pojo.params; + +import com.changhu.common.db.enums.SelectType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/6 上午11:51 + * @desc CkItemSaveOrUpdateParams... + */ +@Data +public class CkItemSaveOrUpdateParams { + @Schema(description = "id") + private Long snowFlakeId; + + @NotNull(message = "考核组不能为空") + @Schema(description = "考核组id") + private Long ckGroupId; + + @NotBlank(message = "考核项名称不能为空") + @Schema(description = "考核项名称") + private String name; + + @NotNull(message = "组件类型不能为空") + @Schema(description = "组件类型") + private SelectType type; + + @Schema(description = "备注") + private String remark; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkProjectSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkProjectSaveOrUpdateParams.java new file mode 100644 index 0000000..4dc8df9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkProjectSaveOrUpdateParams.java @@ -0,0 +1,33 @@ +package com.changhu.module.superManagement.pojo.params; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/6 上午10:31 + * @desc CkProjectSaveOrUpdateParams... + */ +@Data +public class CkProjectSaveOrUpdateParams { + @Schema(description = "考核项目id") + private Long snowFlakeId; + + @NotBlank(message = "考核项目名不能为空") + @Schema(description = "考核项目名称") + private String name; + + @NotNull(message = "单位类型不能为空") + @Schema(description = "对应企事业单位类型") + private EnterprisesUnitType type; + + @NotNull(message = "考核分数不能为空") + @Schema(description = "考核总分") + private Integer totalScore; + + @Schema(description = "备注") + private String remark; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkStandardSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkStandardSaveOrUpdateParams.java new file mode 100644 index 0000000..55578d9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/CkStandardSaveOrUpdateParams.java @@ -0,0 +1,30 @@ +package com.changhu.module.superManagement.pojo.params; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/6 下午2:50 + * @desc CkStandardSaveOrUpdateParams... + */ +@Data +public class CkStandardSaveOrUpdateParams { + @Schema(description = "考核标准id") + private Long snowFlakeId; + + @NotNull + @Schema(description = "考核项id") + private Long ckItemId; + + @NotBlank(message = "标准名不能为空") + @Schema(description = "标准名") + private String name; + + @NotNull(message = "扣分值不能为空") + @Schema(description = "扣分值") + private Double deductionPoints; + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/GeneratedAccessKeyParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/GeneratedAccessKeyParams.java new file mode 100644 index 0000000..2aaee34 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/GeneratedAccessKeyParams.java @@ -0,0 +1,37 @@ +package com.changhu.module.superManagement.pojo.params; + +import com.changhu.common.db.enums.IsEnable; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/19 上午11:19 + * @desc GeneratedAccessKeyParams... + */ +@Data +public class GeneratedAccessKeyParams { + private Long snowFlakeId; + + @Schema(description = "调用方") + @NotBlank(message = "调用方不能为空") + private String name; + + @NotNull(message = "请输入有效时间") + @Schema(description = "有效时间") + private Integer effectiveTime; + + @Schema(description = "允许访问的资源") + private List allowedResources; + + @NotNull + @Schema(description = "是否启用") + private IsEnable isEnable; + + @Schema(description = "备注") + private String remark; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementSuperUserSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/ManagementSuperUserSaveOrUpdateParams.java similarity index 91% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementSuperUserSaveOrUpdateParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/ManagementSuperUserSaveOrUpdateParams.java index 3668686..ab54a9a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/ManagementSuperUserSaveOrUpdateParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/ManagementSuperUserSaveOrUpdateParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.module.superManagement.pojo.params; import com.changhu.common.validator.annotation.IsMobile; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexCheckPassParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/UnitCheckPassParams.java similarity index 71% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexCheckPassParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/UnitCheckPassParams.java index adb448b..f9dd25a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexCheckPassParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/params/UnitCheckPassParams.java @@ -1,6 +1,6 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.module.superManagement.pojo.params; -import com.changhu.module.management.enums.UnitOptType; +import com.changhu.strategy.UnitOptType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -8,10 +8,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/2 上午9:59 - * @desc IndexCheckPassParams... + * @desc UnitCheckPassParams... */ @Data -public class IndexCheckPassParams { +public class UnitCheckPassParams { @Schema(description = "审核数据的id") @NotNull(message = "审核数据的id不能为空") private Long checkDataId; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/AssessmentRecordPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/AssessmentRecordPagerQueryParams.java new file mode 100644 index 0000000..6c243f7 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/AssessmentRecordPagerQueryParams.java @@ -0,0 +1,22 @@ +package com.changhu.module.superManagement.pojo.queryParams; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/8 下午3:52 + * @desc AssessmentRecordPagerQueryParams... + */ +@Data +public class AssessmentRecordPagerQueryParams { + @Schema(description = "企事业单位类型") + private EnterprisesUnitType type; + @Schema(description = "公安单位名称") + private String policeUnitName; + @Schema(description = "企事业单位名称") + private String enterprisesUnitName; + @Schema(description = "考核人") + private String assessmentUserName; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/CkProjectPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/CkProjectPagerQueryParams.java new file mode 100644 index 0000000..5b8910e --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/CkProjectPagerQueryParams.java @@ -0,0 +1,15 @@ +package com.changhu.module.superManagement.pojo.queryParams; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/6 上午10:09 + * @desc CkProjectPagerQueryParams... + */ +@Data +public class CkProjectPagerQueryParams { + private String name; + private EnterprisesUnitType type; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/PoliceUnitPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/PoliceUnitPagerQueryParams.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/PoliceUnitPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/PoliceUnitPagerQueryParams.java index 178e81f..71971cc 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/PoliceUnitPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/PoliceUnitPagerQueryParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.module.superManagement.pojo.queryParams; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/SecurityUnitPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/SecurityUnitPagerQueryParams.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/SecurityUnitPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/SecurityUnitPagerQueryParams.java index 253c23b..7e92d29 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/SecurityUnitPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/queryParams/SecurityUnitPagerQueryParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.module.superManagement.pojo.queryParams; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/AssessmentRecordDetailVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/AssessmentRecordDetailVo.java new file mode 100644 index 0000000..53e8328 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/AssessmentRecordDetailVo.java @@ -0,0 +1,43 @@ +package com.changhu.module.superManagement.pojo.vo; + +import com.changhu.common.db.enums.SelectType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/11 上午9:39 + * @desc AssessmentRecordDetailVo... + */ +@Data +public class AssessmentRecordDetailVo { + + @Schema(description = "考核分组id") + private Long ckGroupId; + @Schema(description = "考核分组名字") + private String groupName; + @Schema(description = "考核分组总分") + private Integer groupTotalScore; + @Schema(description = "考核分组备注") + private String groupRemark; + + @Schema(description = "考核项id") + private Long ckItemId; + @Schema(description = "考核项名字") + private String itemName; + @Schema(description = "组件类型") + private SelectType itemType; + @Schema(description = "考核项备注") + private String itemRemark; + + @Schema(description = "考核标准id") + private Long ckStandardId; + @Schema(description = "考核标准") + private String standardName; + @Schema(description = "扣分数") + private Double deductionPoints; + + + @Schema(description = "是否选中") + public Boolean isSelected; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/AssessmentRecordPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/AssessmentRecordPagerVo.java new file mode 100644 index 0000000..40b2442 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/AssessmentRecordPagerVo.java @@ -0,0 +1,47 @@ +package com.changhu.module.superManagement.pojo.vo; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author 20252 + * @createTime 2024/11/8 下午3:53 + * @desc AssessmentRecordPagerVo... + */ +@Data +public class AssessmentRecordPagerVo { + @Schema(description = "考核记录id") + private Long snowFlakeId; + @Schema(description = "企事业单位名称") + private String enterprisesUnitName; + + @Schema(description = "考核项目名称") + private String ckProjectName; + @Schema(description = "考核项目总分") + private Integer totalScore; + @Schema(description = "考核项目类型") + private EnterprisesUnitType type; + @Schema(description = "考核项目备注") + private String ckProjectRemark; + + @Schema(description = "公安单位名称") + private String policeUnitName; + @Schema(description = "在这是考核人") + private String createUserName; + @Schema(description = "在这是考核时间") + private LocalDateTime createTime; + + @Schema(description = "考核人员签字") + private String assessmentUserSignature; + @Schema(description = "被考核单位人员签字") + private String byAssessmentEnterprisesUnitUserSignature; + @Schema(description = "考核备注") + private String remark; + + @Schema(description = "总扣分") + private Double deductionPointsTotal; + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/CkProjectDetailTableVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/CkProjectDetailTableVo.java new file mode 100644 index 0000000..b5166c0 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/CkProjectDetailTableVo.java @@ -0,0 +1,39 @@ +package com.changhu.module.superManagement.pojo.vo; + +import com.changhu.common.db.enums.SelectType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/6 上午11:03 + * @desc CkProjectDetailTableVo... + */ +@Data +public class CkProjectDetailTableVo { + + @Schema(description = "考核分组id") + private Long ckGroupId; + @Schema(description = "考核分组名字") + private String groupName; + @Schema(description = "考核分组总分") + private Integer groupTotalScore; + @Schema(description = "考核分组备注") + private String groupRemark; + + @Schema(description = "考核项id") + private Long ckItemId; + @Schema(description = "考核项名字") + private String itemName; + @Schema(description = "组件类型") + private SelectType itemType; + @Schema(description = "考核项备注") + private String itemRemark; + + @Schema(description = "考核标准id") + private Long ckStandardId; + @Schema(description = "考核标准") + private String standardName; + @Schema(description = "扣分数") + private Double deductionPoints; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/CkProjectPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/CkProjectPagerVo.java new file mode 100644 index 0000000..1fb78eb --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/CkProjectPagerVo.java @@ -0,0 +1,31 @@ +package com.changhu.module.superManagement.pojo.vo; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author 20252 + * @createTime 2024/11/6 上午10:05 + * @desc CkProjectPagerVo... + */ +@Data +public class CkProjectPagerVo { + + @Schema(description = "考核项目id") + private Long snowFlakeId; + @Schema(description = "考核项目名称") + private String name; + @Schema(description = "对应企事业单位类型") + private EnterprisesUnitType type; + @Schema(description = "考核总分") + private Integer totalScore; + @Schema(description = "备注") + private String remark; + @Schema(description = "创建时间") + private LocalDateTime createTime; + @Schema(description = "创建人名字") + private String createUserName; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/EnterprisesUnitServiceProjectSecurityUserTotalVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/EnterprisesUnitServiceProjectSecurityUserTotalVo.java new file mode 100644 index 0000000..78382f1 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/EnterprisesUnitServiceProjectSecurityUserTotalVo.java @@ -0,0 +1,19 @@ +package com.changhu.module.superManagement.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/21 下午2:32 + * @desc EnterprisesUnitServiceProjectSecurityUserTotalVo... + */ +@Data +public class EnterprisesUnitServiceProjectSecurityUserTotalVo { + @Schema(description = "企事业单位数量") + private Integer enterprisesUnitTotal = 0; + @Schema(description = "服务项目总数") + private Integer serviceProjectTotal = 0; + @Schema(description = "保安人员总数") + private Integer securityUserTotal = 0; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/PoliceUnitPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/PoliceUnitPagerVo.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/PoliceUnitPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/PoliceUnitPagerVo.java index e78fd8c..1a494f2 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/PoliceUnitPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/PoliceUnitPagerVo.java @@ -1,8 +1,8 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.module.superManagement.pojo.vo; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.pojo.model.ContactPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/SecurityUnitPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/SecurityUnitPagerVo.java similarity index 93% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/SecurityUnitPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/SecurityUnitPagerVo.java index 57a09f3..bd4fd68 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/SecurityUnitPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/pojo/vo/SecurityUnitPagerVo.java @@ -1,8 +1,8 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.module.superManagement.pojo.vo; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; -import com.changhu.module.management.pojo.model.LegalPersonInfo; +import com.changhu.pojo.model.LegalPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/AssessmentCriteriaService.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/AssessmentCriteriaService.java new file mode 100644 index 0000000..362aa58 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/AssessmentCriteriaService.java @@ -0,0 +1,73 @@ +package com.changhu.module.superManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.superManagement.pojo.params.CkGroupSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkItemSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkProjectSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkStandardSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.queryParams.CkProjectPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.CkProjectDetailTableVo; +import com.changhu.module.superManagement.pojo.vo.CkProjectPagerVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:38 + * @desc AssessmentCriteriaService... + */ +public interface AssessmentCriteriaService { + + /** + * 考核项目分页查询 + * + * @param queryParams 查询参数 + * @return 查询结果 + */ + Page ckProjectPagerVoPager(PageParams queryParams); + + /** + * 新增或修改考核项目 + * + * @param params 参数 + */ + void saveOrUpdateCkProject(CkProjectSaveOrUpdateParams params); + + /** + * 删除考核项目 + * + * @param ckProjectId 考核项目id + */ + void deleteCkProjectById(Long ckProjectId); + + /** + * 考核项目详情 + * + * @param ckProjectId 考核项目id + * @return 结果 + */ + List ckProjectDetail(Long ckProjectId); + + /** + * 新增或修改考核分组 + * + * @param params 参数 + */ + void saveOrUpdateCkGroup(CkGroupSaveOrUpdateParams params); + + /** + * 新增或修改考核项 + * + * @param params 参数 + */ + void saveOrUpdateCkItem(CkItemSaveOrUpdateParams params); + + /** + * 新增或修改考核标准 + * + * @param params 参数 + */ + void saveOrUpdateCkStandard(CkStandardSaveOrUpdateParams params); + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/AssessmentRecordService.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/AssessmentRecordService.java new file mode 100644 index 0000000..6de529e --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/AssessmentRecordService.java @@ -0,0 +1,32 @@ +package com.changhu.module.superManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.superManagement.pojo.queryParams.AssessmentRecordPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordDetailVo; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordPagerVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午3:05 + * @desc AssessmentRecordService... + */ +public interface AssessmentRecordService { + /** + * 分页查询 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page pager(PageParams queryParams); + + /** + * 扣分详情 + * + * @param assessmentRecordId 考核记录id + * @return 结果 + */ + List deductedDetail(Long assessmentRecordId); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/SuperIndexService.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/SuperIndexService.java new file mode 100644 index 0000000..8fa7ff7 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/SuperIndexService.java @@ -0,0 +1,17 @@ +package com.changhu.module.superManagement.service; + +import com.changhu.module.superManagement.pojo.vo.EnterprisesUnitServiceProjectSecurityUserTotalVo; + +/** + * @author 20252 + * @createTime 2024/11/21 上午11:31 + * @desc SuperIndexService... + */ +public interface SuperIndexService { + /** + * 统计事业单位 服务项目及保安人数 + * + * @return 结构 + */ + EnterprisesUnitServiceProjectSecurityUserTotalVo statistics(); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/SuperUnitService.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/SuperUnitService.java new file mode 100644 index 0000000..8eb2eb2 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/SuperUnitService.java @@ -0,0 +1,56 @@ +package com.changhu.module.superManagement.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.module.superManagement.pojo.params.ManagementSuperUserSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.UnitCheckPassParams; +import com.changhu.module.superManagement.pojo.queryParams.PoliceUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.queryParams.SecurityUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.PoliceUnitPagerVo; +import com.changhu.module.superManagement.pojo.vo.SecurityUnitPagerVo; +import com.changhu.pojo.params.UnitDisableOrEnableParams; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import org.apache.ibatis.annotations.Param; + +/** + * @author 20252 + * @createTime 2024/11/21 下午3:11 + * @desc SuperUnitService... + */ +public interface SuperUnitService { + /** + * 新增或保存后台用户 + * + * @param params 参数 + */ + void saveOrUpdateUser(ManagementSuperUserSaveOrUpdateParams params); + + /** + * 公安单位分页查询 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page policeUnitPager(@Param("queryParams") PageParams queryParams); + + /** + * 保安单位分页查询 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page securityUnitPager(PageParams queryParams); + + /** + * 审核通过 + * + * @param params 审核参数 + */ + void checkPass(UnitCheckPassParams params); + + /** + * 启用或者禁用单位 + * + * @param params 参数 + */ + void disableOrEnable(UnitDisableOrEnableParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/AssessmentCriteriaServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/AssessmentCriteriaServiceImpl.java new file mode 100644 index 0000000..41baa75 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/AssessmentCriteriaServiceImpl.java @@ -0,0 +1,93 @@ +package com.changhu.module.superManagement.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.exception.MessageException; +import com.changhu.module.superManagement.mapper.AssessmentCriteriaMapper; +import com.changhu.module.superManagement.pojo.params.CkGroupSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkItemSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkProjectSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.CkStandardSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.queryParams.CkProjectPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.CkProjectDetailTableVo; +import com.changhu.module.superManagement.pojo.vo.CkProjectPagerVo; +import com.changhu.module.superManagement.service.AssessmentCriteriaService; +import com.changhu.pojo.entity.CkGroup; +import com.changhu.pojo.entity.CkItem; +import com.changhu.pojo.entity.CkProject; +import com.changhu.pojo.entity.CkStandard; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午2:38 + * @desc AssessmentCriteriaServiceImpl... + */ +@Service("superManagementAssessmentCriteriaService") +public class AssessmentCriteriaServiceImpl implements AssessmentCriteriaService { + + @Autowired + private AssessmentCriteriaMapper assessmentCriteriaMapper; + + @Override + public Page ckProjectPagerVoPager(PageParams queryParams) { + return assessmentCriteriaMapper.ckProjectPager(queryParams.getPage(), queryParams.getParams()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveOrUpdateCkProject(CkProjectSaveOrUpdateParams params) { + boolean b = Db.saveOrUpdate(BeanUtil.copyProperties(params, CkProject.class)); + if (!b) { + throw new MessageException(); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteCkProjectById(Long ckProjectId) { + boolean b = Db.removeById(ckProjectId, CkProject.class); + if (!b) { + throw new MessageException(); + } + } + + @Override + public List ckProjectDetail(Long ckProjectId) { + return assessmentCriteriaMapper.ckProjectDetail(ckProjectId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveOrUpdateCkGroup(CkGroupSaveOrUpdateParams params) { + boolean b = Db.saveOrUpdate(BeanUtil.copyProperties(params, CkGroup.class)); + if (!b) { + throw new MessageException(); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveOrUpdateCkItem(CkItemSaveOrUpdateParams params) { + boolean b = Db.saveOrUpdate(BeanUtil.copyProperties(params, CkItem.class)); + if (!b) { + throw new MessageException(); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveOrUpdateCkStandard(CkStandardSaveOrUpdateParams params) { + boolean b = Db.saveOrUpdate(BeanUtil.copyProperties(params, CkStandard.class)); + if (!b) { + throw new MessageException(); + } + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/AssessmentRecordServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/AssessmentRecordServiceImpl.java new file mode 100644 index 0000000..1c7ece2 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/AssessmentRecordServiceImpl.java @@ -0,0 +1,75 @@ +package com.changhu.module.superManagement.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.db.enums.UserType; +import com.changhu.common.enums.ResultCode; +import com.changhu.common.exception.MessageException; +import com.changhu.common.utils.UserUtil; +import com.changhu.module.superManagement.mapper.AssessmentCriteriaMapper; +import com.changhu.module.superManagement.mapper.AssessmentRecordMapper; +import com.changhu.module.superManagement.pojo.queryParams.AssessmentRecordPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordDetailVo; +import com.changhu.module.superManagement.pojo.vo.AssessmentRecordPagerVo; +import com.changhu.module.superManagement.pojo.vo.CkProjectDetailTableVo; +import com.changhu.module.superManagement.service.AssessmentRecordService; +import com.changhu.pojo.entity.CkAssessmentRecord; +import com.changhu.pojo.entity.CkAssessmentRecordDetails; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import com.changhu.support.mybatisplus.pojo.params.PageParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/22 下午3:05 + * @desc AssessmentRecordServiceImpl... + */ +@Service +public class AssessmentRecordServiceImpl implements AssessmentRecordService { + + @Autowired + private AssessmentCriteriaMapper assessmentCriteriaMapper; + + @Autowired + private AssessmentRecordMapper assessmentRecordMapper; + + @Override + public Page pager(PageParams queryParams) { + if (UserType.MANAGEMENT_POLICE.equals(UserUtil.getUserType())) { + return assessmentRecordMapper.pager(queryParams.getPage(), UserUtil.getUnitId(), queryParams.getParams()); + } + return assessmentRecordMapper.pager(queryParams.getPage(), null, queryParams.getParams()); + } + + @Override + public List deductedDetail(Long assessmentRecordId) { + CkAssessmentRecord ckAssessmentRecord = Db.lambdaQuery(CkAssessmentRecord.class) + .eq(BaseEntity::getSnowFlakeId, assessmentRecordId) + .oneOpt() + .orElseThrow(() -> new MessageException(ResultCode.DATA_NOT_FOUND)); + + List ckProjectDetailTableVos = assessmentCriteriaMapper.ckProjectDetail(ckAssessmentRecord.getCkProjectId()); + + List assessmentRecordDetailCkStandardIds = Db.lambdaQuery(CkAssessmentRecordDetails.class) + .select(CkAssessmentRecordDetails::getCkStandardId) + .eq(CkAssessmentRecordDetails::getCkAssessmentRecordId, assessmentRecordId) + .list() + .stream() + .map(CkAssessmentRecordDetails::getCkStandardId) + .toList(); + + return ckProjectDetailTableVos.stream() + .map(item -> { + AssessmentRecordDetailVo assessmentRecordDetailVo = BeanUtil.copyProperties(item, AssessmentRecordDetailVo.class); + if (assessmentRecordDetailCkStandardIds.contains(item.getCkStandardId())) { + assessmentRecordDetailVo.setIsSelected(true); + } + return assessmentRecordDetailVo; + }) + .toList(); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/SuperIndexServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/SuperIndexServiceImpl.java new file mode 100644 index 0000000..3bd2997 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/SuperIndexServiceImpl.java @@ -0,0 +1,58 @@ +package com.changhu.module.superManagement.service.impl; + +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.module.superManagement.pojo.vo.EnterprisesUnitServiceProjectSecurityUserTotalVo; +import com.changhu.module.superManagement.service.SuperIndexService; +import com.changhu.pojo.entity.EnterprisesUnit; +import com.changhu.pojo.entity.SecurityUser; +import com.changhu.pojo.entity.ServiceProject; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import java.util.concurrent.CountDownLatch; + +/** + * @author 20252 + * @createTime 2024/11/21 上午11:31 + * @desc SuperIndexServiceImpl... + */ +@Service +public class SuperIndexServiceImpl implements SuperIndexService { + + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + @SneakyThrows + @Override + public EnterprisesUnitServiceProjectSecurityUserTotalVo statistics() { + CountDownLatch countDownLatch = new CountDownLatch(3); + EnterprisesUnitServiceProjectSecurityUserTotalVo result = new EnterprisesUnitServiceProjectSecurityUserTotalVo(); + threadPoolTaskExecutor.execute(() -> { + try { + result.setEnterprisesUnitTotal(Db.lambdaQuery(EnterprisesUnit.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + threadPoolTaskExecutor.execute(() -> { + try { + result.setServiceProjectTotal(Db.lambdaQuery(ServiceProject.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + + threadPoolTaskExecutor.execute(() -> { + try { + result.setSecurityUserTotal(Db.lambdaQuery(SecurityUser.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + + countDownLatch.await(); + return result; + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SuperServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/SuperUnitServiceImpl.java similarity index 59% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SuperServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/SuperUnitServiceImpl.java index 37395fb..4536ccb 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SuperServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/module/superManagement/service/impl/SuperUnitServiceImpl.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.service.impl; +package com.changhu.module.superManagement.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; @@ -7,15 +7,16 @@ import com.baomidou.mybatisplus.extension.toolkit.Db; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.mapper.PoliceUnitMapper; -import com.changhu.module.management.mapper.SecurityUnitMapper; -import com.changhu.module.management.pojo.entity.ManagementSuperUser; -import com.changhu.module.management.pojo.params.ManagementSuperUserSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.PoliceUnitPagerQueryParams; -import com.changhu.module.management.pojo.queryParams.SecurityUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.PoliceUnitPagerVo; -import com.changhu.module.management.pojo.vo.SecurityUnitPagerVo; -import com.changhu.module.management.service.SuperService; +import com.changhu.module.superManagement.mapper.SuperUnitMapper; +import com.changhu.module.superManagement.pojo.params.ManagementSuperUserSaveOrUpdateParams; +import com.changhu.module.superManagement.pojo.params.UnitCheckPassParams; +import com.changhu.module.superManagement.pojo.queryParams.PoliceUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.queryParams.SecurityUnitPagerQueryParams; +import com.changhu.module.superManagement.pojo.vo.PoliceUnitPagerVo; +import com.changhu.module.superManagement.pojo.vo.SecurityUnitPagerVo; +import com.changhu.module.superManagement.service.SuperUnitService; +import com.changhu.pojo.entity.ManagementSuperUser; +import com.changhu.pojo.params.UnitDisableOrEnableParams; import com.changhu.support.mybatisplus.pojo.params.PageParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,17 +25,14 @@ import java.util.List; /** * @author 20252 - * @createTime 2024/9/11 上午9:52 - * @desc SuperServiceImpl... + * @createTime 2024/11/21 下午3:11 + * @desc SuperUnitServiceImpl... */ @Service -public class SuperServiceImpl implements SuperService { +public class SuperUnitServiceImpl implements SuperUnitService { @Autowired - private PoliceUnitMapper policeUnitMapper; - - @Autowired - private SecurityUnitMapper securityUnitMapper; + private SuperUnitMapper superUnitMapper; @Override public void saveOrUpdateUser(ManagementSuperUserSaveOrUpdateParams params) { @@ -71,11 +69,25 @@ public class SuperServiceImpl implements SuperService { @Override public Page policeUnitPager(PageParams queryParams) { - return policeUnitMapper.pager(queryParams.getPage(), queryParams.getParams()); + return superUnitMapper.policeUnitPager(queryParams.getPage(), queryParams.getParams()); } @Override public Page securityUnitPager(PageParams queryParams) { - return securityUnitMapper.pager(queryParams.getPage(), queryParams.getParams()); + return superUnitMapper.securityUnitPager(queryParams.getPage(), queryParams.getParams()); + } + + @Override + public void checkPass(UnitCheckPassParams params) { + params.getUnitOptType() + .getHandler() + .pass(params.getCheckDataId()); + } + + @Override + public void disableOrEnable(UnitDisableOrEnableParams params) { + params.getUnitOptType() + .getHandler() + .disableOrEnable(params.getDataId()); } } diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/dto/DataViewDTO.java b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/DataViewDTO.java new file mode 100644 index 0000000..8fa6a12 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/DataViewDTO.java @@ -0,0 +1,23 @@ +package com.changhu.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/11 上午11:16 + * @desc DataViewDTO... + */ +@Data +public class DataViewDTO { + @Schema(description = "公安单位数量") + private Integer policeUnitCount; + @Schema(description = "保安单位数量") + private Integer securityUnitCount; + @Schema(description = "企事业单位数量") + private Integer enterprisesUnitCount; + @Schema(description = "保安人员总数") + private Integer securityUserTotal; + @Schema(description = "无证保安数量") + private Integer noCardSecurityUserCount; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/dto/EnterprisesUnitDetailDTO.java b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/EnterprisesUnitDetailDTO.java new file mode 100644 index 0000000..24c4778 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/EnterprisesUnitDetailDTO.java @@ -0,0 +1,41 @@ +package com.changhu.pojo.dto; + +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.pojo.model.ContactPersonInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/10/10 上午9:13 + * @desc EnterprisesUnitDetailDTO... + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class EnterprisesUnitDetailDTO { + @Schema(description = "企事业单位id") + private Long snowFlakeId; + @Schema(description = "名字") + private String name; + @Schema(description = "类型") + private EnterprisesUnitType type; + @Schema(description = "地址") + private String address; + @Schema(description = "联系人") + private ContactPersonInfo contactPersonInfo; + @Schema(description = "备注") + private String remark; + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "服务项目列表") + private List serviceProjectList; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/dto/SecurityUnitUseStatisticsDTO.java b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/SecurityUnitUseStatisticsDTO.java new file mode 100644 index 0000000..8183797 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/SecurityUnitUseStatisticsDTO.java @@ -0,0 +1,86 @@ +package com.changhu.pojo.dto; + +import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.ServiceProjectTwoType; +import com.changhu.common.db.enums.ServiceProjectType; +import com.changhu.pojo.model.LegalPersonInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/11/18 上午10:32 + * @desc SecurityUnitUseStatisticsDTO... + */ +@Data +public class SecurityUnitUseStatisticsDTO { + @Schema(description = "事业单位id") + private Long enterprisesUnitId; + @Schema(description = "事业单位名称") + private String enterprisesUnitName; + @Schema(description = "省编码") + private String province; + @Schema(description = "省") + private String provinceName; + @Schema(description = "市编码") + private String city; + @Schema(description = "市") + private String cityName; + @Schema(description = "区/县编码") + private String districts; + @Schema(description = "区/县") + private String districtsName; + @Schema(description = "街道编码") + private String street; + @Schema(description = "街道") + private String streetName; + @Schema(description = "事业单位详细地址") + private String address; + @Schema(description = "服务项目列表") + List<_ServiceProjectVo> serviceProjectList; + + @Schema(description = "公安单位id") + private Long policeUnitId; + @Schema(description = "公安单位名称") + private String policeUnitName; + + @Data + static class _ServiceProjectVo { + @Schema(description = "服务项目id") + private Long snowFlakeId; + @Schema(description = "服务项目名称") + private String name; + @Schema(description = "保安服务类别") + private ServiceProjectType type; + @Schema(description = "二级类型") + private ServiceProjectTwoType twoType; + + @Schema(description = "外包公司名称") + private String outsourceName; + @Schema(description = "是否备案") + private IsOrNot isFiling; + @Schema(description = "证件号(保安服务许可证/备案证)") + private String idNumber; + + @Schema(description = "保安人员总数") + private Integer securityUserTotal; + @Schema(description = "持证保安数量") + private Integer haveCardSecurityUserCount; + + @Schema(description = "保安单位id") + private Long securityUnitId; + @Schema(description = "保安单位名称") + private String securityUnitName; + @Schema(description = "保安单位法人信息") + private LegalPersonInfo securityUnitLegalPersonInfo; + + @Schema(description = "项目经理") + private String serviceProjectManager; + @Schema(description = "项目经理联系方式") + private String serviceProjectManagerTelephone; + + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/dto/SecurityUserRosterDTO.java b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/SecurityUserRosterDTO.java new file mode 100644 index 0000000..1f5ad27 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/SecurityUserRosterDTO.java @@ -0,0 +1,36 @@ +package com.changhu.pojo.dto; + +import cn.hutool.core.util.DesensitizedUtil; +import com.changhu.common.annotation.Desensitized; +import com.changhu.common.db.enums.Sex; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author 20252 + * @createTime 2024/11/18 上午10:43 + * @desc SecurityUserRosterDTO... + */ +@Data +public class SecurityUserRosterDTO { + @Schema(description = "id") + private Long snowFlakeId; + @Schema(description = "名称") + private String name; + @Schema(description = "性别") + private Sex sex; + @Schema(description = "年龄") + private Integer age; + @Desensitized(value = DesensitizedUtil.DesensitizedType.ID_CARD, keepOriginalField = true) + @Schema(description = "身份证") + private String idCard; + @Desensitized(value = DesensitizedUtil.DesensitizedType.MOBILE_PHONE, keepOriginalField = true) + @Schema(description = "手机号") + private String telephone; + @Schema(description = "企事业单位名") + private String enterprisesUnitName; + @Schema(description = "保安单位名") + private String securityUnitName; + @Schema(description = "保安证号") + private String securityNumber; +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/dto/ServiceProjectDTO.java b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/ServiceProjectDTO.java new file mode 100644 index 0000000..504fd30 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/dto/ServiceProjectDTO.java @@ -0,0 +1,107 @@ +package com.changhu.pojo.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.changhu.common.db.enums.ServiceProjectType; +import com.changhu.common.db.enums.Sex; +import com.changhu.pojo.model.LegalPersonInfo; +import com.changhu.support.fastjson2.serializer.MinioPrefixSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/10/10 上午9:35 + * @desc ServiceProjectDTO... + */ +@Data +public class ServiceProjectDTO { + @Schema(description = "服务项目id") + private Long snowFlakeId; + @Schema(description = "项目经理信息") + private ProjectManagerInfo projectManagerInfo; + @Schema(description = "保安单位信息") + private SecurityUnitInfo securityUnitInfo; + @Schema(description = "名字") + private String name; + @Schema(description = "类型") + private ServiceProjectType type; + @Schema(description = "保安证号") + private String idNumber; + @Schema(description = "服务面积") + private Double serviceArea; + @Schema(description = "楼栋数量") + private Integer buildingTotal; + @Schema(description = "户数") + private Integer houseTotal; + @Schema(description = "工作人员数量") + private Integer staffTotal; + @Schema(description = "保安人员数量") + private Integer securityUserTotal; + @Schema(description = "备注") + private String remark; + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "保安人员列表") + private List securityUserList; + + @Data + static class SecurityUnitInfo { + @Schema(description = "保安单位名称") + private String name; + @Schema(description = "统一社会编码") + private String socialCode; + @JSONField(serializeUsing = MinioPrefixSerializer.class) + @Schema(description = "营业执照") + private String businessLicense; + @Schema(description = "法人信息") + private LegalPersonInfo legalPersonInfo; + @Schema(description = "详细地址") + private String address; + @Schema(description = "公司性质") + private String nature; + } + + @Data + static class ProjectManagerInfo { + @Schema(description = "名称") + private String name; + @Schema(description = "性别") + private Sex sex; + @Schema(description = "手机号") + private String telephone; + @Schema(description = "身份证") + private String idCard; + } + + @Data + static class SecurityUserInfo { + @Schema(description = "id") + private Long snowFlakeId; + @Schema(description = "名字") + private String name; + @Schema(description = "手机号") + private String telephone; + @Schema(description = "工作岗位") + private String workPost; + @Schema(description = "性别") + private Sex sex; + @Schema(description = "户籍地") + private String nativePlace; + @Schema(description = "身份证") + private String idCard; + @Schema(description = "出身日期") + private java.time.LocalDate dateOfBirth; + @Schema(description = "保安证号") + private String securityNumber; + @Schema(description = "家庭住址") + private String homeAddress; + @Schema(description = "备注") + private String remark; + @Schema(description = "创建时间") + private String createTime; + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/AccessKeys.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/AccessKeys.java new file mode 100644 index 0000000..eb413e8 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/AccessKeys.java @@ -0,0 +1,72 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import com.changhu.common.db.enums.IsEnable; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + + +/** + * 开放接口的授权 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class AccessKeys extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 调用方 + */ + private String name; + + /** + * 有效时间 + */ + private Integer effectiveTime; + + /** + * AccessKey + */ + private String accessKey; + + /** + * SecretKey + */ + private String secretKey; + + /** + * 允许访问的资源 + */ + @TableField(typeHandler = Fastjson2TypeHandler.class) + private List allowedResources; + + /** + * 是否启用 + */ + private IsEnable isEnable; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkAssessmentRecord.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkAssessmentRecord.java new file mode 100644 index 0000000..2bb7eca --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkAssessmentRecord.java @@ -0,0 +1,57 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 考核记录 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class CkAssessmentRecord extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 企事业单位id + */ + private Long enterprisesUnitId; + + /** + * 考核项目id + */ + private Long ckProjectId; + + /** + * 考核人员签字 + */ + private String assessmentUserSignature; + + /** + * 被考核单位人员签字 + */ + private String byAssessmentEnterprisesUnitUserSignature; + + /** + * 考核备注 + */ + private String remark; + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkAssessmentRecordDetails.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkAssessmentRecordDetails.java new file mode 100644 index 0000000..1ba6f5a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkAssessmentRecordDetails.java @@ -0,0 +1,57 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 考核记录明细 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class CkAssessmentRecordDetails extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 考核记录id + */ + private Long ckAssessmentRecordId; + + /** + * 考核项目id + */ + private Long ckProjectId; + + /** + * 考核分组id + */ + private Long ckGroupId; + + /** + * 考核项id + */ + private Long ckItemId; + + /** + * 考核标准id + */ + private Long ckStandardId; + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkGroup.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkGroup.java new file mode 100644 index 0000000..db0bc8f --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkGroup.java @@ -0,0 +1,52 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 考核组 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class CkGroup extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 考核项目id + */ + private Long ckProjectId; + + /** + * 考核组名称 + */ + private String name; + + /** + * 总分 + */ + private Integer totalScore; + + /** + * 备注信息 + */ + private String remark; + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkItem.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkItem.java new file mode 100644 index 0000000..2875820 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkItem.java @@ -0,0 +1,53 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.common.db.enums.SelectType; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 分组内的考核项 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class CkItem extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 考核组id + */ + private Long ckGroupId; + + /** + * 考核项名称 + */ + private String name; + + /** + * 单选或多选 + */ + private SelectType type; + + /** + * 备注信息 + */ + private String remark; + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkProject.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkProject.java new file mode 100644 index 0000000..1d1f0cc --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkProject.java @@ -0,0 +1,53 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 考核项目 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class CkProject extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 考核项目名字 + */ + private String name; + + /** + * 类型(对应企事业单位类型) + */ + private EnterprisesUnitType type; + + /** + * 总分 + */ + private Integer totalScore; + + /** + * 备注信息 + */ + private String remark; + + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkStandard.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkStandard.java new file mode 100644 index 0000000..0afc3dc --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/CkStandard.java @@ -0,0 +1,46 @@ +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 扣分标准 实体类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder +@EqualsAndHashCode(callSuper = true) +@TableName(autoResultMap = true) +public class CkStandard extends BaseEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 考核项id + */ + private Long ckItemId; + + /** + * 条件 + */ + private String name; + + /** + * 扣多少分 + */ + private Double deductionPoints; + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/EnterprisesUnit.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/EnterprisesUnit.java similarity index 81% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/EnterprisesUnit.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/EnterprisesUnit.java index 8569927..5dba466 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/EnterprisesUnit.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/EnterprisesUnit.java @@ -1,15 +1,17 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.pojo.model.ContactPersonInfo; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.locationtech.jts.geom.Point; import java.io.Serial; import java.io.Serializable; @@ -41,6 +43,12 @@ public class EnterprisesUnit extends BaseEntity implements Serializable { */ private String name; + + /** + * 企事业单位类型 + */ + private EnterprisesUnitType type; + /** * 省 */ @@ -66,6 +74,11 @@ public class EnterprisesUnit extends BaseEntity implements Serializable { */ private String address; + /** + * 坐标 + */ + private Point point; + /** * 联系人 */ diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementPoliceUnitUser.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementPoliceUnitUser.java similarity index 96% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementPoliceUnitUser.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementPoliceUnitUser.java index a43b52b..9eed248 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementPoliceUnitUser.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementPoliceUnitUser.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.changhu.common.db.enums.IsEnable; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementSecurityUnitUser.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementSecurityUnitUser.java similarity index 96% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementSecurityUnitUser.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementSecurityUnitUser.java index 4619b82..6acf5d8 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementSecurityUnitUser.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementSecurityUnitUser.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.changhu.common.db.enums.IsEnable; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementSuperUser.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementSuperUser.java similarity index 95% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementSuperUser.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementSuperUser.java index a2a4e1e..eae6b0f 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ManagementSuperUser.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ManagementSuperUser.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.changhu.common.db.enums.IsEnable; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/entity/MiniProgramUser.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/MiniProgramUser.java similarity index 96% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/entity/MiniProgramUser.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/MiniProgramUser.java index d2d2944..7ae40c4 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/entity/MiniProgramUser.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/MiniProgramUser.java @@ -1,4 +1,4 @@ -package com.changhu.module.miniProgram.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.changhu.common.db.enums.CheckStatus; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/PoliceUnit.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/PoliceUnit.java similarity index 93% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/PoliceUnit.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/PoliceUnit.java index 6598f97..2838358 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/PoliceUnit.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/PoliceUnit.java @@ -1,11 +1,11 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.pojo.model.ContactPersonInfo; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/SecurityUnit.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/SecurityUnit.java similarity index 93% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/SecurityUnit.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/SecurityUnit.java index ae2445b..cbd6080 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/SecurityUnit.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/SecurityUnit.java @@ -1,11 +1,11 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; -import com.changhu.module.management.pojo.model.LegalPersonInfo; +import com.changhu.pojo.model.LegalPersonInfo; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/entity/SecurityUser.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/SecurityUser.java similarity index 86% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/entity/SecurityUser.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/SecurityUser.java index 76e5d91..9b64cfc 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/pojo/entity/SecurityUser.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/SecurityUser.java @@ -1,16 +1,17 @@ -package com.changhu.module.miniProgram.pojo.entity; +package com.changhu.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.changhu.common.db.enums.Sex; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import java.io.Serial; import java.io.Serializable; -import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; -import lombok.Data; -import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; -import lombok.EqualsAndHashCode; -import com.baomidou.mybatisplus.annotation.TableName; - /** * 保安人员 实体类 @@ -38,6 +39,11 @@ public class SecurityUser extends BaseEntity implements Serializable { */ private Long serviceProjectId; + /** + * 本人照片 + */ + private String photo; + /** * 名称 */ @@ -56,7 +62,7 @@ public class SecurityUser extends BaseEntity implements Serializable { /** * 性别 */ - private Integer sex; + private Sex sex; /** * 籍贯 @@ -78,6 +84,11 @@ public class SecurityUser extends BaseEntity implements Serializable { */ private String securityNumber; + /** + * 无证说明 + */ + private String noSecurityNumberDesc; + /** * 家庭住址 */ diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ServiceProject.java b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ServiceProject.java similarity index 79% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ServiceProject.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/entity/ServiceProject.java index 3adb2ba..ac678a2 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/entity/ServiceProject.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/entity/ServiceProject.java @@ -1,7 +1,8 @@ -package com.changhu.module.management.pojo.entity; +package com.changhu.pojo.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.changhu.common.db.enums.IsOrNot; +import com.changhu.common.db.enums.ServiceProjectTwoType; import com.changhu.common.db.enums.ServiceProjectType; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import lombok.AllArgsConstructor; @@ -56,12 +57,22 @@ public class ServiceProject extends BaseEntity implements Serializable { private ServiceProjectType type; /** - * 是否自招保安(只有当type为property 此字段必填) + * 二级类型(外包/物业自招/其他自招) */ - private IsOrNot isRecruitSecurity; + private ServiceProjectTwoType twoType; /** - * 证件号(服务类型为保安必填 服务类型为物业则需自招保安为必填) + * 若二级类型选择外包 这里需填写外包公司名称 + */ + private String outsourceName; + + /** + * 是否备案 + */ + private IsOrNot isFiling; + + /** + * 证件号(保安服务许可证/备案证) */ private String idNumber; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/model/ContactPersonInfo.java b/policeSecurityServer/src/main/java/com/changhu/pojo/model/ContactPersonInfo.java similarity index 90% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/model/ContactPersonInfo.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/model/ContactPersonInfo.java index 28ef868..ae0915e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/model/ContactPersonInfo.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/model/ContactPersonInfo.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.model; +package com.changhu.pojo.model; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/model/LegalPersonInfo.java b/policeSecurityServer/src/main/java/com/changhu/pojo/model/LegalPersonInfo.java similarity index 86% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/model/LegalPersonInfo.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/model/LegalPersonInfo.java index df816c3..9e2644e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/model/LegalPersonInfo.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/model/LegalPersonInfo.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.model; +package com.changhu.pojo.model; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexCheckStatusParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/CheckStatusParams.java similarity index 71% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexCheckStatusParams.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/params/CheckStatusParams.java index 7cce7c9..55082cd 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexCheckStatusParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/CheckStatusParams.java @@ -1,6 +1,6 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.pojo.params; -import com.changhu.module.management.enums.UnitOptType; +import com.changhu.strategy.UnitOptType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -8,10 +8,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/2 上午10:51 - * @desc IndexCheckStatusParams... + * @desc CheckStatusParams... */ @Data -public class IndexCheckStatusParams { +public class CheckStatusParams { @Schema(description = "审核数据的唯一标识") @NotNull(message = "唯一标识不能为空") diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/params/EnterprisesUnitOrServiceProjectType.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/EnterprisesUnitOrServiceProjectType.java new file mode 100644 index 0000000..f6c7190 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/EnterprisesUnitOrServiceProjectType.java @@ -0,0 +1,16 @@ +package com.changhu.pojo.params; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 20252 + * @createTime 2024/11/21 上午10:35 + * @desc EnterprisesUnitOrServiceProjectType... + */ +@Getter +@AllArgsConstructor +public enum EnterprisesUnitOrServiceProjectType { + ENTERPRISES_UNIT, + SERVICE_PROJECT +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/EnterprisesUnitSaveOrUpdateParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/EnterprisesUnitSaveOrUpdateParams.java similarity index 74% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/EnterprisesUnitSaveOrUpdateParams.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/params/EnterprisesUnitSaveOrUpdateParams.java index 94a6ed6..b04457e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/EnterprisesUnitSaveOrUpdateParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/EnterprisesUnitSaveOrUpdateParams.java @@ -1,11 +1,13 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.pojo.params; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.pojo.model.ContactPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; +import org.locationtech.jts.geom.Point; import java.util.List; @@ -21,13 +23,16 @@ public class EnterprisesUnitSaveOrUpdateParams { private Long snowFlakeId; @Schema(description = "公安单位id") - @NotNull(message = "公安单位不能为空") private Long policeUnitId; @Schema(description = "名称") @NotBlank(message = "名称不能为空") private String name; + @Schema(description = "类型") + @NotNull(message = "类型不能为空") + private EnterprisesUnitType type; + @Schema(description = "行政区划编码") @NotEmpty(message = "行政区划不能为空") private List administrativeDivisionCodes; @@ -35,6 +40,9 @@ public class EnterprisesUnitSaveOrUpdateParams { @Schema(description = "详细地址") private String address; + @Schema(description = "坐标") + private Point point; + @Schema(description = "联系人") private ContactPersonInfo contactPersonInfo; diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/params/LoginParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/LoginParams.java index 717aa1b..c8ac338 100644 --- a/policeSecurityServer/src/main/java/com/changhu/pojo/params/LoginParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/LoginParams.java @@ -1,7 +1,7 @@ package com.changhu.pojo.params; import com.alibaba.fastjson2.JSONObject; -import com.changhu.enums.ClientType; +import com.changhu.strategy.ClientType; import lombok.Data; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/params/PoliceUnitRegisterParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/PoliceUnitRegisterParams.java index a0ca769..bddca4e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/pojo/params/PoliceUnitRegisterParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/PoliceUnitRegisterParams.java @@ -1,6 +1,6 @@ package com.changhu.pojo.params; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.pojo.model.ContactPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/params/SecurityUnitRegisterParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/SecurityUnitRegisterParams.java index 0947412..9e32de5 100644 --- a/policeSecurityServer/src/main/java/com/changhu/pojo/params/SecurityUnitRegisterParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/SecurityUnitRegisterParams.java @@ -1,6 +1,6 @@ package com.changhu.pojo.params; -import com.changhu.module.management.pojo.model.LegalPersonInfo; +import com.changhu.pojo.model.LegalPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexDisableOrEnableParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/params/UnitDisableOrEnableParams.java similarity index 69% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexDisableOrEnableParams.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/params/UnitDisableOrEnableParams.java index f00c4ef..68bdd17 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/params/IndexDisableOrEnableParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/params/UnitDisableOrEnableParams.java @@ -1,6 +1,6 @@ -package com.changhu.module.management.pojo.params; +package com.changhu.pojo.params; -import com.changhu.module.management.enums.UnitOptType; +import com.changhu.strategy.UnitOptType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -8,10 +8,10 @@ import lombok.Data; /** * @author 20252 * @createTime 2024/9/3 上午9:28 - * @desc IndexDisableOrEnableParams... + * @desc UnitDisableOrEnableParams... */ @Data -public class IndexDisableOrEnableParams { +public class UnitDisableOrEnableParams { @Schema(description = "数据id") @NotNull(message = "数据id不能为空") private Long dataId; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/EnterprisesUnitPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/queryParams/EnterprisesUnitPagerQueryParams.java similarity index 56% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/EnterprisesUnitPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/queryParams/EnterprisesUnitPagerQueryParams.java index 90a28aa..9e91578 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/EnterprisesUnitPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/queryParams/EnterprisesUnitPagerQueryParams.java @@ -1,7 +1,6 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.pojo.queryParams; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotNull; import lombok.Data; /** @@ -12,7 +11,13 @@ import lombok.Data; @Data public class EnterprisesUnitPagerQueryParams { - @NotNull(message = "公安单位id不能为空") @Schema(description = "公安单位id") private Long policeUnitId; + + @Schema(description = "名称") + private String name; + @Schema(description = "详细地址") + private String address; + @Schema(description = "备注") + private String remark; } diff --git a/policeSecurityServer/src/main/java/com/changhu/pojo/queryParams/OpenGetEnterprisesUnit.java b/policeSecurityServer/src/main/java/com/changhu/pojo/queryParams/OpenGetEnterprisesUnit.java new file mode 100644 index 0000000..1aecba2 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/queryParams/OpenGetEnterprisesUnit.java @@ -0,0 +1,24 @@ +package com.changhu.pojo.queryParams; + +import lombok.Data; +import lombok.Getter; + +/** + * @author 20252 + * @createTime 2024/11/15 下午2:16 + * @desc OpenGetEnterprisesUnit... + */ +@Data +public class OpenGetEnterprisesUnit { + + private SearchType searchType; + + private String code; + private Integer level; + + @Getter + public enum SearchType { + ADMINISTRATIVE_DIVISION, + POLICE_UNIT + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/EnterprisesUnitPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/EnterprisesUnitPagerVo.java similarity index 73% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/EnterprisesUnitPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/vo/EnterprisesUnitPagerVo.java index 29a3406..b706c01 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/EnterprisesUnitPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/EnterprisesUnitPagerVo.java @@ -1,8 +1,11 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.pojo.vo; -import com.changhu.module.management.pojo.model.ContactPersonInfo; +import com.changhu.common.db.enums.EnterprisesUnitType; +import com.changhu.common.pojo.vo.CreateOrUpdateUser; +import com.changhu.pojo.model.ContactPersonInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.locationtech.jts.geom.Point; /** * @author 20252 @@ -16,6 +19,9 @@ public class EnterprisesUnitPagerVo { @Schema(description = "名字") private String name; + @Schema(description = "类型") + private EnterprisesUnitType type; + @Schema(description = "公安单位id") private Long policeUnitId; @@ -42,12 +48,17 @@ public class EnterprisesUnitPagerVo { @Schema(description = "地址") private String address; + @Schema(description = "位置") + private Point point; + @Schema(description = "联系方式") private ContactPersonInfo contactPersonInfo; @Schema(description = "备注") private String remark; + @Schema(description = "创建人") + private CreateOrUpdateUser createUser; @Schema(description = "创建时间") private String createTime; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/UnitCheckStatusVo.java b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitCheckStatusVo.java similarity index 63% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/UnitCheckStatusVo.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitCheckStatusVo.java index de656c9..c709fe5 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/UnitCheckStatusVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitCheckStatusVo.java @@ -1,7 +1,8 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.pojo.vo; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.utils.UserUtil; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; /** @@ -12,11 +13,12 @@ import lombok.Data; @Data public class UnitCheckStatusVo { + @Schema(description = "审核状态") private CheckStatus checkStatus; - + @Schema(description = "备注") private String remark; - + @Schema(description = "账号") private String account; - + @Schema(description = "密码") private String password = UserUtil.DEFAULT_PASSWORD; } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/UnitMiniProgramUserPagerQueryParams.java b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitMiniProgramUserPagerQueryParams.java similarity index 91% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/UnitMiniProgramUserPagerQueryParams.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitMiniProgramUserPagerQueryParams.java index e01b151..e261800 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/queryParams/UnitMiniProgramUserPagerQueryParams.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitMiniProgramUserPagerQueryParams.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.queryParams; +package com.changhu.pojo.vo; import com.changhu.common.db.enums.IsEnable; import com.changhu.common.db.enums.Sex; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/UnitMiniProgramUserPagerVo.java b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitMiniProgramUserPagerVo.java similarity index 95% rename from policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/UnitMiniProgramUserPagerVo.java rename to policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitMiniProgramUserPagerVo.java index 9511ae7..92a9fbf 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/pojo/vo/UnitMiniProgramUserPagerVo.java +++ b/policeSecurityServer/src/main/java/com/changhu/pojo/vo/UnitMiniProgramUserPagerVo.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.pojo.vo; +package com.changhu.pojo.vo; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; diff --git a/policeSecurityServer/src/main/java/com/changhu/service/AccessKeysService.java b/policeSecurityServer/src/main/java/com/changhu/service/AccessKeysService.java new file mode 100644 index 0000000..b268f1d --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/AccessKeysService.java @@ -0,0 +1,20 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.module.superManagement.pojo.params.GeneratedAccessKeyParams; +import com.changhu.pojo.entity.AccessKeys; + +/** + * access_keys (开放接口的授权) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface AccessKeysService extends IService { + + /** + * 生成访问凭证 + * + * @param params 参数 + */ + void generatedAccessKey(GeneratedAccessKeyParams params); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CkAssessmentRecordDetailsService.java b/policeSecurityServer/src/main/java/com/changhu/service/CkAssessmentRecordDetailsService.java new file mode 100644 index 0000000..89d1682 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/CkAssessmentRecordDetailsService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.CkAssessmentRecordDetails; + +/** + * ck_assessment_record_details (考核记录明细) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface CkAssessmentRecordDetailsService extends IService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CkAssessmentRecordService.java b/policeSecurityServer/src/main/java/com/changhu/service/CkAssessmentRecordService.java new file mode 100644 index 0000000..216e4a9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/CkAssessmentRecordService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.CkAssessmentRecord; + +/** + * ck_assessment_record (考核记录) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface CkAssessmentRecordService extends IService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CkGroupService.java b/policeSecurityServer/src/main/java/com/changhu/service/CkGroupService.java new file mode 100644 index 0000000..9660dc0 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/CkGroupService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.CkGroup; + +/** + * ck_group (考核组) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface CkGroupService extends IService{ + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CkItemService.java b/policeSecurityServer/src/main/java/com/changhu/service/CkItemService.java new file mode 100644 index 0000000..958ac74 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/CkItemService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.CkItem; + +/** + * ck_item (分组内的考核项) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface CkItemService extends IService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CkProjectService.java b/policeSecurityServer/src/main/java/com/changhu/service/CkProjectService.java new file mode 100644 index 0000000..67eb524 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/CkProjectService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.CkProject; + +/** + * ck_project (考核项目) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface CkProjectService extends IService{ + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CkStandardService.java b/policeSecurityServer/src/main/java/com/changhu/service/CkStandardService.java new file mode 100644 index 0000000..48c524d --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/CkStandardService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.CkStandard; + +/** + * ck_standard (扣分标准) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface CkStandardService extends IService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/CommonService.java b/policeSecurityServer/src/main/java/com/changhu/service/CommonService.java index 12dbb2d..2eea0d9 100644 --- a/policeSecurityServer/src/main/java/com/changhu/service/CommonService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/CommonService.java @@ -1,5 +1,6 @@ package com.changhu.service; +import com.alibaba.fastjson2.JSONObject; import com.changhu.common.pojo.model.JsonResult; import com.changhu.common.pojo.vo.SelectNodeVo; import com.changhu.pojo.params.PoliceUnitRegisterParams; @@ -36,4 +37,9 @@ public interface CommonService { * @return 结果 */ List> queryUnitListByIdentity(QueryUnitListByIdentityQueryParams queryParams); + + /** + * 根据身份证查询保安证 + */ + JSONObject querySecurityNumberByIdCard(String idCard); } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/EnterprisesUnitService.java b/policeSecurityServer/src/main/java/com/changhu/service/EnterprisesUnitService.java similarity index 75% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/EnterprisesUnitService.java rename to policeSecurityServer/src/main/java/com/changhu/service/EnterprisesUnitService.java index 5a8524c..f36ad8b 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/EnterprisesUnitService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/EnterprisesUnitService.java @@ -1,12 +1,12 @@ -package com.changhu.module.management.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.changhu.common.pojo.vo.SelectNodeVo; -import com.changhu.module.management.pojo.entity.EnterprisesUnit; -import com.changhu.module.management.pojo.params.EnterprisesUnitSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.EnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.EnterprisesUnitPagerVo; +import com.changhu.pojo.entity.EnterprisesUnit; +import com.changhu.pojo.params.EnterprisesUnitSaveOrUpdateParams; +import com.changhu.pojo.queryParams.EnterprisesUnitPagerQueryParams; +import com.changhu.pojo.vo.EnterprisesUnitPagerVo; import com.changhu.support.mybatisplus.pojo.params.PageParams; import java.util.List; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementPoliceUnitUserService.java b/policeSecurityServer/src/main/java/com/changhu/service/ManagementPoliceUnitUserService.java similarity index 70% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementPoliceUnitUserService.java rename to policeSecurityServer/src/main/java/com/changhu/service/ManagementPoliceUnitUserService.java index d70efca..56e9f21 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementPoliceUnitUserService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/ManagementPoliceUnitUserService.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser; +import com.changhu.pojo.entity.ManagementPoliceUnitUser; /** * management_police_user (后台-公安单位用户表) 服务类 diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementSecurityUnitUserService.java b/policeSecurityServer/src/main/java/com/changhu/service/ManagementSecurityUnitUserService.java similarity index 70% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementSecurityUnitUserService.java rename to policeSecurityServer/src/main/java/com/changhu/service/ManagementSecurityUnitUserService.java index bcee24a..d7bc58b 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementSecurityUnitUserService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/ManagementSecurityUnitUserService.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.management.pojo.entity.ManagementSecurityUnitUser; +import com.changhu.pojo.entity.ManagementSecurityUnitUser; /** * management_security_unit_user (后台-保安单位用户表) 服务类 diff --git a/policeSecurityServer/src/main/java/com/changhu/service/ManagementService.java b/policeSecurityServer/src/main/java/com/changhu/service/ManagementService.java new file mode 100644 index 0000000..ec597e5 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/ManagementService.java @@ -0,0 +1,61 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.changhu.common.db.enums.MiniProgramUserIdentity; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.pojo.params.CheckStatusParams; +import com.changhu.pojo.params.UnitDisableOrEnableParams; +import com.changhu.pojo.vo.UnitCheckStatusVo; +import com.changhu.pojo.vo.UnitMiniProgramUserPagerQueryParams; +import com.changhu.pojo.vo.UnitMiniProgramUserPagerVo; +import com.changhu.support.mybatisplus.pojo.params.PageParams; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/9/2 上午9:49 + * @desc IndexService... + */ +public interface ManagementService { + + /** + * 获取审核状态 + * + * @param params 参数 + * @return 结果 + */ + UnitCheckStatusVo getCheckStatus(CheckStatusParams params); + + /** + * 查询单位下的小程序用户 + * + * @param queryParams 查询参数 + * @return 结果 + */ + Page miniProgramUserPager(PageParams queryParams); + + /** + * 审核通过小程序用户 + * + * @param params 参数 + */ + void passMiniProgramUser(UnitDisableOrEnableParams params); + + /** + * 禁用或启用小程序用户 + * + * @param params 参数 + */ + void disableOrEnableMiniProgramUser(UnitDisableOrEnableParams params); + + /** + * 所有保安单位列表 + */ + List> listSecurityUnit(); + + /** + * 保安单位下的项目经理 + */ + List> listMinUserByUnitId(Long securityUnitId, MiniProgramUserIdentity identity); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementSuperUserService.java b/policeSecurityServer/src/main/java/com/changhu/service/ManagementSuperUserService.java similarity index 69% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementSuperUserService.java rename to policeSecurityServer/src/main/java/com/changhu/service/ManagementSuperUserService.java index 90d8e43..de0e7ca 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/ManagementSuperUserService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/ManagementSuperUserService.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.management.pojo.entity.ManagementSuperUser; +import com.changhu.pojo.entity.ManagementSuperUser; /** * management_super_user (后台-超级后台) 服务类 diff --git a/policeSecurityServer/src/main/java/com/changhu/service/MiniProgramUserService.java b/policeSecurityServer/src/main/java/com/changhu/service/MiniProgramUserService.java new file mode 100644 index 0000000..e49a72c --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/MiniProgramUserService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.MiniProgramUser; + +/** + * mini_program_user (小程序用户) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface MiniProgramUserService extends IService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/OpenApiService.java b/policeSecurityServer/src/main/java/com/changhu/service/OpenApiService.java new file mode 100644 index 0000000..41b8be9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/OpenApiService.java @@ -0,0 +1,59 @@ +package com.changhu.service; + +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.pojo.dto.DataViewDTO; +import com.changhu.pojo.dto.EnterprisesUnitDetailDTO; +import com.changhu.pojo.dto.SecurityUnitUseStatisticsDTO; +import com.changhu.pojo.dto.SecurityUserRosterDTO; +import com.changhu.pojo.params.EnterprisesUnitOrServiceProjectType; + +import java.util.List; + +/** + * @author 20252 + * @createTime 2024/10/9 下午5:28 + * @desc 开放接口 + */ +public interface OpenApiService { + /** + * 获取企事业单位列表 + * + * @param code 代码 + * @param level 等级 + * @return 企事业单位列表 + */ + List> getEnterprisesUnit(String code, Integer level); + + /** + * 企事业单位详情 + * + * @param enterprisesUnitId 单位id + * @return 企事业单位详情 + */ + EnterprisesUnitDetailDTO enterprisesUnitDetailById(Long enterprisesUnitId); + + /** + * 数据总览 + * + * @return 数据总览 + */ + DataViewDTO dataView(); + + /** + * 保安单位使用情况统计 + * + * @param code 代码 + * @param level 等级 + * @return 使用情况 + */ + List securityUnitUseStatistics(String code, Integer level); + + /** + * 服务项目安保人员花名册 + * + * @param id 事业单位服务项目id + * @param type 类型 + * @return 花名册 + */ + List securityUserRoster(Long id, EnterprisesUnitOrServiceProjectType type); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/PoliceUnitService.java b/policeSecurityServer/src/main/java/com/changhu/service/PoliceUnitService.java similarity index 68% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/PoliceUnitService.java rename to policeSecurityServer/src/main/java/com/changhu/service/PoliceUnitService.java index 5ebe889..784f3fa 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/PoliceUnitService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/PoliceUnitService.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.management.pojo.entity.PoliceUnit; +import com.changhu.pojo.entity.PoliceUnit; /** * police_unit (公安单位) 服务类 diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/SecurityUnitService.java b/policeSecurityServer/src/main/java/com/changhu/service/SecurityUnitService.java similarity index 68% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/SecurityUnitService.java rename to policeSecurityServer/src/main/java/com/changhu/service/SecurityUnitService.java index cc3b160..0f18889 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/SecurityUnitService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/SecurityUnitService.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.management.pojo.entity.SecurityUnit; +import com.changhu.pojo.entity.SecurityUnit; /** * security_unit (保安单位) 服务类 diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/SecurityUserService.java b/policeSecurityServer/src/main/java/com/changhu/service/SecurityUserService.java similarity index 68% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/SecurityUserService.java rename to policeSecurityServer/src/main/java/com/changhu/service/SecurityUserService.java index 208698b..83bfe36 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/SecurityUserService.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/SecurityUserService.java @@ -1,7 +1,7 @@ -package com.changhu.module.miniProgram.service; +package com.changhu.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.changhu.module.miniProgram.pojo.entity.SecurityUser; +import com.changhu.pojo.entity.SecurityUser; /** * security_user (保安人员) 服务类 diff --git a/policeSecurityServer/src/main/java/com/changhu/service/ServiceProjectService.java b/policeSecurityServer/src/main/java/com/changhu/service/ServiceProjectService.java new file mode 100644 index 0000000..54ec302 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/ServiceProjectService.java @@ -0,0 +1,13 @@ +package com.changhu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.changhu.pojo.entity.ServiceProject; + +/** + * service_project (服务项目) 服务类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +public interface ServiceProjectService extends IService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/WxService.java b/policeSecurityServer/src/main/java/com/changhu/service/WxService.java new file mode 100644 index 0000000..e25345e --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/WxService.java @@ -0,0 +1,20 @@ +package com.changhu.service; + +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; + +/** + * @author 20252 + * @createTime 2024/11/22 上午11:48 + * @desc WxService... + */ +public interface WxService { + /** + * 获取小程序页面二维码 + * + * @param path 路径 + * @param width 宽度 + * @return 二维码 + */ + ResponseEntity qrCode(String path, Integer width); +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/AccessKeysServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/AccessKeysServiceImpl.java new file mode 100644 index 0000000..9957eec --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/AccessKeysServiceImpl.java @@ -0,0 +1,41 @@ +package com.changhu.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.AccessKeysMapper; +import com.changhu.module.superManagement.pojo.params.GeneratedAccessKeyParams; +import com.changhu.pojo.entity.AccessKeys; +import com.changhu.service.AccessKeysService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * access_keys (开放接口的授权) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class AccessKeysServiceImpl extends ServiceImpl implements AccessKeysService { + + @Transactional(rollbackFor = Exception.class) + @Override + public void generatedAccessKey(GeneratedAccessKeyParams params) { + AccessKeys accessKeys = BeanUtil.copyProperties(params, AccessKeys.class); + if (accessKeys.getSnowFlakeId() == null) { + // 生成一个32位的随机字符串,包含大小写字母和数字 + String accessKey = RandomUtil.randomString(RandomUtil.BASE_CHAR + RandomUtil.BASE_NUMBER, 32); + String secretKey = IdUtil.randomUUID(); + accessKeys.setAccessKey(accessKey); + accessKeys.setSecretKey(secretKey); + } + this.saveOrUpdate(accessKeys); + } + + public static void main(String[] args) { + String randomPart = RandomUtil.randomString(RandomUtil.BASE_CHAR + RandomUtil.BASE_NUMBER, 32); + System.out.println(randomPart); + System.out.println(IdUtil.randomUUID()); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/AdministrativeDivisionServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/AdministrativeDivisionServiceImpl.java index 33fb245..c389d9e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/service/impl/AdministrativeDivisionServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/AdministrativeDivisionServiceImpl.java @@ -25,15 +25,6 @@ public class AdministrativeDivisionServiceImpl extends ServiceImpl> administrativeDivisionByParentCode(String parentCode) { - return this.lambdaQuery() - .eq(AdministrativeDivision::getParentCode, parentCode) - .list() - .stream() - .map(item -> TreeNodeVo.builder() - .value(item.getCode()) - .label(item.getName()) - .parentValue(item.getParentCode()) - .build()) - .toList(); + return baseMapper.administrativeDivisionByParentCode(parentCode); } } diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CkAssessmentRecordDetailsServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkAssessmentRecordDetailsServiceImpl.java new file mode 100644 index 0000000..9b6c357 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkAssessmentRecordDetailsServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.CkAssessmentRecordDetailsMapper; +import com.changhu.pojo.entity.CkAssessmentRecordDetails; +import com.changhu.service.CkAssessmentRecordDetailsService; +import org.springframework.stereotype.Service; + +/** + * ck_assessment_record_details (考核记录明细) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class CkAssessmentRecordDetailsServiceImpl extends ServiceImpl implements CkAssessmentRecordDetailsService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CkAssessmentRecordServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkAssessmentRecordServiceImpl.java new file mode 100644 index 0000000..254ecdf --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkAssessmentRecordServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.CkAssessmentRecordMapper; +import com.changhu.pojo.entity.CkAssessmentRecord; +import com.changhu.service.CkAssessmentRecordService; +import org.springframework.stereotype.Service; + +/** + * ck_assessment_record (考核记录) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class CkAssessmentRecordServiceImpl extends ServiceImpl implements CkAssessmentRecordService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CkGroupServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkGroupServiceImpl.java new file mode 100644 index 0000000..81573d4 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkGroupServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.CkGroupMapper; +import com.changhu.pojo.entity.CkGroup; +import com.changhu.service.CkGroupService; +import org.springframework.stereotype.Service; + +/** + * ck_group (考核组) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class CkGroupServiceImpl extends ServiceImpl implements CkGroupService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CkItemServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkItemServiceImpl.java new file mode 100644 index 0000000..94fd396 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkItemServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.CkItemMapper; +import com.changhu.pojo.entity.CkItem; +import com.changhu.service.CkItemService; +import org.springframework.stereotype.Service; + +/** + * ck_item (分组内的考核项) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class CkItemServiceImpl extends ServiceImpl implements CkItemService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CkProjectServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkProjectServiceImpl.java new file mode 100644 index 0000000..3eddb9c --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkProjectServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.CkProjectMapper; +import com.changhu.pojo.entity.CkProject; +import com.changhu.service.CkProjectService; +import org.springframework.stereotype.Service; + +/** + * ck_project (考核项目) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class CkProjectServiceImpl extends ServiceImpl implements CkProjectService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CkStandardServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkStandardServiceImpl.java new file mode 100644 index 0000000..ff3b38c --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CkStandardServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.CkStandardMapper; +import com.changhu.pojo.entity.CkStandard; +import com.changhu.service.CkStandardService; +import org.springframework.stereotype.Service; + +/** + * ck_standard (扣分标准) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class CkStandardServiceImpl extends ServiceImpl implements CkStandardService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/CommonServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/CommonServiceImpl.java index cc6d256..7600851 100644 --- a/policeSecurityServer/src/main/java/com/changhu/service/impl/CommonServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/CommonServiceImpl.java @@ -1,6 +1,7 @@ package com.changhu.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; @@ -8,14 +9,15 @@ import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.model.JsonResult; import com.changhu.common.pojo.vo.SelectNodeVo; -import com.changhu.module.management.mapper.PoliceUnitMapper; -import com.changhu.module.management.mapper.SecurityUnitMapper; -import com.changhu.module.management.pojo.entity.PoliceUnit; -import com.changhu.module.management.pojo.entity.SecurityUnit; +import com.changhu.mapper.PoliceUnitMapper; +import com.changhu.mapper.SecurityUnitMapper; +import com.changhu.pojo.entity.PoliceUnit; +import com.changhu.pojo.entity.SecurityUnit; import com.changhu.pojo.params.PoliceUnitRegisterParams; import com.changhu.pojo.params.SecurityUnitRegisterParams; import com.changhu.pojo.queryParams.QueryUnitListByIdentityQueryParams; import com.changhu.service.CommonService; +import com.changhu.task.SecurityAssociationDockingServiceTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +38,9 @@ public class CommonServiceImpl implements CommonService { @Autowired private PoliceUnitMapper policeUnitMapper; + @Autowired + private SecurityAssociationDockingServiceTask securityAssociationDockingServiceTask; + @Override public JsonResult securityUnitRegister(SecurityUnitRegisterParams params) { @@ -131,4 +136,9 @@ public class CommonServiceImpl implements CommonService { .toList(); }; } + + @Override + public JSONObject querySecurityNumberByIdCard(String idCard) { + return securityAssociationDockingServiceTask.querySecurityNumberByIdCard(idCard); + } } diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/EnterprisesUnitServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/EnterprisesUnitServiceImpl.java similarity index 74% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/EnterprisesUnitServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/service/impl/EnterprisesUnitServiceImpl.java index d24474b..8e921f6 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/EnterprisesUnitServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/EnterprisesUnitServiceImpl.java @@ -1,18 +1,20 @@ -package com.changhu.module.management.service.impl; +package com.changhu.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.func.LambdaUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.common.db.enums.UserType; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.vo.SelectNodeVo; -import com.changhu.module.management.mapper.EnterprisesUnitMapper; -import com.changhu.module.management.pojo.entity.EnterprisesUnit; -import com.changhu.module.management.pojo.params.EnterprisesUnitSaveOrUpdateParams; -import com.changhu.module.management.pojo.queryParams.EnterprisesUnitPagerQueryParams; -import com.changhu.module.management.pojo.vo.EnterprisesUnitPagerVo; -import com.changhu.module.management.service.EnterprisesUnitService; +import com.changhu.common.utils.UserUtil; +import com.changhu.mapper.EnterprisesUnitMapper; +import com.changhu.pojo.entity.EnterprisesUnit; +import com.changhu.pojo.params.EnterprisesUnitSaveOrUpdateParams; +import com.changhu.pojo.queryParams.EnterprisesUnitPagerQueryParams; +import com.changhu.pojo.vo.EnterprisesUnitPagerVo; +import com.changhu.service.EnterprisesUnitService; import com.changhu.support.mybatisplus.pojo.params.PageParams; import org.springframework.stereotype.Service; @@ -29,12 +31,17 @@ public class EnterprisesUnitServiceImpl extends ServiceImpl pager(PageParams queryParams) { - return baseMapper.pager(queryParams.getPage(), queryParams.getParams()); + return switch (UserUtil.getUserType()) { + case MANAGEMENT_POLICE -> baseMapper.pager(queryParams.getPage(), UserUtil.getUnitId(), queryParams.getParams()); + case MANAGEMENT_SUPER -> baseMapper.pager(queryParams.getPage(), null, queryParams.getParams()); + default -> throw new MessageException(); + }; } @Override public void saveOrUpdate(EnterprisesUnitSaveOrUpdateParams params) { EnterprisesUnit enterprisesUnit = BeanUtil.copyProperties(params, EnterprisesUnit.class); + //需要将行政区划编码转换为省市区 Optional.ofNullable(params.getAdministrativeDivisionCodes()) .ifPresent(codes -> { if (!codes.isEmpty()) { @@ -50,6 +57,10 @@ public class EnterprisesUnitServiceImpl extends ServiceImpl miniProgramUserPager(PageParams queryParams) { + UserType userType = UserUtil.getUserType(); + MiniProgramUserIdentity identity = switch (userType) { + case MANAGEMENT_POLICE -> MiniProgramUserIdentity.POLICE; + case MANAGEMENT_SECURITY -> MiniProgramUserIdentity.PROJECT_MANAGER; + default -> throw new MessageException("用户类型不匹配"); + }; + return managementMapper.miniProgramUserPager(queryParams.getPage(), queryParams.getParams(), identity); + } + + @Override + public void passMiniProgramUser(UnitDisableOrEnableParams params) { + params.getUnitOptType() + .getHandler() + .passMiniProgramUser(params.getDataId()); + } + + @Override + public void disableOrEnableMiniProgramUser(UnitDisableOrEnableParams params) { + params.getUnitOptType() + .getHandler() + .disableOrEnableMiniProgramUser(params.getDataId()); + } + + @Override + public List> listSecurityUnit() { + String addressName = LambdaUtil.getFieldName(SecurityUnit::getAddress); + String legalPersonInfoName = LambdaUtil.getFieldName(SecurityUnit::getLegalPersonInfo); + return Db.lambdaQuery(SecurityUnit.class) + .eq(SecurityUnit::getIsEnable, IsEnable.TRUE) + .list() + .stream() + .map(unit -> SelectNodeVo.builder() + .value(unit.getSnowFlakeId()) + .label(unit.getName()) + .extData(Dict.of( + addressName, unit.getAddress(), + legalPersonInfoName, unit.getLegalPersonInfo())) + .build()) + .toList(); + } + + @Override + public List> listMinUserByUnitId(Long securityUnitId, MiniProgramUserIdentity identity) { + String tel = LambdaUtil.getFieldName(MiniProgramUser::getTelephone); + String sex = LambdaUtil.getFieldName(MiniProgramUser::getSex); + return Db.lambdaQuery(MiniProgramUser.class) + .eq(MiniProgramUser::getIsEnable, IsEnable.TRUE) + .eq(MiniProgramUser::getIdentity, identity) + .eq(MiniProgramUser::getUnitId, securityUnitId) + .list() + .stream() + .map(item -> SelectNodeVo.builder() + .value(item.getSnowFlakeId()) + .label(item.getName()) + .extData(Dict.of( + tel, item.getTelephone(), + sex, item.getSex() + )) + .build()) + .toList(); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ManagementSuperUserServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/ManagementSuperUserServiceImpl.java similarity index 60% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ManagementSuperUserServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/service/impl/ManagementSuperUserServiceImpl.java index 501cab0..cc22c5e 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/ManagementSuperUserServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/ManagementSuperUserServiceImpl.java @@ -1,9 +1,9 @@ -package com.changhu.module.management.service.impl; +package com.changhu.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.changhu.module.management.mapper.ManagementSuperUserMapper; -import com.changhu.module.management.pojo.entity.ManagementSuperUser; -import com.changhu.module.management.service.ManagementSuperUserService; +import com.changhu.mapper.ManagementSuperUserMapper; +import com.changhu.pojo.entity.ManagementSuperUser; +import com.changhu.service.ManagementSuperUserService; import org.springframework.stereotype.Service; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/MiniProgramUserServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/MiniProgramUserServiceImpl.java new file mode 100644 index 0000000..dd15c05 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/MiniProgramUserServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.MiniProgramUserMapper; +import com.changhu.pojo.entity.MiniProgramUser; +import com.changhu.service.MiniProgramUserService; +import org.springframework.stereotype.Service; + +/** + * mini_program_user (小程序用户) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class MiniProgramUserServiceImpl extends ServiceImpl implements MiniProgramUserService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/OpenApiServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/OpenApiServiceImpl.java new file mode 100644 index 0000000..83663cb --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/OpenApiServiceImpl.java @@ -0,0 +1,126 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.changhu.common.exception.MessageException; +import com.changhu.common.pojo.vo.SelectNodeVo; +import com.changhu.mapper.OpenApiMapper; +import com.changhu.pojo.dto.DataViewDTO; +import com.changhu.pojo.dto.EnterprisesUnitDetailDTO; +import com.changhu.pojo.dto.SecurityUnitUseStatisticsDTO; +import com.changhu.pojo.dto.SecurityUserRosterDTO; +import com.changhu.pojo.entity.EnterprisesUnit; +import com.changhu.pojo.entity.PoliceUnit; +import com.changhu.pojo.entity.SecurityUnit; +import com.changhu.pojo.entity.SecurityUser; +import com.changhu.pojo.params.EnterprisesUnitOrServiceProjectType; +import com.changhu.service.OpenApiService; +import com.changhu.service.ServiceProjectService; +import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.concurrent.CountDownLatch; + +/** + * @author 20252 + * @createTime 2024/10/9 下午5:29 + * @desc OpenApiServiceImpl... + */ +@Service +public class OpenApiServiceImpl implements OpenApiService { + + @Autowired + private ServiceProjectService serviceProjectService; + + @Autowired + private OpenApiMapper openApiMapper; + + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + @Override + public List> getEnterprisesUnit(String code, Integer level) { + return openApiMapper.getEnterprisesUnit(code, level); + } + + @Override + public EnterprisesUnitDetailDTO enterprisesUnitDetailById(Long enterprisesUnitId) { + return Db.lambdaQuery(EnterprisesUnit.class) + .eq(BaseEntity::getSnowFlakeId, enterprisesUnitId) + .oneOpt() + .map(item -> EnterprisesUnitDetailDTO.builder() + .snowFlakeId(item.getSnowFlakeId()) + .name(item.getName()) + .type(item.getType()) + .address(item.getAddress()) + .contactPersonInfo(item.getContactPersonInfo()) + .remark(item.getRemark()) + .serviceProjectList(openApiMapper.getServiceProjectByEnterprisesUnitId(item.getSnowFlakeId())) + .createTime(item.getCreateTime()) + .build()) + .orElseThrow(() -> new MessageException("企事业单位不存在")); + } + + @SneakyThrows + @Override + public DataViewDTO dataView() { + DataViewDTO dataViewDTO = new DataViewDTO(); + CountDownLatch countDownLatch = new CountDownLatch(5); + threadPoolTaskExecutor.execute(() -> { + try { + dataViewDTO.setPoliceUnitCount(Db.lambdaQuery(PoliceUnit.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + + threadPoolTaskExecutor.execute(() -> { + try { + dataViewDTO.setSecurityUnitCount(Db.lambdaQuery(SecurityUnit.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + threadPoolTaskExecutor.execute(() -> { + try { + dataViewDTO.setEnterprisesUnitCount(Db.lambdaQuery(EnterprisesUnit.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + threadPoolTaskExecutor.execute(() -> { + try { + dataViewDTO.setSecurityUserTotal(Db.lambdaQuery(SecurityUser.class).count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + threadPoolTaskExecutor.execute(() -> { + try { + dataViewDTO.setNoCardSecurityUserCount(Db.lambdaQuery(SecurityUser.class) + .isNull(SecurityUser::getSecurityNumber) + .or() + .eq(SecurityUser::getSecurityNumber, "") + .count().intValue()); + } finally { + countDownLatch.countDown(); + } + }); + + countDownLatch.await(); + return dataViewDTO; + } + + @Override + public List securityUnitUseStatistics(String code, Integer level) { + return openApiMapper.securityUnitUseStatistics(code, level); + } + + @Override + public List securityUserRoster(Long id, EnterprisesUnitOrServiceProjectType type) { + return openApiMapper.securityUserRoster(id, type); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/PoliceUnitServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/PoliceUnitServiceImpl.java similarity index 59% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/PoliceUnitServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/service/impl/PoliceUnitServiceImpl.java index 32716b8..546835f 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/PoliceUnitServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/PoliceUnitServiceImpl.java @@ -1,9 +1,9 @@ -package com.changhu.module.management.service.impl; +package com.changhu.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.changhu.module.management.mapper.PoliceUnitMapper; -import com.changhu.module.management.pojo.entity.PoliceUnit; -import com.changhu.module.management.service.PoliceUnitService; +import com.changhu.mapper.PoliceUnitMapper; +import com.changhu.pojo.entity.PoliceUnit; +import com.changhu.service.PoliceUnitService; import org.springframework.stereotype.Service; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SecurityUnitServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/SecurityUnitServiceImpl.java similarity index 59% rename from policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SecurityUnitServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/service/impl/SecurityUnitServiceImpl.java index a5d45a0..07fc336 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/service/impl/SecurityUnitServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/SecurityUnitServiceImpl.java @@ -1,9 +1,9 @@ -package com.changhu.module.management.service.impl; +package com.changhu.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.changhu.module.management.mapper.SecurityUnitMapper; -import com.changhu.module.management.pojo.entity.SecurityUnit; -import com.changhu.module.management.service.SecurityUnitService; +import com.changhu.mapper.SecurityUnitMapper; +import com.changhu.pojo.entity.SecurityUnit; +import com.changhu.service.SecurityUnitService; import org.springframework.stereotype.Service; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/SecurityUserServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/SecurityUserServiceImpl.java similarity index 59% rename from policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/SecurityUserServiceImpl.java rename to policeSecurityServer/src/main/java/com/changhu/service/impl/SecurityUserServiceImpl.java index e7c7be0..62eefff 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/miniProgram/service/impl/SecurityUserServiceImpl.java +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/SecurityUserServiceImpl.java @@ -1,9 +1,9 @@ -package com.changhu.module.miniProgram.service.impl; +package com.changhu.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.changhu.module.miniProgram.mapper.SecurityUserMapper; -import com.changhu.module.miniProgram.pojo.entity.SecurityUser; -import com.changhu.module.miniProgram.service.SecurityUserService; +import com.changhu.mapper.SecurityUserMapper; +import com.changhu.pojo.entity.SecurityUser; +import com.changhu.service.SecurityUserService; import org.springframework.stereotype.Service; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/ServiceProjectServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/ServiceProjectServiceImpl.java new file mode 100644 index 0000000..dc73b85 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/ServiceProjectServiceImpl.java @@ -0,0 +1,17 @@ +package com.changhu.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.changhu.mapper.ServiceProjectMapper; +import com.changhu.pojo.entity.ServiceProject; +import com.changhu.service.ServiceProjectService; +import org.springframework.stereotype.Service; + +/** + * service_project (服务项目) 服务实现类 + * author: luozhun + * desc 由groovy脚本自动生成 + */ +@Service +public class ServiceProjectServiceImpl extends ServiceImpl implements ServiceProjectService { + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/service/impl/WxServiceImpl.java b/policeSecurityServer/src/main/java/com/changhu/service/impl/WxServiceImpl.java new file mode 100644 index 0000000..21952a9 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/service/impl/WxServiceImpl.java @@ -0,0 +1,42 @@ +package com.changhu.service.impl; + +import cn.binarywang.wx.miniapp.api.WxMaQrcodeService; +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.changhu.common.exception.MessageException; +import com.changhu.service.WxService; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.io.File; + +/** + * @author 20252 + * @createTime 2024/11/22 上午11:48 + * @desc WxServiceImpl... + */ +@Service +public class WxServiceImpl implements WxService { + + @Autowired + private WxMaService wxMaService; + + @Override + public ResponseEntity qrCode(String path, Integer width) { + WxMaQrcodeService qrcodeService = wxMaService.getQrcodeService(); + try { + File qrcodeFile = qrcodeService.createQrcode(path, width); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + qrcodeFile.getName()) + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .body(new FileSystemResource(qrcodeFile)); + } catch (WxErrorException e) { + throw new MessageException("生成表单二维码失败:{}", e.getMessage()); + } + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/enums/ClientType.java b/policeSecurityServer/src/main/java/com/changhu/strategy/ClientType.java similarity index 87% rename from policeSecurityServer/src/main/java/com/changhu/enums/ClientType.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/ClientType.java index bfdf768..6bc0757 100644 --- a/policeSecurityServer/src/main/java/com/changhu/enums/ClientType.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/ClientType.java @@ -1,6 +1,6 @@ -package com.changhu.enums; +package com.changhu.strategy; -import com.changhu.enums.handler.*; +import com.changhu.strategy.handler.clientType.*; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/UnitOptType.java b/policeSecurityServer/src/main/java/com/changhu/strategy/UnitOptType.java similarity index 56% rename from policeSecurityServer/src/main/java/com/changhu/module/management/enums/UnitOptType.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/UnitOptType.java index d6116e2..c78d98a 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/UnitOptType.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/UnitOptType.java @@ -1,8 +1,8 @@ -package com.changhu.module.management.enums; +package com.changhu.strategy; -import com.changhu.module.management.enums.handler.AbstractUnitTypeHandler; -import com.changhu.module.management.enums.handler.PoliceUnitTypeHandler; -import com.changhu.module.management.enums.handler.SecurityUnitTypeHandler; +import com.changhu.strategy.handler.unitOptType.AbstractUnitTypeHandler; +import com.changhu.strategy.handler.unitOptType.PoliceUnitTypeHandler; +import com.changhu.strategy.handler.unitOptType.SecurityUnitTypeHandler; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/policeSecurityServer/src/main/java/com/changhu/enums/handler/AbstractLoginHandler.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/AbstractLoginHandler.java similarity index 89% rename from policeSecurityServer/src/main/java/com/changhu/enums/handler/AbstractLoginHandler.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/AbstractLoginHandler.java index 4341284..d33091b 100644 --- a/policeSecurityServer/src/main/java/com/changhu/enums/handler/AbstractLoginHandler.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/AbstractLoginHandler.java @@ -1,4 +1,4 @@ -package com.changhu.enums.handler; +package com.changhu.strategy.handler.clientType; import com.alibaba.fastjson2.JSONObject; import com.changhu.common.pojo.vo.TokenInfo; diff --git a/policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementPoliceUnitLogin.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementPoliceUnitLogin.java similarity index 93% rename from policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementPoliceUnitLogin.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementPoliceUnitLogin.java index fe6eaf7..a132105 100644 --- a/policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementPoliceUnitLogin.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementPoliceUnitLogin.java @@ -1,18 +1,18 @@ -package com.changhu.enums.handler; +package com.changhu.strategy.handler.clientType; import cn.dev33.satoken.stp.SaTokenInfo; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.changhu.common.annotation.UserType; import com.changhu.common.db.enums.IsEnable; +import com.changhu.common.db.enums.UserType; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.vo.TokenInfo; import com.changhu.common.utils.RsaUtil; import com.changhu.common.utils.UserUtil; import com.changhu.common.utils.ValidatorUtil; -import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser; -import com.changhu.module.management.pojo.entity.PoliceUnit; +import com.changhu.pojo.entity.ManagementPoliceUnitUser; +import com.changhu.pojo.entity.PoliceUnit; import com.changhu.pojo.params.ManagementPoliceUnitLoginParams; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; diff --git a/policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementSecurityUnitLogin.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementSecurityUnitLogin.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementSecurityUnitLogin.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementSecurityUnitLogin.java index 37790bb..b9043d0 100644 --- a/policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementSecurityUnitLogin.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementSecurityUnitLogin.java @@ -1,18 +1,18 @@ -package com.changhu.enums.handler; +package com.changhu.strategy.handler.clientType; import cn.dev33.satoken.stp.SaTokenInfo; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.changhu.common.annotation.UserType; import com.changhu.common.db.enums.IsEnable; +import com.changhu.common.db.enums.UserType; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.vo.TokenInfo; import com.changhu.common.utils.RsaUtil; import com.changhu.common.utils.UserUtil; import com.changhu.common.utils.ValidatorUtil; -import com.changhu.module.management.pojo.entity.ManagementSecurityUnitUser; -import com.changhu.module.management.pojo.entity.SecurityUnit; +import com.changhu.pojo.entity.ManagementSecurityUnitUser; +import com.changhu.pojo.entity.SecurityUnit; import com.changhu.pojo.params.ManagementSecurityUnitLoginParams; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; @@ -42,7 +42,7 @@ public class ManagementSecurityUnitLogin extends AbstractLoginHandler { .or() .eq(ManagementSecurityUnitUser::getTelephone, accountOrTelephone) .oneOpt() - .orElseThrow(() -> new MessageException(ResultCode.ERROR)); + .orElseThrow(() -> new MessageException(ResultCode.USER_NOT_FOUND)); //判断用户是否禁用 if (managementSecurityUnitUser.getIsEnable().equals(IsEnable.FALSE)) { diff --git a/policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementSuperLogin.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementSuperLogin.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementSuperLogin.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementSuperLogin.java index 6b1ad39..3695a6f 100644 --- a/policeSecurityServer/src/main/java/com/changhu/enums/handler/ManagementSuperLogin.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/ManagementSuperLogin.java @@ -1,16 +1,16 @@ -package com.changhu.enums.handler; +package com.changhu.strategy.handler.clientType; import cn.dev33.satoken.stp.SaTokenInfo; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.changhu.common.annotation.UserType; +import com.changhu.common.db.enums.UserType; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.vo.TokenInfo; import com.changhu.common.utils.RsaUtil; import com.changhu.common.utils.UserUtil; import com.changhu.common.utils.ValidatorUtil; -import com.changhu.module.management.pojo.entity.ManagementSuperUser; +import com.changhu.pojo.entity.ManagementSuperUser; import com.changhu.pojo.params.ManagementSuperLoginParams; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/enums/handler/MiniProgramUserLogin.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/MiniProgramUserLogin.java similarity index 95% rename from policeSecurityServer/src/main/java/com/changhu/enums/handler/MiniProgramUserLogin.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/MiniProgramUserLogin.java index 2892af0..8dea4d9 100644 --- a/policeSecurityServer/src/main/java/com/changhu/enums/handler/MiniProgramUserLogin.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/clientType/MiniProgramUserLogin.java @@ -1,4 +1,4 @@ -package com.changhu.enums.handler; +package com.changhu.strategy.handler.clientType; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; @@ -8,15 +8,15 @@ import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.changhu.common.annotation.UserType; import com.changhu.common.db.enums.CheckStatus; import com.changhu.common.db.enums.IsEnable; +import com.changhu.common.db.enums.UserType; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.pojo.vo.TokenInfo; import com.changhu.common.utils.UserUtil; import com.changhu.common.utils.ValidatorUtil; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; +import com.changhu.pojo.entity.MiniProgramUser; import com.changhu.pojo.params.MiniProgramUserLoginParams; import me.chanjar.weixin.common.error.WxErrorException; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/AbstractUnitTypeHandler.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/AbstractUnitTypeHandler.java similarity index 90% rename from policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/AbstractUnitTypeHandler.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/AbstractUnitTypeHandler.java index 8413f1e..6d579dc 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/AbstractUnitTypeHandler.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/AbstractUnitTypeHandler.java @@ -1,7 +1,7 @@ -package com.changhu.module.management.enums.handler; +package com.changhu.strategy.handler.unitOptType; import cn.hutool.extra.spring.SpringUtil; -import com.changhu.module.management.pojo.vo.UnitCheckStatusVo; +import com.changhu.pojo.vo.UnitCheckStatusVo; import org.springframework.transaction.PlatformTransactionManager; /** diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/PoliceUnitTypeHandler.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/PoliceUnitTypeHandler.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/PoliceUnitTypeHandler.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/PoliceUnitTypeHandler.java index 0f1c7df..0ab2545 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/PoliceUnitTypeHandler.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/PoliceUnitTypeHandler.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.enums.handler; +package com.changhu.strategy.handler.unitOptType; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; @@ -7,13 +7,13 @@ import com.changhu.common.db.enums.*; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser; -import com.changhu.module.management.pojo.entity.PoliceUnit; -import com.changhu.module.management.pojo.vo.UnitCheckStatusVo; -import com.changhu.module.management.service.ManagementPoliceUnitUserService; -import com.changhu.module.management.service.PoliceUnitService; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; -import com.changhu.module.miniProgram.service.MiniProgramUserService; +import com.changhu.pojo.entity.ManagementPoliceUnitUser; +import com.changhu.pojo.entity.MiniProgramUser; +import com.changhu.pojo.entity.PoliceUnit; +import com.changhu.pojo.vo.UnitCheckStatusVo; +import com.changhu.service.ManagementPoliceUnitUserService; +import com.changhu.service.MiniProgramUserService; +import com.changhu.service.PoliceUnitService; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.TransactionStatus; diff --git a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/SecurityUnitTypeHandler.java b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/SecurityUnitTypeHandler.java similarity index 92% rename from policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/SecurityUnitTypeHandler.java rename to policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/SecurityUnitTypeHandler.java index dd5aac8..f5f87ae 100644 --- a/policeSecurityServer/src/main/java/com/changhu/module/management/enums/handler/SecurityUnitTypeHandler.java +++ b/policeSecurityServer/src/main/java/com/changhu/strategy/handler/unitOptType/SecurityUnitTypeHandler.java @@ -1,4 +1,4 @@ -package com.changhu.module.management.enums.handler; +package com.changhu.strategy.handler.unitOptType; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; @@ -7,13 +7,13 @@ import com.changhu.common.db.enums.*; import com.changhu.common.enums.ResultCode; import com.changhu.common.exception.MessageException; import com.changhu.common.utils.UserUtil; -import com.changhu.module.management.pojo.entity.ManagementSecurityUnitUser; -import com.changhu.module.management.pojo.entity.SecurityUnit; -import com.changhu.module.management.pojo.vo.UnitCheckStatusVo; -import com.changhu.module.management.service.ManagementSecurityUnitUserService; -import com.changhu.module.management.service.SecurityUnitService; -import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser; -import com.changhu.module.miniProgram.service.MiniProgramUserService; +import com.changhu.pojo.entity.ManagementSecurityUnitUser; +import com.changhu.pojo.entity.MiniProgramUser; +import com.changhu.pojo.entity.SecurityUnit; +import com.changhu.pojo.vo.UnitCheckStatusVo; +import com.changhu.service.ManagementSecurityUnitUserService; +import com.changhu.service.MiniProgramUserService; +import com.changhu.service.SecurityUnitService; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.TransactionStatus; diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/FastJson2Config.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/FastJson2Config.java index c6f6ed8..308eb09 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/FastJson2Config.java +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/FastJson2Config.java @@ -8,9 +8,18 @@ import com.alibaba.fastjson2.support.spring6.http.converter.FastJsonHttpMessageC import com.changhu.common.db.BaseEnum; import com.changhu.common.properties.Fastjson2Properties; import com.changhu.support.fastjson2.deserialze.DbEnumDeserializer; +import com.changhu.support.fastjson2.deserialze.LatitudeDeserializer; +import com.changhu.support.fastjson2.deserialze.LongitudeDeserializer; +import com.changhu.support.fastjson2.deserialze.PointDeserializer; import com.changhu.support.fastjson2.filter.DesensitizedFilter; import com.changhu.support.fastjson2.serializer.DbEnumSerializer; +import com.changhu.support.fastjson2.serializer.LatitudeSerializer; +import com.changhu.support.fastjson2.serializer.LongitudeSerializer; +import com.changhu.support.fastjson2.serializer.PointSerializer; import lombok.extern.slf4j.Slf4j; +import org.geotools.measure.Latitude; +import org.geotools.measure.Longitude; +import org.locationtech.jts.geom.Point; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.Bean; @@ -41,15 +50,23 @@ public class FastJson2Config { * 在fastjson2中 目前找到的方案是使用JSON.register(type,ObjectWriter)去对属性与 序列化/反序列化 进行绑定 */ //序列化配置 - Set> baseEnumClasses = ClassUtil.scanPackageBySuper("com.changhu.common.db", BaseEnum.class); + Set> baseEnumClasses = ClassUtil.scanPackageBySuper(BaseEnum.class.getPackageName(), BaseEnum.class); baseEnumClasses.forEach(clazz -> { JSON.register(clazz, DbEnumSerializer.instance); JSON.register(clazz, DbEnumDeserializer.instance); }); - JSON.config(JSONWriter.Feature.WriteLongAsString); + JSON.register(Latitude.class, LatitudeSerializer.instance); + JSON.register(Longitude.class, LongitudeSerializer.instance); + JSON.register(Point.class, PointSerializer.instance); //反序列化配置 + JSON.register(Latitude.class, LatitudeDeserializer.instance); + JSON.register(Longitude.class, LongitudeDeserializer.instance); + JSON.register(Point.class, PointDeserializer.instance); + + JSON.config(JSONWriter.Feature.WriteLongAsString); + } @Bean @@ -69,7 +86,8 @@ public class FastJson2Config { //4.解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json" fastConverter.setSupportedMediaTypes(List.of( - MediaType.APPLICATION_JSON + MediaType.APPLICATION_JSON, + MediaType.APPLICATION_FORM_URLENCODED )); return fastConverter; } @@ -88,8 +106,6 @@ public class FastJson2Config { JSONWriter.Feature.WriteNullListAsEmpty, //将String类型字段的空值序列化输出为空字符串”” JSONWriter.Feature.WriteNullStringAsEmpty, - //将Boolean类型字段的空值序列化输出为false - JSONWriter.Feature.WriteNullBooleanAsFalse, //在大范围超过JavaScript支持的整数,输出为字符串格式 JSONWriter.Feature.BrowserCompatible, //保留map空的字段 diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/LatitudeDeserializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/LatitudeDeserializer.java new file mode 100644 index 0000000..98c55b4 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/LatitudeDeserializer.java @@ -0,0 +1,31 @@ +package com.changhu.support.fastjson2.deserialze; + +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.reader.ObjectReader; +import org.geotools.measure.Latitude; + +import java.lang.reflect.Type; +import java.math.BigDecimal; + +/** + * author: luozhun + * desc: LatitudeDeserializer + * createTime: 2023/8/26 16:10 + */ +public class LatitudeDeserializer implements ObjectReader { + + public static final LatitudeDeserializer instance = new LatitudeDeserializer(); + + private LatitudeDeserializer() { + } + + @Override + public Latitude readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) { + //读取为BigDecimal来确保精度和避免浮点数的舍入误差 + BigDecimal value = jsonReader.readBigDecimal(); + if (value == null) { + return null; + } + return new Latitude(value.doubleValue()); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/LongitudeDeserializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/LongitudeDeserializer.java new file mode 100644 index 0000000..b8ba7fe --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/LongitudeDeserializer.java @@ -0,0 +1,31 @@ +package com.changhu.support.fastjson2.deserialze; + +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.reader.ObjectReader; +import org.geotools.measure.Longitude; + +import java.lang.reflect.Type; +import java.math.BigDecimal; + +/** + * author: luozhun + * desc: LongitudeDeserializer + * createTime: 2023/8/26 16:15 + */ +public class LongitudeDeserializer implements ObjectReader { + + public static final LongitudeDeserializer instance = new LongitudeDeserializer(); + + private LongitudeDeserializer() { + } + + @Override + public Longitude readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) { + //读取为BigDecimal来确保精度和避免浮点数的舍入误差 + BigDecimal value = jsonReader.readBigDecimal(); + if (value == null) { + return null; + } + return new Longitude(value.doubleValue()); + } +} \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/PointDeserializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/PointDeserializer.java new file mode 100644 index 0000000..c1c4f13 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/deserialze/PointDeserializer.java @@ -0,0 +1,35 @@ +package com.changhu.support.fastjson2.deserialze; + +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.reader.ObjectReader; +import com.changhu.common.utils.GeometryUtil; +import org.locationtech.jts.geom.Point; + +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * author: luozhun + * desc: PointDeserializer + * createTime: 2023/8/26 16:28 + */ +public class PointDeserializer implements ObjectReader { + + public static final PointDeserializer instance = new PointDeserializer(); + + private PointDeserializer() { + } + + @Override + public Point readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) { + List list = new ArrayList<>(); + jsonReader.readArray(list, BigDecimal.class); + if (CollUtil.isEmpty(list)) { + return null; + } + return GeometryUtil.createPoint(list); + } +} \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/filter/DesensitizedFilter.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/filter/DesensitizedFilter.java index b4a0ff0..f8b8285 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/filter/DesensitizedFilter.java +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/filter/DesensitizedFilter.java @@ -1,12 +1,16 @@ package com.changhu.support.fastjson2.filter; +import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.DesensitizedUtil; import com.alibaba.fastjson2.filter.ValueFilter; import com.changhu.common.annotation.Desensitized; +import com.changhu.common.pojo.vo.DesensitizedVo; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Field; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** @@ -19,41 +23,62 @@ public class DesensitizedFilter implements ValueFilter { public static final DesensitizedFilter instance = new DesensitizedFilter(); - private final Map cache = new ConcurrentHashMap<>(); + private static final Map cache = new ConcurrentHashMap<>(); private DesensitizedFilter() { } + static { + preProcessAnnotations(); + } + @Override public Object apply(Object object, String name, Object value) { - //只针对string类型生效 if (value instanceof String strValue && !strValue.isEmpty()) { - try { - String path = object.getClass().getName() + "$$" + name; - //先看是否有缓存 - if (cache.containsKey(path)) { - return DesensitizedUtil.desensitized(strValue, cache.get(path)); + FieldKey fieldKey = new FieldKey(object.getClass(), name); + Desensitized desensitized = cache.get(fieldKey); + if (desensitized != null) { + if (desensitized.keepOriginalField()) { + return DesensitizedVo.builder() + .originalValue(strValue) + .desensitizedValue(DesensitizedUtil.desensitized(strValue, desensitized.value())) + .build(); } - Class aClass = object.getClass(); - Field declaredField = aClass.getDeclaredField(name); - Desensitized annotation = declaredField.getAnnotation(Desensitized.class); - if (annotation == null) { - return value; - } - //加入缓存 - cache.put(path, annotation.value()); - return DesensitizedUtil.desensitized(strValue, annotation.value()); - } catch (NoSuchFieldException e) { - return value; - } catch (SecurityException e) { - log.error("字段:{} 安全异常: {}", name, e.getMessage()); - return null; - } catch (Exception e) { - log.error("数据脱敏失败:{}", e.getMessage()); - return null; + return DesensitizedUtil.desensitized(strValue, desensitized.value()); } - } else { - return value; + } + return value; + } + + /** + * 脱敏字段预处理 初始化缓存信息 + */ + private static void preProcessAnnotations() { + Set> classes = ClassUtil.scanPackage("com.changhu"); + for (Class clazz : classes) { + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + Desensitized annotation = AnnotationUtil.getAnnotation(field, Desensitized.class); + if (annotation != null) { + cache.put(new FieldKey(clazz, field.getName()), annotation); + } + } + } + } + + private record FieldKey(Class clazz, String fieldName) { + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FieldKey fieldKey = (FieldKey) o; + return clazz.equals(fieldKey.clazz) && fieldName.equals(fieldKey.fieldName); + } + + @Override + public int hashCode() { + return clazz.hashCode() ^ fieldName.hashCode(); } } diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/LatitudeSerializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/LatitudeSerializer.java new file mode 100644 index 0000000..55deee1 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/LatitudeSerializer.java @@ -0,0 +1,30 @@ +package com.changhu.support.fastjson2.serializer; + +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.writer.ObjectWriter; +import org.geotools.measure.Latitude; + +import java.lang.reflect.Type; + +/** + * author: luozhun + * desc: LatitudeSerializer + * createTime: 2023/8/26 15:44 + */ +public class LatitudeSerializer implements ObjectWriter { + + public static final LatitudeSerializer instance = new LatitudeSerializer(); + + private LatitudeSerializer() { + } + + @Override + public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { + if (object == null) { + jsonWriter.writeNull(); + return; + } + jsonWriter.writeDouble(((Latitude) object).degrees()); + } +} + diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/LongitudeSerializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/LongitudeSerializer.java new file mode 100644 index 0000000..42b27df --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/LongitudeSerializer.java @@ -0,0 +1,30 @@ +package com.changhu.support.fastjson2.serializer; + +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.writer.ObjectWriter; +import org.geotools.measure.Longitude; + +import java.lang.reflect.Type; + +/** + * author: luozhun + * desc: LongitudeSerializer + * createTime: 2023/8/26 15:46 + */ +public class LongitudeSerializer implements ObjectWriter { + + public static final LongitudeSerializer instance = new LongitudeSerializer(); + + private LongitudeSerializer() { + } + + @Override + public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { + if (object == null) { + jsonWriter.writeNull(); + return; + } + jsonWriter.writeDouble(((Longitude) object).degrees()); + } +} + diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/MinioPrefixSerializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/MinioPrefixSerializer.java new file mode 100644 index 0000000..5142540 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/MinioPrefixSerializer.java @@ -0,0 +1,27 @@ +package com.changhu.support.fastjson2.serializer; + +import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.writer.ObjectWriter; + +import java.lang.reflect.Type; + +/** + * @author 20252 + * @createTime 2024/10/10 下午3:19 + * @desc MinioPrefixSerializer... + */ +public class MinioPrefixSerializer implements ObjectWriter { + + private final String minioPrefix = SpringUtil.getProperty("minio.url"); + + public static final MinioPrefixSerializer instance = new MinioPrefixSerializer(); + + private MinioPrefixSerializer() { + } + + @Override + public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { + jsonWriter.writeString(minioPrefix + object); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/PointSerializer.java b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/PointSerializer.java new file mode 100644 index 0000000..3815c21 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/fastjson2/serializer/PointSerializer.java @@ -0,0 +1,45 @@ +package com.changhu.support.fastjson2.serializer; + +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.writer.ObjectWriter; +import com.changhu.common.utils.GeometryUtil; +import org.geotools.measure.Latitude; +import org.geotools.measure.Longitude; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.Point; + +import java.lang.reflect.Type; +import java.util.Arrays; + +/** + * author: luozhun + * desc: PointSerializer + * createTime: 2023/8/26 15:59 + */ +public class PointSerializer implements ObjectWriter { + + public static final PointSerializer instance = new PointSerializer(); + + private PointSerializer() { + } + + @Override + public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { + if (object == null) { + jsonWriter.writeNull(); + return; + } + Point point = (Point) object; + if (GeometryUtil.equals(GeometryUtil.emptyPoint(), point)) { + jsonWriter.writeNull(); + return; + } + jsonWriter.writeAny( + Arrays.asList( + new Longitude(point.getCoordinate().getOrdinate(Coordinate.X)).degrees(), + new Latitude(point.getCoordinate().getOrdinate(Coordinate.Y)).degrees() + ) + ); + } +} + diff --git a/policeSecurityServer/src/main/java/com/changhu/support/minio/MinioProperties.java b/policeSecurityServer/src/main/java/com/changhu/support/minio/MinioProperties.java index f9f887f..28f907d 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/minio/MinioProperties.java +++ b/policeSecurityServer/src/main/java/com/changhu/support/minio/MinioProperties.java @@ -2,16 +2,24 @@ package com.changhu.support.minio; import io.minio.MinioClient; import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.cert.X509Certificate; + /** * fileName: MinioProperties * author: LuoZhun * createTime: 2023/11/10 17:26 * description: some... */ +@Slf4j @Data @Configuration @ConfigurationProperties(prefix = "minio") @@ -39,9 +47,43 @@ public class MinioProperties { @Bean public MinioClient minioClient() { + // Create a trust manager that does not validate certificate chains + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + + public void checkClientTrusted(X509Certificate[] certs, String authType) { + // Do nothing (trust any client certificate) + } + + public void checkServerTrusted(X509Certificate[] certs, String authType) { + // Do nothing (trust any server certificate) + } + } + }; + + // Install the all-trusting trust manager + SSLContext sslContext = null; + try { + sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + } catch (Exception e) { + log.error("Install the all-trusting trust manager error:{}", e.getMessage()); + } + + + // Create a custom OkHttpClient that trusts all certificates + OkHttpClient customHttpClient = new OkHttpClient.Builder() + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]) + .hostnameVerifier((hostname, session) -> true) + .build(); + return MinioClient.builder() .endpoint(url) .credentials(accessKey, secretKey) + .httpClient(customHttpClient) .build(); } } diff --git a/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/config/CustomMybatisPlusConfig.java b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/config/CustomMybatisPlusConfig.java index cd63570..6421501 100644 --- a/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/config/CustomMybatisPlusConfig.java +++ b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/config/CustomMybatisPlusConfig.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionIntercepto import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.changhu.support.mybatisplus.interceptor.CustomDataPermissionHandler; +import com.changhu.support.mybatisplus.interceptor.GeometryInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -30,6 +31,8 @@ public class CustomMybatisPlusConfig { interceptor.addInnerInterceptor(paginationInterceptor(DbType.MYSQL)); // sql性能规范 // interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor()); + // 地理位置支持 配合 + interceptor.addInnerInterceptor(new GeometryInnerInterceptor()); interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); //乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); diff --git a/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/geo/AbstractGeometryTypeHandler.java b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/geo/AbstractGeometryTypeHandler.java new file mode 100644 index 0000000..cf908b8 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/geo/AbstractGeometryTypeHandler.java @@ -0,0 +1,13 @@ +package com.changhu.support.mybatisplus.handler.global.geo; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.locationtech.jts.geom.Geometry; + +/** + * author: luozhun + * desc: GeometryTypeHandler + * createTime: 2023/8/25 17:59 + */ +public abstract class AbstractGeometryTypeHandler extends BaseTypeHandler { +} + diff --git a/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/geo/PointTypeHandler.java b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/geo/PointTypeHandler.java new file mode 100644 index 0000000..3c0208d --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/geo/PointTypeHandler.java @@ -0,0 +1,55 @@ +package com.changhu.support.mybatisplus.handler.global.geo; + +import cn.hutool.core.util.ClassUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.changhu.common.utils.GeometryUtil; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.locationtech.jts.geom.Point; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * author: luozhun + * desc: PointTypeHandler + * createTime: 2023/8/26 13:17 + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes(Point.class) +public class PointTypeHandler extends AbstractGeometryTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement preparedStatement, int i, Point point, JdbcType jdbcType) throws SQLException { + preparedStatement.setString(i, point.toText()); + } + + @Override + public Point getNullableResult(ResultSet resultSet, String s) throws SQLException { + return createPoint(resultSet.getString(s), resultSet.getBytes(s)); + } + + @Override + public Point getNullableResult(ResultSet resultSet, int i) throws SQLException { + return createPoint(resultSet.getString(i), resultSet.getBytes(i)); + } + + @Override + public Point getNullableResult(CallableStatement callableStatement, int i) throws SQLException { + return createPoint(callableStatement.getString(i), callableStatement.getBytes(i)); + } + + public Point createPoint(String pointStr, byte[] pointBytes) { + if (JSONUtil.isTypeJSON(pointStr)) { + return GeometryUtil.createGeometryFromGeoJson(pointStr, Point.class); + } + if (StrUtil.startWithIgnoreCase(pointStr, ClassUtil.getClassName(Point.class, true))) { + return GeometryUtil.createGeometryFromWkt(pointStr, Point.class); + } + return GeometryUtil.createPoint(pointBytes); + } +} diff --git a/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/json/CreateOrUpdateUserTypeHandler.java b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/json/CreateOrUpdateUserTypeHandler.java new file mode 100644 index 0000000..4511790 --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/handler/global/json/CreateOrUpdateUserTypeHandler.java @@ -0,0 +1,34 @@ +package com.changhu.support.mybatisplus.handler.global.json; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; +import com.changhu.common.pojo.vo.CreateOrUpdateUser; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; + +/** + * @author 20252 + * @createTime 2024/11/27 下午3:09 + * @desc CreateOrUpdateUserTypeHandler... + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes({CreateOrUpdateUser.class}) +public class CreateOrUpdateUserTypeHandler extends AbstractJsonTypeHandler { + public CreateOrUpdateUserTypeHandler(Class type) { + super(type); + } + + @Override + public CreateOrUpdateUser parse(String json) { + if (!JSON.isValid(json)) { + return null; + } + return JSON.parseObject(json, CreateOrUpdateUser.class); + } + + @Override + public String toJson(CreateOrUpdateUser obj) { + return JSON.toJSONString(obj); + } +} \ No newline at end of file diff --git a/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/interceptor/GeometryInnerInterceptor.java b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/interceptor/GeometryInnerInterceptor.java new file mode 100644 index 0000000..7d6dccc --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/support/mybatisplus/interceptor/GeometryInnerInterceptor.java @@ -0,0 +1,133 @@ +package com.changhu.support.mybatisplus.interceptor; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.locationtech.jts.geom.*; + +import java.lang.reflect.Field; +import java.sql.Connection; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import static com.changhu.common.utils.GeometryUtil.ST_GeomFromText; + + +/** + * @author 20252 + * @createTime 2024/6/6 下午4:32 + * @desc 注意!!!此拦截器只针对mp提供的基本构造方法管用 可以进行参数对象拦截 如果是xml,请自行添加ST_GeomFromText函数 + */ +@Slf4j +public class GeometryInnerInterceptor extends JsqlParserSupport implements InnerInterceptor { + + + public static final List> GEOMETRY_CLASS_LIST = CollUtil.newArrayList( + Point.class, + MultiPoint.class, + Polygon.class, + MultiPolygon.class, + LineString.class, + MultiLineString.class + ); + + public GeometryInnerInterceptor() { + } + + @Override + public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { + PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh); + MappedStatement ms = mpSh.mappedStatement(); + //sql类型:INSERT UPDATE DELETE + SqlCommandType sct = ms.getSqlCommandType(); + //mp参数 + Object parameter = mpSh.parameterHandler().getParameterObject(); + //参数对象 + Object object = null; + //获取参数的属性 + switch (sct) { + case UPDATE: + try { + object = BeanUtil.beanToMap(parameter).get(Constants.ENTITY); + } catch (Exception ignored) { + } + break; + case INSERT: + object = parameter; + break; + } + //如果没有参数 就不进行sql修改 + if (object == null) { + return; + } + //获取 parameter 对象 中有关 geometry 的属性名对应 + List geoFields = this.getGeoFields(object); + //如果没有geometry字段 就不进行sql修改 + if (geoFields.isEmpty()) { + return; + } + //获取原始sql + BoundSql boundSql = ms.getBoundSql(parameter); + //UPDATE geo_test SET update_by=?,update_time=?,delete_flag=1 WHERE id=? AND delete_flag=0 + String originalSql = StrUtil.removeAllLineBreaks(boundSql.getSql()); + switch (sct) { + case UPDATE: + for (String geometryField : geoFields) { + String regex = geometryField + "\\s*=\\s*\\?"; + originalSql = ReUtil.replaceAll(originalSql, regex, StrUtil.format("{}={}", geometryField, ST_GeomFromText)); + } + break; + case INSERT: + for (String geometryField : geoFields) { + originalSql = this.replaceFindGeo(originalSql, geometryField); + } + break; + } + PluginUtils.MPBoundSql mpBs = mpSh.mPBoundSql(); + //修改sql + mpBs.sql(originalSql); + } + + private String replaceFindGeo(String originalSql, String geometryField) { + List split = StrUtil.split(originalSql, geometryField); + //找出geo字段在sql中的位置 + int geometryFieldIndex = StrUtil.count(split.get(0), ","); + StringBuilder stringBuffer = new StringBuilder(); + Matcher matcher = Pattern.compile("\\?").matcher(originalSql); + int count = 0; + while (matcher.find()) { + if (count == geometryFieldIndex) { + matcher.appendReplacement(stringBuffer, ST_GeomFromText); + break; + } + count++; + } + matcher.appendTail(stringBuffer); + return stringBuffer.toString(); + } + + /** + * 获取对象中的geo字段 + */ + private List getGeoFields(Object object) { + return Arrays.stream(ReflectUtil.getFields(object.getClass())) + .filter(field -> GEOMETRY_CLASS_LIST.contains(field.getType())) + .map(Field::getName) + .collect(Collectors.toList()); + } + +} diff --git a/policeSecurityServer/src/main/java/com/changhu/task/SecurityAssociationDockingServiceTask.java b/policeSecurityServer/src/main/java/com/changhu/task/SecurityAssociationDockingServiceTask.java new file mode 100644 index 0000000..f2af01a --- /dev/null +++ b/policeSecurityServer/src/main/java/com/changhu/task/SecurityAssociationDockingServiceTask.java @@ -0,0 +1,80 @@ +package com.changhu.task; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + + +/** + * @author 20252 + * @createTime 2024/11/27 下午4:59 + * @desc SecurityAssociationDockingServiceTask... + */ +@Slf4j +@Component +public class SecurityAssociationDockingServiceTask { + + private static final String BASE_HOST = "http://baxh.3589hn.cn"; + + private static String TOKEN; + + /** + * 每小时续一次token + */ + @PostConstruct + @Scheduled(cron = "0 0 * * * *") + public void getToken() { + JSONObject params = new JSONObject(); + params.put("appid", "anfang"); + params.put("appkey", "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg"); + //创建请求 + HttpRequest request = HttpUtil.createPost(BASE_HOST + "/api/security/get_token"); + //设置参数 + request.body(params.toJSONString()); + try (HttpResponse response = request.execute()) { + int status = response.getStatus(); + if (!(status == 200)) { + log.error("保安协会 获取token接口出错 status={} msg={}", status, response.body()); + return; + } + String body = response.body(); + log.info("getToken 接收到值:{}", body); + if (!JSON.isValid(body)) { + log.warn("返回数据不是json格式"); + return; + } + JSONObject jsonObject = JSON.parseObject(body); + JSONObject data = jsonObject.getJSONObject("data"); + TOKEN = data.getString("token"); + log.info("续期后的 token:{}", TOKEN); + } + } + + public JSONObject querySecurityNumberByIdCard(String idCard) { + HttpRequest request = HttpUtil.createPost(BASE_HOST + "/api/security/query?token=" + TOKEN); + //请求体参数 + request.body(JSONObject.of("idcard", idCard).toJSONString()); + try (HttpResponse response = request.execute()) { + int status = response.getStatus(); + if (!(status == 200)) { + log.error("保安协会 身份证查保安证接口出错 status={} msg={}", status, response.body()); + return null; + } + String body = response.body(); + log.info("querySecurityNumberByIdCard 接收到返回值:{}", body); + if (!JSON.isValid(body)) { + log.warn("返回数据不是json格式"); + return null; + } + JSONObject jsonObject = JSON.parseObject(body); + return jsonObject.getJSONObject("data"); + } + } + +} diff --git a/policeSecurityServer/src/main/resources/conf/log4j2.xml b/policeSecurityServer/src/main/resources/conf/log4j2.xml index e08488c..3572226 100644 --- a/policeSecurityServer/src/main/resources/conf/log4j2.xml +++ b/policeSecurityServer/src/main/resources/conf/log4j2.xml @@ -125,10 +125,16 @@ - + - + + + + + + + diff --git a/policeSecurityServer/src/main/resources/env/dev/application.yml b/policeSecurityServer/src/main/resources/env/dev/application.yml index b52c328..71a856a 100644 --- a/policeSecurityServer/src/main/resources/env/dev/application.yml +++ b/policeSecurityServer/src/main/resources/env/dev/application.yml @@ -23,7 +23,7 @@ knife4j: spring: application: # 服务名称 - name: managementDevServer + name: policeSecurityDevServer servlet: multipart: # 设置单个文件最大大小为500MB @@ -110,7 +110,7 @@ mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl type-handlers-package: com.changhu.support.mybatisplus.handler.global - mapper-locations: classpath*:/mapper/*.xml + mapper-locations: classpath*:/mapper/**/*.xml logging: config: classpath:conf/log4j2.xml diff --git a/policeSecurityServer/src/main/resources/env/prod/application.yml b/policeSecurityServer/src/main/resources/env/prod/application.yml index 6130758..63d39fb 100644 --- a/policeSecurityServer/src/main/resources/env/prod/application.yml +++ b/policeSecurityServer/src/main/resources/env/prod/application.yml @@ -1,5 +1,5 @@ server: - port: 8090 + port: 8765 springdoc: swagger-ui: @@ -23,10 +23,7 @@ knife4j: spring: application: # 服务名称 - name: managementProdServer - mvc: - # 如果找不到对应的handler 就抛出404异常 - throw-exception-if-no-handler-found: true + name: policeSecurityProdServer servlet: multipart: # 设置单个文件最大大小为500MB @@ -42,9 +39,9 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://172.10.10.238:3306/management_prod?serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false - username: management_prod - password: lonsung301 + url: jdbc:mysql://118.253.177.137:3306/police_security?serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false + username: police_security + password: xRxNWErNMKa6Th64 # druid 连接池管理 druid: # 初始化时建立物理连接的个数 @@ -91,17 +88,12 @@ spring: cache: type: redis cache-names: common - mail: - host: smtp.qq.com - port: 587 - username: 2025254074@qq.com - password: vgkvmhlwfogucbfd data: redis: database: 0 - password: lonsung301 + password: redis_csPDNr port: 6380 - host: 172.10.10.238 + host: 118.253.177.137 timeout: 10s lettuce: pool: @@ -118,16 +110,16 @@ mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl type-handlers-package: com.changhu.support.mybatisplus.handler.global - mapper-locations: classpath*:/mapper/*.xml + mapper-locations: classpath*:/mapper/**/*.xml logging: config: classpath:conf/log4j2.xml minio: - url: http://172.10.10.238:9000 + url: https://www.hnjinglian.cn:9002 accessKey: admin secretKey: lonsung301 - bucketName: management-prod + bucketName: police-security sa-token: # token 名称(同时也是 cookie 名称) @@ -146,6 +138,16 @@ sa-token: is-log: true # 是否尝试从 cookie 里读取 token is-read-cookie: false + # jwt秘钥 + jwt-secret-key: a29216f8-cd60-4e96-89c5-ab6012159052 + +wx: + miniapp: + #微信小程序的appid + appid: wx0acd1c4fcf94bdd3 + #微信小程序的Secret + secret: 4b700dbacb42ef258537ddc61d964a17 + msgDataFormat: JSON project: env: prod diff --git a/policeSecurityServer/src/main/resources/mapper/AdministrativeDivisionMapper.xml b/policeSecurityServer/src/main/resources/mapper/AdministrativeDivisionMapper.xml index d54484e..20ca9d1 100644 --- a/policeSecurityServer/src/main/resources/mapper/AdministrativeDivisionMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/AdministrativeDivisionMapper.xml @@ -12,4 +12,16 @@ and level <= #{level} order by code + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/CkAssessmentRecordMapper.xml b/policeSecurityServer/src/main/resources/mapper/CkAssessmentRecordMapper.xml new file mode 100644 index 0000000..5288099 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/CkAssessmentRecordMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/CkProjectMapper.xml b/policeSecurityServer/src/main/resources/mapper/CkProjectMapper.xml new file mode 100644 index 0000000..cce1fa9 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/CkProjectMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/EnterprisesUnitMapper.xml b/policeSecurityServer/src/main/resources/mapper/EnterprisesUnitMapper.xml index b84a0e1..7b98c4a 100644 --- a/policeSecurityServer/src/main/resources/mapper/EnterprisesUnitMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/EnterprisesUnitMapper.xml @@ -1,49 +1,38 @@ - - + + + - - - - - + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/ManagementMapper.xml b/policeSecurityServer/src/main/resources/mapper/ManagementMapper.xml new file mode 100644 index 0000000..5402684 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/ManagementMapper.xml @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/ManagementPoliceUnitUserMapper.xml b/policeSecurityServer/src/main/resources/mapper/ManagementPoliceUnitUserMapper.xml index ceddf6b..29692b0 100644 --- a/policeSecurityServer/src/main/resources/mapper/ManagementPoliceUnitUserMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/ManagementPoliceUnitUserMapper.xml @@ -1,27 +1,4 @@ - - + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/ManagementSecurityUnitUserMapper.xml b/policeSecurityServer/src/main/resources/mapper/ManagementSecurityUnitUserMapper.xml index a34f53a..9beff40 100644 --- a/policeSecurityServer/src/main/resources/mapper/ManagementSecurityUnitUserMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/ManagementSecurityUnitUserMapper.xml @@ -1,24 +1,4 @@ - - + diff --git a/policeSecurityServer/src/main/resources/mapper/MiniProgramUserMapper.xml b/policeSecurityServer/src/main/resources/mapper/MiniProgramUserMapper.xml index 021a877..a0ef657 100644 --- a/policeSecurityServer/src/main/resources/mapper/MiniProgramUserMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/MiniProgramUserMapper.xml @@ -1,26 +1,4 @@ - - + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/OpenApiMapper.xml b/policeSecurityServer/src/main/resources/mapper/OpenApiMapper.xml new file mode 100644 index 0000000..96b6cba --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/OpenApiMapper.xml @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/PoliceUnitMapper.xml b/policeSecurityServer/src/main/resources/mapper/PoliceUnitMapper.xml index c6d5f6a..14b792a 100644 --- a/policeSecurityServer/src/main/resources/mapper/PoliceUnitMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/PoliceUnitMapper.xml @@ -1,43 +1,4 @@ - - - - - + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/SecurityUnitMapper.xml b/policeSecurityServer/src/main/resources/mapper/SecurityUnitMapper.xml index 4a936cd..b80a273 100644 --- a/policeSecurityServer/src/main/resources/mapper/SecurityUnitMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/SecurityUnitMapper.xml @@ -1,50 +1,5 @@ - - - - - + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/SecurityUserMapper.xml b/policeSecurityServer/src/main/resources/mapper/SecurityUserMapper.xml index 81f0f8e..c5b0887 100644 --- a/policeSecurityServer/src/main/resources/mapper/SecurityUserMapper.xml +++ b/policeSecurityServer/src/main/resources/mapper/SecurityUserMapper.xml @@ -1,6 +1,6 @@ - + - select - sp.*, - JSON_ARRAY(eu.province,eu.city,eu.districts,eu.street) as 'enterprisesUnitAdministrativeDivisionCodes', - eu.name as 'enterprisesUnitName', - mpu.name as 'projectManagerMiniProgramUserName', - msuu.name as 'createUserName' - from service_project sp - left join enterprises_unit eu on sp.enterprises_unit_id = eu.snow_flake_id - left join mini_program_user mpu on sp.project_manager_mini_program_user_id = mpu.snow_flake_id - left join management_security_unit_user msuu on sp.create_by = msuu.snow_flake_id - where sp.delete_flag = 0 - and sp.security_unit_id = ${@com.changhu.common.utils.UserUtil@getUnitId()} - - and sp.name like concat('%',#{params.name},'%') - - - and sp.type = #{params.type.value} - - - and sp.remark like concat('%',#{params.remark},'%') - - - and mpu.name like concat('%',#{params.projectManagerMiniProgramUserName},'%') - - order by sp.create_time desc - + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/policeManagement/UserMapper.xml b/policeSecurityServer/src/main/resources/mapper/policeManagement/UserMapper.xml new file mode 100644 index 0000000..fb4c4f1 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/policeManagement/UserMapper.xml @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/securityManagement/Service_ProjectMapper.xml b/policeSecurityServer/src/main/resources/mapper/securityManagement/Service_ProjectMapper.xml new file mode 100644 index 0000000..cb556e2 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/securityManagement/Service_ProjectMapper.xml @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/securityManagement/UserMapper.xml b/policeSecurityServer/src/main/resources/mapper/securityManagement/UserMapper.xml new file mode 100644 index 0000000..f3605ba --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/securityManagement/UserMapper.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/superManagement/AssessmentCriteriaMapper.xml b/policeSecurityServer/src/main/resources/mapper/superManagement/AssessmentCriteriaMapper.xml new file mode 100644 index 0000000..0611254 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/superManagement/AssessmentCriteriaMapper.xml @@ -0,0 +1,38 @@ + + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/superManagement/AssessmentRecordMapper.xml b/policeSecurityServer/src/main/resources/mapper/superManagement/AssessmentRecordMapper.xml new file mode 100644 index 0000000..d726e16 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/superManagement/AssessmentRecordMapper.xml @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/main/resources/mapper/superManagement/SuperUnitMapper.xml b/policeSecurityServer/src/main/resources/mapper/superManagement/SuperUnitMapper.xml new file mode 100644 index 0000000..610bc68 --- /dev/null +++ b/policeSecurityServer/src/main/resources/mapper/superManagement/SuperUnitMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/policeSecurityServer/src/test/java/com/changhu/SuperUserInitTest.java b/policeSecurityServer/src/test/java/com/changhu/SuperUserInitTest.java new file mode 100644 index 0000000..f6d903a --- /dev/null +++ b/policeSecurityServer/src/test/java/com/changhu/SuperUserInitTest.java @@ -0,0 +1,13 @@ +package com.changhu; + +import org.springframework.boot.test.context.SpringBootTest; + +/** + * @author 20252 + * @createTime 2024/10/30 上午11:23 + * @desc SuperUserInitTest... + */ +@SpringBootTest +public class SuperUserInitTest { + +} diff --git a/securityManagement/.env.development b/securityManagement/.env.development index 5c29a1e..91e16ee 100644 --- a/securityManagement/.env.development +++ b/securityManagement/.env.development @@ -9,7 +9,6 @@ VITE_APP_PROXY_URL=http://172.10.10.93:8765 # rsa 公钥 VITE_APP_RSA_PUBLIC_KEY=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJps/EXxxSpEM1Ix4R0NWIOBciHCr7P7coDT8tNKfelgR7txcJOqHCO/MIWe7T04aHQTcpQxqx9hMca7dbqz8TZpz9jvLzE/6ZonVKxHsoFnNlHMp1/CPAJ9f6D9wYicum2KltJkmQ0g//D9W2zPCYoGOmSRFcZx/KEBa4EM53jQIDAQAB - # minio VITE_APP_MINIO_URL=http://118.253.177.137:9000 VITE_APP_MINIO_BUCKET=police-security-dev diff --git a/securityManagement/.env.production b/securityManagement/.env.production index 99d9241..47ef829 100644 --- a/securityManagement/.env.production +++ b/securityManagement/.env.production @@ -6,3 +6,10 @@ VITE_DROP_CONSOLE=true # axios VITE_APP_BASE_API=/api VITE_APP_PROXY_URL=https://172.10.10.238:8765 + + +# rsa 公钥 +VITE_APP_RSA_PUBLIC_KEY=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpu1C3JHZ+Ng/eVVCZtwKsOZv9RktpAL13pKy4FoRHyNv2t8TPV2AMzLzfEzlWx001nBxyVxEMR2N9jAcqFLHv7r16ciOzbtzB9dky2G+bc9jIs4/EdVK5bAZcPRh5Jrb78sC9PHyR4AeceDyCIKHLUbWBJB4NTZE0s1Wh5kMynQIDAQAB +# minio +VITE_APP_MINIO_URL=https://www.hnjinglian.cn:9002 +VITE_APP_MINIO_BUCKET=police-security \ No newline at end of file diff --git a/securityManagement/Jenkinsfile b/securityManagement/Jenkinsfile new file mode 100644 index 0000000..e6640d3 --- /dev/null +++ b/securityManagement/Jenkinsfile @@ -0,0 +1,46 @@ +pipeline { + agent any + tools { + nodejs "node-v20.10.0" + } + stages { + stage('拉取代码') { + steps { + echo '开始拉取代码' + checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: '3', url: 'http://175.6.124.250:3100/luozhun/policeSecurity.git']]) + echo '代码拉取成功' + } + } + stage('构建前端项目') { + steps{ + echo '开始构建前端项目' + sh 'cd /var/jenkins_home/workspace/警保联动-保安后台/securityManagement && npm install --registry=https://registry.npmmirror.com && npm run build' + echo '前端项目构建完成' + } + } + stage('ssh远程推送代码'){ + steps{ + echo '开始推送构建产物' + script{ + def remote = [:] + remote.name = 'server-118.253.177.137' + remote.host = '118.253.177.137' + remote.port = 55555 + remote.allowAnyHosts = true + withCredentials([usernamePassword(credentialsId: '4', passwordVariable: 'password', usernameVariable: 'username')]) { + remote.user = "${username}" + remote.password = "${password}" + } + sshCommand remote: remote, command: 'pwd=$(pwd) echo "ssh连接成功!当前工作目录:$(pwd)"' + sshCommand remote: remote, command: 'echo "删除:securityManagement..."' + sshRemove remote: remote, path: '/home/app/apps/1panel/apps/openresty/openresty/www/sites/policeSecurityServer/index/securityManagement' + sshCommand remote: remote, command: 'echo "删除:superManagement成功!"' + + sshCommand remote: remote, command: 'echo "将构建的securityManagement发送到服务器..."' + sshPut remote: remote, from: '/var/jenkins_home/workspace/警保联动-保安后台/securityManagement/securityManagement', into: '/home/app/apps/1panel/apps/openresty/openresty/www/sites/policeSecurityServer/index' + sshCommand remote: remote, command: 'echo "securityManagement发送成功!"' + } + } + } + } +} diff --git a/securityManagement/index.html b/securityManagement/index.html index d821b0d..5218809 100644 --- a/securityManagement/index.html +++ b/securityManagement/index.html @@ -6,7 +6,7 @@ - Vite + Vue + TS + 保安后台
diff --git a/securityManagement/package.json b/securityManagement/package.json index d2da1d0..c9a6753 100644 --- a/securityManagement/package.json +++ b/securityManagement/package.json @@ -16,9 +16,10 @@ "lodash-es": "^4.17.21", "pinia": "^2.2.2", "pinia-plugin-persistedstate": "^3.2.0", - "vue-component-type-helpers": "^2.1.2", "sass": "^1.77.8", + "terser": "^5.36.0", "vue": "^3.4.37", + "vue-component-type-helpers": "^2.1.2", "vue-router": "4", "vue-uuid": "^3.0.0" }, diff --git a/securityManagement/src/components/form/FormProMax.vue b/securityManagement/src/components/form/FormProMax.vue index 185a4ca..c4fb2c3 100644 --- a/securityManagement/src/components/form/FormProMax.vue +++ b/securityManagement/src/components/form/FormProMax.vue @@ -97,6 +97,12 @@ :allowClear="item.componentsProps?.allowClear ?? true" :options="item.options" /> + ('value', { diff --git a/securityManagement/src/components/layout/SystemMenus.vue b/securityManagement/src/components/layout/SystemMenus.vue index 4e34340..8429600 100644 --- a/securityManagement/src/components/layout/SystemMenus.vue +++ b/securityManagement/src/components/layout/SystemMenus.vue @@ -18,7 +18,6 @@ import MenuItem from "@/components/layout/MenuItem.vue"; const route = useRoute() const activeMenus = computed(() => [route.path]); -console.log(activeMenus) diff --git a/securityManagement/src/components/layout/layout.vue b/securityManagement/src/components/layout/layout.vue index 682ed00..f2f3540 100644 --- a/securityManagement/src/components/layout/layout.vue +++ b/securityManagement/src/components/layout/layout.vue @@ -15,14 +15,10 @@ - + - + diff --git a/securityManagement/src/components/tree/AdministrativeDivisionsTree.vue b/securityManagement/src/components/tree/AdministrativeDivisionsTree.vue new file mode 100644 index 0000000..73d42b3 --- /dev/null +++ b/securityManagement/src/components/tree/AdministrativeDivisionsTree.vue @@ -0,0 +1,63 @@ + + + diff --git a/securityManagement/src/components/upload/SingleImageFileUpload.vue b/securityManagement/src/components/upload/SingleImageFileUpload.vue index 97c15b7..c624052 100644 --- a/securityManagement/src/components/upload/SingleImageFileUpload.vue +++ b/securityManagement/src/components/upload/SingleImageFileUpload.vue @@ -6,6 +6,7 @@ v-else :src="minioBaseUrl+modelValue" alt="avatar"/> + {{ btnLabel }} diff --git a/securityManagement/src/config/dict.ts b/securityManagement/src/config/dict.ts index 01bd579..3cb857e 100644 --- a/securityManagement/src/config/dict.ts +++ b/securityManagement/src/config/dict.ts @@ -8,6 +8,7 @@ type DictType = | 'Sex' | 'ServiceProjectType' | 'MiniProgramUserIdentity' + | 'ServiceProjectTwoType' export const initEnums = () => { api.get[]>>('/common/enums').then(resp => { diff --git a/securityManagement/src/config/index.ts b/securityManagement/src/config/index.ts index 2ab04cc..56bb2e1 100644 --- a/securityManagement/src/config/index.ts +++ b/securityManagement/src/config/index.ts @@ -23,7 +23,7 @@ export const SYSTEM_MENUS: SystemMenu[] = [ type: 'dir', children: [ { - title: '后台管理', + title: '后台用户', name: 'bgManagement', path: '/bgManagement', icon:'icon-guanlianbaoan', diff --git a/securityManagement/src/router/index.ts b/securityManagement/src/router/index.ts index 106f0ed..d1841ff 100644 --- a/securityManagement/src/router/index.ts +++ b/securityManagement/src/router/index.ts @@ -10,7 +10,7 @@ import {ROUTER_WHITE_LIST} from "@/config"; * createWebHashHistory: 路径带#号 这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理,影响SEO */ const router = createRouter({ - history: createWebHistory(), + history: createWebHistory('/securityManagement/'), routes: [...staticRouter], strict: false, scrollBehavior: () => ({left: 0, top: 0}) @@ -32,7 +32,7 @@ router.beforeEach(async (to, from, next) => { // 不在白名单内需要查看是否携带token 没有token需要返回登录页进行登录 if (!userStore.getTokenInfo?.value) { await message.warn('未找到token,请重新登陆!') - return next('/enterprise'); + return next('/login'); } //放行 return next(); diff --git a/securityManagement/src/stores/modules/userStore.ts b/securityManagement/src/stores/modules/userStore.ts index bdd8060..3c1f82e 100644 --- a/securityManagement/src/stores/modules/userStore.ts +++ b/securityManagement/src/stores/modules/userStore.ts @@ -2,7 +2,7 @@ import {defineStore} from "pinia"; import {TokenInfo, UserStore} from "@/types/stores/userStore.ts"; export const useUserStore = defineStore({ - id: 'useUserStore', + id: 'baUserStore', state: (): UserStore => { return { tokenInfo: undefined, @@ -20,7 +20,7 @@ export const useUserStore = defineStore({ getTokenInfo: (state): TokenInfo => state.tokenInfo as TokenInfo, }, persist: { - key: "useUserStore", + key: "baUserStore", //spUserStore storage: window.localStorage, paths: ["tokenInfo"], } diff --git a/securityManagement/src/types/components/form/index.ts b/securityManagement/src/types/components/form/index.ts index 0477415..f2ad150 100644 --- a/securityManagement/src/types/components/form/index.ts +++ b/securityManagement/src/types/components/form/index.ts @@ -32,7 +32,8 @@ type FormProMaxItemType = | 'datePicker' | 'rangePicker' | 'timeRangePicker' - | 'timePicker'; + | 'timePicker' + | 'administrativeDivisionsTree'; interface FormProMaxItemCommonProps extends ComponentProps { label?: string, @@ -64,6 +65,7 @@ export type FormProMaxItemOptions = { | FormProMaxItemProps<'rangePicker', ComponentProps> | FormProMaxItemProps<'timeRangePicker', ComponentProps> | FormProMaxItemProps<'timePicker', ComponentProps> + | FormProMaxItemProps<'administrativeDivisionsTree', ComponentProps>> } export interface FormProMaxProps extends FormProps { diff --git a/securityManagement/src/types/views/serviceManagement.ts b/securityManagement/src/types/views/serviceManagement.ts index 285a344..26340e5 100644 --- a/securityManagement/src/types/views/serviceManagement.ts +++ b/securityManagement/src/types/views/serviceManagement.ts @@ -8,7 +8,9 @@ export interface serviceProjectSaveOrUpdateParams extends BaseTableRowRecord { projectManagerMiniProgramUserName: string, name: string, type: TypeEnum, - isRecruitSecurity: BaseEnum, + twoType: BaseEnum, + outsourceName:string, + isFiling:BaseEnum, idNumber: string, serviceArea: number, buildingTotal: number, diff --git a/securityManagement/src/views/enterprise.vue b/securityManagement/src/views/enterprise.vue index 6e5a75a..f24ed69 100644 --- a/securityManagement/src/views/enterprise.vue +++ b/securityManagement/src/views/enterprise.vue @@ -28,8 +28,16 @@ - - + + @@ -73,7 +81,7 @@ import type { Rule } from 'ant-design-vue/es/form'; import type { ShowSearchType } from 'ant-design-vue/es/cascader'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import api from "@/axios"; -import {message, Modal} from 'ant-design-vue'; +import {CascaderProps, message, Modal} from 'ant-design-vue'; import SingleImageFileUpload from "@/components/upload/SingleImageFileUpload.vue"; import {useRouter} from "vue-router"; import {formDatePort, statusPort} from "@/types/views/enterprise.ts"; @@ -119,20 +127,49 @@ const rules: Record = { // 调用行政区划 1 const DivisionTree = async ()=>{ - const resp = await api.get[]>('/common/administrativeDivisionTree') + const resp = await api.get[]>('/common/administrativeDivisionByParentCode',{parentCode:'0'}) administrativeDivisionTree.value = resp.data as TreeNodeVo[] } +const loadData: CascaderProps['loadData'] = async selectedOptions => { + const targetOption = selectedOptions[selectedOptions.length - 1]; + targetOption.loading = true; + const resp = await api.get[]>('/common/administrativeDivisionByParentCode',{parentCode:targetOption.value}) + targetOption.loading = false; + targetOption.children = [administrativeDivisionTree.value,...resp.data] +}; +// 回显数据 +const transformData = (val:any,tree:any)=>{ + for(let i = 0; i< val.length - 1;i++){ + tree.forEach(async(item:any)=>{ + if(item.value === val[i]){ + item.children = [] + let data = await api.get[]>('/common/administrativeDivisionByParentCode',{parentCode:val[i]}) + item.children = data.data.map((items:any)=>{ + return { + label:items.label, + value:items.value + } + }) + transformData(val,item.children) + } + }) + } +} // 可以进行搜索行政区划 2 const filter: ShowSearchType['filter'] = (inputValue, path) => { - return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1); + return path?.some(option => option.label.toLowerCase().indexOf(inputValue?.toLowerCase()) > -1); }; // 搜索完成时回调 const searchAdministrativeDivisionTree = (e:Array)=>{ formDate.value.administrativeDivisionCodes = e as any } + + + + // 注册企业入驻 const onFinish = async ()=>{ //校验表单 @@ -153,7 +190,12 @@ const onFinish = async ()=>{ const resp = await api.post('/common/securityUnitRegister',securityUnitRegisterParams) message.success(resp.message) fileUpload.value.fileDelete() - await formDateRef.value.resetFields() //成功之后进行移除表单 + await resetForm() +} +// 重置 + +const resetForm = async ()=>{ + await formDateRef.value.resetFields() formDate.value = { name:'', socialCode:'', @@ -164,11 +206,7 @@ const onFinish = async ()=>{ address:'', nature:'' } -} -// 重置 - -const resetForm = ()=>{ - formDateRef.value.resetFields() + fileUpload.value.fileDelete() } // 查询企业状态 @@ -214,6 +252,9 @@ const showConfirm = (columnsDate:dataStatus) => { }; onMounted( async ()=>{ await DivisionTree() + await transformData(formDate.value.administrativeDivisionCodes,administrativeDivisionTree.value) }) + + diff --git a/securityManagement/src/views/login.vue b/securityManagement/src/views/login.vue index b2cabb2..fc4cdc6 100644 --- a/securityManagement/src/views/login.vue +++ b/securityManagement/src/views/login.vue @@ -2,13 +2,13 @@
Logo -
超级后台
+
保安后台