liukangdong
2024-05-23 49ecdc73115d94e343cbe271c154fe32e8888c7d
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
已添加7个文件
已修改54个文件
已重命名1个文件
2069 ■■■■ 文件已修改
admin/.env.production 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package-lock.json 182 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/system/role.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/timer/timer.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/base/BaseTable.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/role/OperaSystemRoleDataWindow.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/system/role.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/timer/components/OperaTimerWindow.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/timer/timer.vue 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/pom.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.production
@@ -1,4 +1,4 @@
# ç”Ÿäº§çŽ¯å¢ƒé…ç½®
NODE_ENV = 'production'
VUE_APP_API_URL  = 'http://192.168.0.109:10010'
VUE_APP_API_URL  = 'http://localhost:10010'
admin/package-lock.json
@@ -1876,6 +1876,63 @@
          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
          "dev": true
        },
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
          "dev": true,
          "optional": true
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
          "dev": true,
          "optional": true
        },
        "loader-utils": {
          "version": "2.0.4",
          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        },
        "ssri": {
          "version": "8.0.1",
          "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1883,6 +1940,28 @@
          "dev": true,
          "requires": {
            "minipass": "^3.1.1"
          }
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        },
        "vue-loader-v16": {
          "version": "npm:vue-loader@16.8.3",
          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
          "dev": true,
          "optional": true,
          "requires": {
            "chalk": "^4.1.0",
            "hash-sum": "^2.0.0",
            "loader-utils": "^2.0.0"
          }
        }
      }
@@ -1979,7 +2058,7 @@
    },
    "@wangeditor/basic-modules": {
      "version": "1.1.7",
      "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
      "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
      "requires": {
        "is-url": "^1.2.4"
@@ -1987,7 +2066,7 @@
    },
    "@wangeditor/code-highlight": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz",
      "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==",
      "requires": {
        "prismjs": "^1.23.0"
@@ -1995,7 +2074,7 @@
    },
    "@wangeditor/core": {
      "version": "1.1.19",
      "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz",
      "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
      "requires": {
        "@types/event-emitter": "^0.3.3",
@@ -2008,7 +2087,7 @@
    },
    "@wangeditor/editor": {
      "version": "5.1.23",
      "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz",
      "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
      "requires": {
        "@uppy/core": "^2.1.1",
@@ -2041,22 +2120,22 @@
    },
    "@wangeditor/list-module": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.5.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz",
      "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ=="
    },
    "@wangeditor/table-module": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.4.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz",
      "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w=="
    },
    "@wangeditor/upload-image-module": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
      "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA=="
    },
    "@wangeditor/video-module": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.4.tgz",
      "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz",
      "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg=="
    },
    "@webassemblyjs/ast": {
@@ -3302,9 +3381,9 @@
      }
    },
    "caniuse-lite": {
      "version": "1.0.30001228",
      "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001228.tgz?cache=0&sync_timestamp=1620658693631&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001228.tgz",
      "integrity": "sha1-v9xZQs0zJvpR7gtC++9NqdSSp/o=",
      "version": "1.0.30001621",
      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
      "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==",
      "dev": true
    },
    "case-sensitive-paths-webpack-plugin": {
@@ -13868,87 +13947,6 @@
          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
          "dev": true
        }
      }
    },
    "vue-loader-v16": {
      "version": "npm:vue-loader@16.8.3",
      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
      "dev": true,
      "optional": true,
      "requires": {
        "chalk": "^4.1.0",
        "hash-sum": "^2.0.0",
        "loader-utils": "^2.0.0"
      },
      "dependencies": {
        "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,
          "optional": true,
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "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,
          "optional": 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,
          "optional": true
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
          "dev": true,
          "optional": true
        },
        "loader-utils": {
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        }
      }
    },
admin/src/api/system/role.js
@@ -16,6 +16,10 @@
    trim: true
  })
}
// èŽ·å–è§’è‰²æ•°æ®æƒé™
export function findByRoleId (data) {
  return request.post('visitsAdmin/cloudService/system/dataPermission/findByRoleId', data)
}
// ä¿®æ”¹
export function updateById (data) {
@@ -42,6 +46,9 @@
export function createRolePermission (data) {
  return request.post('/visitsAdmin/cloudService/system/role/createRolePermission', data)
}
export function createRoleDataPermission (data) {
  return request.post('/visitsAdmin/cloudService/system/role/createRoleDataPermission', data)
}
// é…ç½®èœå•
export function createRoleMenu (data) {
admin/src/api/timer/timer.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/systemTimer/cloudService/business/quartz/page', data, {
    trim: true
  })
}
export function create (data) {
  return request.post('/systemTimer/cloudService/business/quartz/create', data, {
    trim: true
  })
}
export function updateById (data) {
  return request.post('/systemTimer/cloudService/business/quartz/updateById', data, {
    trim: true
  })
}
// æ ¹æ®ID查询
export function queryById (id) {
  return request.get(`/systemTimer/cloudService/business/quartz/${id}`)
}
export function pauseById (id) {
  return request.get(`/systemTimer/cloudService/business/quartz/pause/${id}`)
}
export function resumeById (id) {
  return request.get(`/systemTimer/cloudService/business/quartz/resume/${id}`)
}
export function runOnceById (id) {
  return request.get(`/systemTimer/cloudService/business/quartz/runOnce/${id}`)
}
admin/src/components/base/BaseTable.vue
@@ -156,7 +156,7 @@
              this.__afterDelete()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.delete = false
@@ -195,7 +195,7 @@
              this.__afterDelete(this.tableData.selectedRows.length)
            })
            .catch(e => {
              this.$tip.apiFailed(e)
              // this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking.delete = false
admin/src/components/system/role/OperaSystemRoleDataWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
<template>
  <GlobalWindow
    :title="title"
    width="60%"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <p class="tip">正在为角色【 <em>{{role.name || '-'}}</em>】 é…ç½®æ•°æ®æƒé™</p>
    <p class="tip-warn"><i class="el-icon-warning"></i>提醒:权限配置后需重新登录后生效</p>
    <el-form :model="form" ref="form" style="margin-top:15px">
      <el-form-item label="权限类型:" prop="type">
        <el-select v-model="form.type" clearable filterable placeholder="请选择权限类型">
          <el-option
            v-for="(item, index) in options"
            :key="index"
            :label="item.name"
            :value="item.id"
          >
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item v-if="form.type == 4" label="自定义部门:" prop="customData">
        <el-cascader
          :options="departments"
          v-model="form.customData"
          :props=defaultProps
          clearable
        ></el-cascader>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { createRoleDataPermission } from '@/api/system/role'
import { fetchList } from '@/api/business/company'
  // import the styles
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
  name: 'OperaSystemRoleWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      options: [
        { name: '全部', id: 0 },
        { name: '所属部门及下属部门', id: 1 },
        { name: '所属部门及其子孙部门', id: 2 },
        { name: '仅所属部门', id: 3 },
        { name: '自定义部门', id: 4 }
      ],
      // è¡¨å•数据
      form: {
        businessCode: null,
        createTime: null,
        createUser: null,
        customData: [],
        id: null,
        roleId: null,
        type: 0
      },
      defaultProps: {
        multiple: true,
        checkStrictly: true,
        // children: 'children',
        label: 'name',
        value: 'id',
        emitPath: false
      },
      role:{},
      departments: []
    }
  },
  created () {
    this.config({
      api: '/system/role',
      'field.id': 'id'
    })
    this.treeComList()
  },
  methods: {
    // éƒ¨é—¨æ ‘状结构数据
    treeComList () {
      fetchList()
        .then(res => {
          // this.departments = this.tree([res])
          this.departments =this.newTree(res)
        })
    },
    open (title, target,role) {
      // console.log(title, target)
      this.title = title
      this.visible = true
      this.role=role
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        console.log(target);
        if (target.customData === undefined ||target.customData === null || target.customData === '') {
          this.form.customData = []
        } else {
          const customD  = this.form.customData.split(',')
          this.form.customData = customD.map((item) => { return parseInt(item) })
        }
      })
    },
    newTree(tree) {
      if(tree ==null){
        return []
      }
      return tree.map(item => {
        let newItem = {...item}
        if(newItem){
          newItem.children=newItem.childList
        }
        if (item.children && item.children.length == 0) {
          this.$delete( newItem, 'children' )
        } else {
          newItem.children = this.newTree(newItem.children)
        }
        return newItem
      });
    },
    __confirmCreate () {
      // console.log(JSON.stringify(this.form.customData));
      // return
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        this.isWorking = true
        let data = JSON.parse(JSON.stringify(this.form))
        if (this.form.type === 4) {
          data.customData = this.form.customData.join(',')
        } else {
          data.customData = ''
        }
        createRoleDataPermission(data)
          .then(() => {
            this.visible = false
            this.$tip.apiSuccess('新建成功')
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    },
    __confirmEdit () {
      // console.log(JSON.stringify(this.form.customData));
      // return
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        // è°ƒç”¨æ›´æ–°æŽ¥å£
        this.isWorking = true
        let data = JSON.parse(JSON.stringify(this.form))
        if (this.form.type === 4) {
          data.customData = this.form.customData.join(',')
        } else {
          data.customData = ''
        }
        createRoleDataPermission(data)
          .then(() => {
            this.visible = false
            this.$tip.apiSuccess('修改成功')
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    }
  }
}
</script>
admin/src/views/system/role.vue
@@ -40,13 +40,14 @@
        </el-table-column>
        <el-table-column prop="updateTime" label="更新时间" min-width="140px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['system:role:update', 'system:role:createRolePermission', 'system:role:createRoleMenu', 'system:role:delete'])"
          v-if="containPermissions(['system:role:update', 'system:role:createRolePermission','system:datapermission:create', 'system:role:createRoleMenu', 'system:role:delete'])"
          label="操作"
          min-width="270"
          fixed="right"
        >
          <template v-if="isAdmin || (row.code !== adminCode && userInfo.roles.findIndex(code => code === row.code) === -1)" slot-scope="{row}">
            <el-button type="text" @click="$refs.operaRoleWindow.open('编辑角色', row)" icon="el-icon-edit" v-permissions="['system:role:update']">编辑</el-button>
            <el-button type="text" @click="$refs.operaRoleWindow.open('编辑角色', row)"   v-permissions="['system:role:update']">编辑</el-button>
            <el-button type="text" @click="setData(row)" v-permissions="['system:datapermission:create']">数据权限</el-button>
            <el-button type="text" @click="$refs.permissionConfigWindow.open(row)" v-permissions="['system:role:createRolePermission']">配置权限</el-button>
            <el-button type="text" @click="$refs.menuConfigWindow.open(row)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">授权菜单</el-button>
            <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['system:role:delete']">删除</el-button>
@@ -65,6 +66,7 @@
    <PermissionConfigWindow ref="permissionConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    <!-- æŽˆæƒèœå• -->
    <MenuConfigWindow ref="menuConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    <OperaSystemRoleDataWindow  ref="OperaSystemRoleDataWindow"  @success="handlePageChange(tableData.pagination.pageIndex)"    />
  </TableLayout>
</template>
@@ -75,10 +77,12 @@
import OperaRoleWindow from '@/components/system/role/OperaRoleWindow'
import PermissionConfigWindow from '@/components/system/role/PermissionConfigWindow'
import MenuConfigWindow from '@/components/system/role/MenuConfigWindow'
import OperaSystemRoleDataWindow from '@/components/system/role/OperaSystemRoleDataWindow'
import { findByRoleId } from '@/api/system/role'
export default {
  name: 'SystemRole',
  extends: BaseTable,
  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, Pagination },
  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, OperaSystemRoleDataWindow, Pagination },
  data () {
    return {
      // æœç´¢
@@ -99,6 +103,21 @@
      }]
    })
    this.search()
  },
  methods: {
    setData (row) {
      findByRoleId({ roleId: row.id })
        .then(res => {
          if (!res) {
            this.$refs.OperaSystemRoleDataWindow.open('数据权限', { roleId: row.id },row)
          } else {
            this.$refs.OperaSystemRoleDataWindow.open('数据权限', res,row)
          }
        })
        .catch(err => {
          this.$tip.error(err)
        })
    }
  }
}
</script>
admin/src/views/timer/components/OperaTimerWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
<template>
  <GlobalAlertWindow
    v-loading="isUploading"
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix=":">
      <el-form-item label="Bean名称" prop="beanName">
        <el-input v-model="form.beanName" placeholder="请输入Bean名称" :maxlength="10" v-trim/>
      </el-form-item>
      <el-form-item label="模块名称" prop="module">
        <el-input v-model="form.module" placeholder="请输入模块名称" :maxlength="10" v-trim/>
      </el-form-item>
      <el-form-item label="Cron表达式" prop="cronExpres">
        <el-input v-model="form.cronExpres" placeholder="请输入Cron表达式" :maxlength="10" v-trim/>
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入备注" :maxlength="10" v-trim/>
      </el-form-item>
      <el-form-item label="执行参数" prop="params">
        <el-input v-model="form.params" type="textarea" placeholder="请输入执行参数" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalAlertWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
export default {
  name: 'OperaTimerWindow',
  extends: BaseOpera,
  components: { GlobalAlertWindow },
  data () {
    return {
      isUploading: false,
      uploadData: {
        folder: 'projects'
      },
      timeRange: ['', ''],
      // è¡¨å•数据
      form: {
        id: null,
        beanName: null,
        params: null,
        createTime: null,
        module: '',
        remark: '' ,
        cronExpres: ''
      },
      // éªŒè¯è§„则
      rules: {
        beanName: [
          { required: true, message: '请输入Bean名称', tigger: 'blur' }
        ],
        module: [
          { required: true, message: '请输入模块名称', tigger: 'blur' }
        ],
        cronExpres: [
          { required: true, message: '请输入Cron表达式', tigger: 'blur' }
        ]
      }
    }
  },
  created () {
    this.config({
      api: '/timer/timer',
      'field.id': 'id'
    })
  },
  methods: {
    /**
     * æ‰“开窗口
     * @title çª—口标题
     * @target ç¼–辑的对象
     */
     open (title, target) {
      this.title = title
      this.visible = true
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
      })
    }
  }
}
</script>
<style lang="scss" scoped>
@import "@/assets/style/alertstyle.scss";
</style>
admin/src/views/timer/timer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
<template>
  <TableLayout :permissions="['business:devices:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="Bean名称" prop="beanName">
        <el-input v-model="searchForm.beanName" placeholder="请输入发布人" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="模块名称" prop="module">
        <el-input v-model="searchForm.module" placeholder="请输入发布人" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:devices:exportExcel']" @click="exportExcel">导出</el-button> -->
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:quartz:create']">
        <li><el-button type="primary" @click="$refs.OperaTimerWindow.open('新建任务')" icon="el-icon-plus" v-permissions="['business:devices:create']">新建</el-button></li>
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        border
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="index" prop="index" label="序号" align="center" min-width="50px"></el-table-column>
        <el-table-column prop="beanName" label="BEAN名称" align="center" min-width="150px"></el-table-column>
        <el-table-column prop="module" label="模块名称" align="center" min-width="180px"></el-table-column>
        <el-table-column prop="params" label="执行参数" align="center" min-width="180px"></el-table-column>
        <el-table-column prop="state" label="状态" align="center" min-width="100px">
          <template slot-scope="{row}">
              <span v-if="row.state ==1" style="color:green">正常</span>
              <span v-if="row.state ==2" style="color: red">暂停</span>
              <span v-if="row.state ==3" style="color: red">已删除</span>
          </template>
        </el-table-column>
        <el-table-column prop="cronExpres" label="表达式" align="center" min-width="100px"></el-table-column>
        <el-table-column prop="createTime" label="创建时间" align="center" min-width="180px"></el-table-column>
        <el-table-column prop="remark" label="备注" align="center" min-width="180px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:quartz:update'])"
          label="操作"
          fixed="right"
          min-width="220"
          align="center"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.OperaTimerWindow.open('编辑任务', row)" v-permissions="['business:quartz:update']">编辑</el-button>
            <el-button type="text"  @click="runById(row)"  v-permissions="['business:quartz:update']">执行一次</el-button>
            <el-button type="text"   v-if="row.state == 1" style="color: red" @click="pauseById(row)"  v-permissions="['business:quartz:update']">暂停</el-button>
            <el-button type="text"  v-if="row.state == 2" style="color: green" @click="resumeById(row)"   v-permissions="['business:quartz:update']">恢复</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      ></pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaTimerWindow ref="OperaTimerWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaTimerWindow from '@/views/timer/components/OperaTimerWindow'
import {runOnceById} from "@/api/timer/timer";
export default {
  name: 'Devices',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaTimerWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        id: '',
        beanName: '',
        module: ''
      },
      pausing:false,
      running:false,
      resuming:false,
      room: []
    }
  },
  provide() {
    return {
      room: () => this.room
    }
  },
  created () {
    this.config({
      module: '设备管理信息表',
      api: '/timer/timer',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    pauseById (row) {
      this.__checkApi()
      this.$dialog.actionConfirm('确认暂停该任务吗?')
          .then(() => {
            this.pausing = true
            this.api.paustById(row.id)
                .then(() => {
                  this.$message.info('暂停成功')
                  this.search()
                })
                .catch(e => {
                  // this.$tip.apiFailed(e)
                })
                .finally(() => {
                  this.pausing = false
                })
          })
          .catch(() => {})
    },
    resumeById (row) {
      this.__checkApi()
      this.$dialog.actionConfirm('确认恢复该任务吗?')
          .then(() => {
            this.resuming = true
            this.api.resumeById(row.id)
                .then(() => {
                  this.$message.info('恢复成功')
                  this.search()
                })
                .catch(e => {
                  // this.$tip.apiFailed(e)
                })
                .finally(() => {
                  this.resuming = false
                })
          })
          .catch(() => {})
    },
    runById (row) {
      this.__checkApi()
      this.$dialog.actionConfirm('确认执行一次该任务吗?')
          .then(() => {
            this.running = true
            this.api.runOnceById(row.id)
                .then(() => {
                  this.$message.info('执行成功')
                  this.search()
                })
                .catch(e => {
                  // this.$tip.apiFailed(e)
                })
                .finally(() => {
                  this.running = false
                })
          })
          .catch(() => {})
    }
  },
}
</script>
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -487,7 +487,7 @@
            List<Multifile> filelist = multifileJoinMapper.selectList(bookquery);
            filelist.stream().forEach(a -> {
                if (StringUtils.isNotBlank(a.getFileurl())) {
                    a.setFileFullUrl(path + a.getFileurl());
                    a.setFileurlFull(path + a.getFileurl());
                }
            });
            s.setFileList(filelist);
@@ -557,7 +557,7 @@
            List<Multifile> filelist = multifileJoinMapper.selectList(bookquery);
            filelist.stream().forEach(a -> {
                if (StringUtils.isNotBlank(a.getFileurl())) {
                    a.setFileFullUrl(path + a.getFileurl());
                    a.setFileurlFull(path + a.getFileurl());
                }
            });
            result.setFileList(filelist);
@@ -836,7 +836,7 @@
                .eq("OBJ_TYPE", MeetConstants.ZERO)
        );
        multiFileList.forEach(i -> {
            i.setFileFullUrl(projectsPath);
            i.setFileurlFull(projectsPath);
        });
        //附件信息
        meetingDetailResponse.setMultiFileList(multiFileList);
server/pom.xml
@@ -12,9 +12,11 @@
  <description></description>
  <modules>
      <module>meeting</module>
      <module>system_service</module>
      <module>visits</module>
      <module>system_service</module>
      <module>system_timer</module>
      <module>system_gateway</module>
      <module>emaysms</module>
  </modules>
  <parent>
    <groupId>org.springframework.boot</groupId>
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -66,6 +66,7 @@
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
        }
    }
server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
@@ -2,6 +2,7 @@
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDataPermissionBiz;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.constants.DataPermissionConstants;
@@ -15,7 +16,6 @@
import com.doumee.service.system.SystemDataPermissionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -38,11 +38,16 @@
    @Autowired
    private SystemDataPermissionBiz systemDataPermissionBiz;
    @ApiOperation("根据roleId查询企业数据权限")
    @PostMapping("/findByRoleId")
    @CloudRequiredPermission("system:datapermission:query")
    public ApiResponse<SystemDataPermission> findByRoleId (@RequestBody  SystemDataPermission  pageWrap) {
        return ApiResponse.success(systemDataPermissionService.findByRoleId(pageWrap));
    }
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("system:datapermission:create")
    @CloudRequiredPermission("system:datapermission:create")
    public ApiResponse create(@RequestHeader(Constants.HEADER_USER_TOKEN) String token, @Validated(OperaType.Create.class) @RequestBody SystemDataPermission systemDataPermission) {
        systemDataPermission.setCreateUser(this.getLoginUser(token).getId());
        return ApiResponse.success(systemDataPermissionBiz.create(systemDataPermission));
@@ -50,7 +55,7 @@
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("system:datapermission:delete")
    @CloudRequiredPermission("system:datapermission:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        systemDataPermissionService.deleteById(id);
        return ApiResponse.success(null);
@@ -58,7 +63,7 @@
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("system:datapermission:delete")
    @CloudRequiredPermission("system:datapermission:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
@@ -71,7 +76,7 @@
    @ApiOperation("修改")
    @PostMapping("/updateById")
    @RequiresPermissions("system:datapermission:update")
    @CloudRequiredPermission("system:datapermission:update")
    public ApiResponse updateById(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@Validated(OperaType.Update.class) @RequestBody SystemDataPermission systemDataPermission) {
        systemDataPermission.setUpdateUser(this.getLoginUser(token).getId());
        systemDataPermissionBiz.update(systemDataPermission);
@@ -80,16 +85,16 @@
    @ApiOperation("修改状态")
    @PostMapping("/updateStatus")
    @RequiresPermissions("system:datapermission:update")
    @CloudRequiredPermission("system:datapermission:update")
    public ApiResponse updateStatus(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@Validated(OperaType.UpdateStatus.class) @RequestBody SystemDataPermission systemDataPermission) {
        systemDataPermission.setCreateUser(this.getLoginUser(token).getId());
        systemDataPermission.setLoginUserInfo(this.getLoginUser(token));
        systemDataPermissionBiz.updateStatus(systemDataPermission);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("system:datapermission:query")
    @CloudRequiredPermission("system:datapermission:query")
    public ApiResponse<PageData<SystemDataPermissionListVO>> findPage (@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestBody PageWrap<SystemDataPermission> pageWrap) {
        return ApiResponse.success(systemDataPermissionService.findPage(pageWrap));
    }
server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
@@ -12,11 +12,13 @@
import com.doumee.dao.system.dto.CreateRoleMenuDTO;
import com.doumee.dao.system.dto.CreateRolePermissionDTO;
import com.doumee.dao.system.dto.QuerySystemRoleDTO;
import com.doumee.dao.system.model.SystemDataPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.vo.SystemRoleListVO;
import com.doumee.service.system.SystemRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -59,6 +61,16 @@
    }
    @PreventRepeat
    @ApiOperation("配置角色数据权限")
    @PostMapping("/createRoleDataPermission")
    @CloudRequiredPermission("system:datapermission:create")
    public ApiResponse createRoleDataPermission (@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@Validated @RequestBody SystemDataPermission dto) {
        dto.setLoginUserInfo(this.getLoginUser(token));
        systemRoleBiz.createRoleDataPermission(dto);
        return ApiResponse.success(null);
    }
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @CloudRequiredPermission("system:role:create")
server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
@@ -2,6 +2,7 @@
import com.doumee.dao.system.dto.CreateRoleMenuDTO;
import com.doumee.dao.system.dto.CreateRolePermissionDTO;
import com.doumee.dao.system.model.SystemDataPermission;
import com.doumee.dao.system.model.SystemRole;
import java.util.List;
@@ -54,4 +55,6 @@
     * @date 2023/03/21 14:49
     */
    void createRoleMenu(CreateRoleMenuDTO dto);
    void createRoleDataPermission(SystemDataPermission dto);
}
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
@@ -3,14 +3,20 @@
import com.doumee.biz.system.SystemRoleBiz;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.system.dto.CreateRoleMenuDTO;
import com.doumee.dao.system.dto.CreateRolePermissionDTO;
import com.doumee.dao.system.model.SystemDataPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.model.SystemRoleMenu;
import com.doumee.dao.system.model.SystemRolePermission;
import com.doumee.service.system.SystemDataPermissionService;
import com.doumee.service.system.SystemRoleMenuService;
import com.doumee.service.system.SystemRolePermissionService;
import com.doumee.service.system.SystemRoleService;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -29,6 +35,8 @@
    @Autowired
    private SystemRoleMenuService systemRoleMenuService;
    @Autowired
    private SystemDataPermissionService systemDataPermissionService;
    @Override
    public Integer create(SystemRole systemRole) {
@@ -112,4 +120,28 @@
            systemRoleMenuService.create(newRoleMenu);
        }
    }
    @Override
    @Transactional
    public void createRoleDataPermission(SystemDataPermission dto) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user ==null){
            user = dto.getLoginUserInfo();
        }
        if(dto.getRoleId()==null || dto.getType()==null ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请求参数不正确!");
        }
        // åˆ é™¤å…³è”权限
        SystemDataPermission deleteDto = new SystemDataPermission();
        deleteDto.setRoleId(dto.getRoleId());
        systemDataPermissionService.delete(deleteDto);
        // æ–°å¢žæ–°çš„æƒé™
        dto.setDeleted(Boolean.FALSE);
        dto.setBusinessCode("DEPARTMENT");
        dto.setCreateTime(DateUtil.getCurrentDate());
        dto.setCreateUser(user.getId());
        dto.setDisabled(Boolean.FALSE);
        systemDataPermissionService.create(dto);
    }
}
server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
@@ -21,13 +21,13 @@
                .addPathPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
    }
    @Bean
    public FilterRegistrationBean addRequestWrapperFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new RequestWrapperFilter());
        registration.setName("RequestWrapperFilter");
        registration.addUrlPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
        registration.setOrder(1);
        return registration;
    }
//    @Bean
//    public FilterRegistrationBean addRequestWrapperFilter() {
//        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
//        registration.setFilter(new RequestWrapperFilter());
//        registration.setName("RequestWrapperFilter");
//        registration.addUrlPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
//        registration.setOrder(1);
//        return registration;
//    }
}
server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java
@@ -43,7 +43,7 @@
//                return this.defaultData(loginUserInfo.getId());
//            }
            SystemDataPermission systemDataPermission = new SystemDataPermission();
            systemDataPermission.setType((short)0);
            systemDataPermission.setType(0);
            List<SystemDataPermission> dataPermissions = new ArrayList<>();
            dataPermissions.add(systemDataPermission);
            // æŒ‰è§’色的数据权限优先级返回数据
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -5,6 +5,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
@@ -16,6 +17,8 @@
import  java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.*;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -96,6 +99,10 @@
    public static final String CLOUD_SERVICE_URL_INDEX = "/cloudService";
    public static final String VISIT_TIPS = "VISIT_TIPS";
    public static final String VISIT_GUIDEMAP = "VISIT_GUIDEMAP";
    public static final String HIDDEN_DANGER_FILE = "HIDDEN_DANGER_FILE";
    public static final String LOG_DEL_DAYS_LIMIT ="LOG_DEL_DAYS_LIMIT" ;
    public static final String HK_LOG_DEL_DAYS_LIMIT ="HK_LOG_DEL_DAYS_LIMIT" ;
    public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
    public static  boolean DEALING_HK_SYNCDEVICE = false;
    public static  boolean DEALING_HK_SYNCDEVICE_STATUS = false;
@@ -143,6 +150,14 @@
        return sb.toString();
    }
    public interface DATAPERMISSION_TYPE{
        public static final  int all = 0;
        public static final  int departAndChild = 1;
        public static final  int departAndLeaf = 2;
        public static final  int depart = 3;
        public static final  int custom = 4;
        public static final  int self = -1;
    }
    public static  Date  getBirthdyByCardNo(String idCard){
    if(idCard ==null || idCard.length()<14){
        return null;
@@ -723,7 +738,138 @@
            this.info = info;
        }
    }
    /**
     * å…³è”对象类型
     å…³è”对象类型 0企业营业执照 1理赔报案事故视频或图片 2理赔员工关系证明材料 3理赔门诊资料 4理赔住院资料 5理赔伤残资料 6理赔赔付结案材料 7企业身份证号 8保单申请表PDF 9签署后保单申请表PDF 10企业签章 11最终报单
     */
    public  enum MultiFile{
        HIDDEN_DANGER_SUBMIT(0, "隐患随手拍提报", "隐患随手拍提报"),
        HIDDEN_DANGER_DEAL_BEFORE(1, "隐患随手拍处理前", "隐患随手拍处理前"),
        HIDDEN_DANGER_DEAL_AFTER(2, "隐患随手拍处理后 ", "隐患随手拍处理后 "),
        ;
        // æˆå‘˜å˜é‡
        private String name;
        private int key;
        private String noteinfo;// æè¿°
        // æž„造方法
        MultiFile(int key, String name, String noteinfo) {
            this.name = name;
            this.key = key;
            this.noteinfo = noteinfo;
        }
        // æ™®é€šæ–¹æ³•
        public static String getName(int index) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // æ™®é€šæ–¹æ³•
        public static String getInfo(int index) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.noteinfo;
                }
            }
            return null;
        }
        // get set æ–¹æ³•
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getNoteinfo() {
            return noteinfo;
        }
    }
    /**
     * å®¡æ‰¹æ¨¡æ‹Ÿç±»åž‹ 0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约
     */
    public  enum ApproveTmplType{
        NOT_SG_VISIT(0, "非施工人员访客申请", "非施工人员访客申请"),
        SG_VISIT(1, "施工人员访客申请", "施工人员访客申请"),
        CAR_VISIT(2, "访客报备 ", "访客报备 "),
        IN_CITY_CAR_USE(3, "公车市内用车 ", "公车市内用车 "),
        OUT_CITY_CAR_USE(4, "公车室外用车 ", "公车室外用车 "),
        CITY_WLC_BOOK(5, "市公司物流车预约 ", "5市公司物流车预约 "),
        ;
        // æˆå‘˜å˜é‡
        private String name;
        private int key;
        private String noteinfo;// æè¿°
        // æž„造方法
        ApproveTmplType(int key, String name, String noteinfo) {
            this.name = name;
            this.key = key;
            this.noteinfo = noteinfo;
        }
        // æ™®é€šæ–¹æ³•
        public static String getName(int index) {
            for (ApproveTmplType c : ApproveTmplType.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // æ™®é€šæ–¹æ³•
        public static String getInfo(int index) {
            for (ApproveTmplType c : ApproveTmplType.values()) {
                if (c.getKey() == index) {
                    return c.noteinfo;
                }
            }
            return null;
        }
        // get set æ–¹æ³•
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getNoteinfo() {
            return noteinfo;
        }
    }
    public  enum NoticeObjectType {
        MEETING_BOOK_SUCCESS(0, "会与预定成功","会与预定成功"),
        MEETING_CACEL(1, "会议取消","会议取消"),
server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.system.model.SystemDataPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.vo.SystemDataPermissionListVO;
import org.apache.ibatis.annotations.Param;
@@ -21,4 +22,6 @@
     * @return List<SystemDataPermissionListVO>
     */
    List<SystemDataPermissionListVO> selectManageList(@Param("dto") SystemDataPermission dto, @Param("orderByClause") String orderByClause);
    List<SystemDataPermissionListVO> selectUserList(@Param("dto") SystemDataPermission dto, @Param("role") SystemRole role, @Param("userId") Integer userId);
}
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -79,6 +79,6 @@
    @ApiModelProperty(value = "文件地址")
    @TableField(exist = false)
    private String fileFullUrl;
    private String fileurlFull;
}
server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -40,7 +40,7 @@
    @ApiModelProperty(value = "权限类型(0全部,1自定义,2仅用户所属,3用户所属及其子数据)", example = "1")
    @NotNull(message = "权限类型不能为空", groups = {OperaType.Create.class, OperaType.Update.class})
    private Short type;
    private Integer type;
    @ApiModelProperty(value = "自定义数据")
    private String customData;
server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -17,6 +17,7 @@
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * ç³»ç»Ÿç”¨æˆ·
@@ -107,5 +108,8 @@
    @ApiModelProperty(value = "0 å¯ç”¨ 1 ç¦ç”¨")
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "数据权限内部门编码集合")
    @TableField(exist = false)
    private List<Integer> companyIdList;
}
server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
@@ -3,6 +3,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.system.model.SystemDataPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.SystemDataPermissionListVO;
import java.util.List;
@@ -105,4 +107,8 @@
     * @return long
     */
    long count(SystemDataPermission systemDataPermission);
    List<Integer> selectHighRole(SystemDataPermission systemDataPermission, SystemRole rt, SystemUser user);
    SystemDataPermission findByRoleId(SystemDataPermission pageWrap);
}
server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
@@ -95,7 +95,6 @@
        Utils.MP.blankToNull(pageWrap.getModel());
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        queryWrapper.selectAll(Notices.class);
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.eq(Notices::getIsdeleted, pageWrap.getModel().getIsdeleted());
@@ -130,7 +129,6 @@
        }else{
            queryWrapper.orderByDesc(Notices::getCreateDate);
        }
        PageData<Notices> pageData = PageData.from(noticesMapper.selectJoinPage(page,Notices.class, queryWrapper));
        return pageData;
server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
@@ -1,25 +1,32 @@
package com.doumee.service.system.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.system.SystemDataPermissionMapper;
import com.doumee.dao.system.SystemRoleMapper;
import com.doumee.dao.system.model.SystemDataPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.SystemDataPermissionListVO;
import com.doumee.service.system.SystemDataPermissionService;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
 * æ•°æ®æƒé™é…ç½®Service实现
@@ -34,6 +41,8 @@
    @Autowired
    private SystemRoleMapper systemRoleMapper;
    @Autowired
    private CompanyMapper companyMapper;
    @Override
    public Integer create(SystemDataPermission systemDataPermission) {
@@ -132,4 +141,148 @@
        Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission);
        return systemDataPermissionMapper.selectCount(wrapper);
    }
    @Override
    public SystemDataPermission findByRoleId(SystemDataPermission pageWrap){
        if ( pageWrap.getRoleId() == null) {
            return null;
        }
        // æŸ¥è¯¢æ•°æ®æƒé™
        QueryWrapper<SystemDataPermission> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
                .eq(SystemDataPermission::getBusinessCode, "DEPARTMENT")
                .eq(SystemDataPermission::getRoleId, pageWrap.getRoleId())
                .eq(SystemDataPermission::getDeleted, Boolean.FALSE)
                .eq(SystemDataPermission::getDisabled, Boolean.FALSE);
        List<SystemDataPermission> result = systemDataPermissionMapper.selectList(queryWrapper);
        if(result!=null && result.size()>0){
            return result.get(0);
        }
        return  null;
    }
    @Override
    public List<Integer> selectHighRole(SystemDataPermission model, SystemRole role, SystemUser user) {
        List<SystemDataPermissionListVO>list =   systemDataPermissionMapper.selectUserList(model,role,user.getId()) ;
        if(list !=null){
            boolean all = false;
            boolean departAndChild=false;
            boolean depart=false;
            boolean departAndLeaf=false;
            boolean custom=false;
            String c = "";
            for(SystemDataPermissionListVO d : list){
                if(!all && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.all)){
                    all =true;
                }
                if(!depart && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.depart)){
                    depart =true;
                }
                if(!departAndChild && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndChild)){
                    departAndChild =true;
                }
                if(!departAndLeaf && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndLeaf)){
                    departAndLeaf =true;
                }
                if(  Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.custom)){
                    custom =true;
                    c += StringUtils.defaultString(d.getCustomData(),"");
                }
            }
            Company department = new Company();
            department.setId(user.getCompanyId());
            if(all){
                return  null;
            }else{
                List<Integer> dList = new ArrayList<>();
                dList.add(-1);//虚拟部门,排查空集合
                if(custom) {
                    //如果有自定义部门
                    String[] idStrs = c.split(",");
                    for(String s :idStrs){
                        try {
                            Integer si = Integer.parseInt(s);
                            if(!isExists(si,dList)){
                                dList.add(si);
                            }
                        }catch (Exception e){
                        }
                    }
                }
                if(departAndLeaf){
                    if(department!= null){
                        dList.addAll(userDataPermissonList(department,true));
                    }
                }else if(departAndChild){
                    if(department!= null) {
                        dList.addAll(userDataPermissonList(department, false));
                    }
                }else if(depart){
                    if(department!= null && !isExists(department.getId(), dList)){
                        dList.add(department.getId());
                    }
                }
                return  dList;
            }
        }
        return new ArrayList<>();
    }
    public List<Integer> userDataPermissonList(Company depart ,boolean isleaf) {
        List<Integer> pool = new ArrayList<>();
        List<Company> departList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
                .eq(Company::getIsdeleted,Constants.ZERO ) );
        pool.add(depart.getId());
        this.fillDepartChildren(pool, Arrays.asList(depart.getId()),isleaf,departList);
        return pool;
    }
    private void fillDepartChildren(List<Integer> pool, List<Integer> asList, boolean isleaf, List<Company> departList) {
        List<Company> departments = getDepartListByParentIds(asList,departList);
        List<Integer> ids = departments.stream().map(Company::getId).collect(Collectors.toList());
        if(isleaf){
            if (ids.size() > 0) {
                pool.addAll(ids);
                this.fillDepartChildren(pool, ids,isleaf,departList);
            }
        }else{
            pool.addAll(ids);
        }
    }
    private List<Company> getDepartListByParentIds(List<Integer> asList, List<Company> departList) {
        List<Company> list = new ArrayList<>();
        if(asList.size()>0){
            for(Integer id : asList){
                list.addAll(getDepartListByParentId(id,departList));
            }
        }
        return list;
    }
    private List<Company> getDepartListByParentId(Integer pId, List<Company> departList) {
        List<Company> list = new ArrayList<>();
        if(departList!= null){
            for(Company d :departList){
                if(Constants.equalsInteger(d.getParentId(),pId)){
                    list.add(d);
                }
            }
        }
        return  list;
    }
    private boolean isExists(Integer s, List<Integer> dList) {
        if(dList!=null){
            for(Integer t : dList){
                if(Constants.equalsInteger(s,t)){
                    return true;
                }
            }
        }
        return false;
    }
}
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -5,10 +5,7 @@
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.utils.Utils;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.model.SystemLoginLog;
import com.doumee.dao.system.model.SystemPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.model.*;
import com.doumee.service.common.CaptchaService;
import com.doumee.service.system.*;
import lombok.extern.slf4j.Slf4j;
@@ -39,6 +36,9 @@
    @Autowired
    private SystemUserService systemUserService;
    @Lazy
    @Autowired
    private SystemDataPermissionService systemDataPermissionService;
    @Lazy
    @Autowired
    private SystemRoleService systemRoleService;
@@ -138,6 +138,12 @@
        // èŽ·å–ç™»å½•ç”¨æˆ·ä¿¡æ¯
        List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
        List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
        SystemRole rt = new SystemRole();
        rt.setDeleted(Boolean.FALSE);
        //数据部门权限集合
        user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,null);
        return  userInfo;
    }
server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
@@ -1,6 +1,14 @@
package com.doumee.service.timer;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.timer.entity.JobState;
import com.doumee.dao.timer.entity.QuartzJob;
import com.doumee.dao.timer.mapper.QuartzJobMapper;
@@ -90,4 +98,32 @@
            quartzManage.run(quartzJob);
        }
    }
    public PageData<QuartzJob> findPage(PageWrap<QuartzJob> pageWrap) {
        IPage<QuartzJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<QuartzJob> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.lambda()
                .eq(pageWrap.getModel().getId() != null, QuartzJob::getId, pageWrap.getModel().getId())
                .eq(pageWrap.getModel().getParams() != null, QuartzJob::getParams, pageWrap.getModel().getParams())
                .like(pageWrap.getModel().getBeanName() != null, QuartzJob::getBeanName, pageWrap.getModel().getBeanName())
                .eq(pageWrap.getModel().getState() != null, QuartzJob::getState, pageWrap.getModel().getState())
                .eq(pageWrap.getModel().getRemark() != null, QuartzJob::getRemark, pageWrap.getModel().getRemark())
                .like(pageWrap.getModel().getModule() != null, QuartzJob::getModule, pageWrap.getModel().getModule())
        ;
        return PageData.from(quartzJobMapper.selectPage(page, queryWrapper));
    }
    public void updateById(QuartzJob model) {
        QuartzJob quartzJob = quartzJobMapper.selectById(model.getId()) ;
        if (Objects.isNull(quartzJob)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        pause(model.getId());//暂停
        //先删除就任务
        quartzManage.deleteJob(model.getId());
        quartzJob.setState(JobState.JOB_STOP.getStatus());
        quartzJobMapper.updateById(quartzJob) ;
    }
}
server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
@@ -43,5 +43,30 @@
    </where>
    ${orderByClause}
  </select>
  <select id="selectUserList" resultMap="SystemDataPermissionListVO">
    SELECT
    sdp.`ID`, sdp.`BUSINESS_CODE`, sdp.`ROLE_ID`, sdp.`TYPE`, sdp.`CUSTOM_DATA`, sdp.`DISABLED`, sdp.`REMARK`, sdp.DISABLED, sdp.`CREATE_TIME`, sdp.`UPDATE_TIME`,
    role.`ID` AS ROLE_ID, role.`CODE` AS ROLE_CODE, role.`NAME` AS ROLE_NAME,
    create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
    update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_DATA_PERMISSION sdp
    INNER JOIN `SYSTEM_ROLE` role ON role.ID = sdp.ROLE_ID
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = sdp.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = sdp.UPDATE_USER
    <where>
      sdp.DELETED = 0
      <if test="dto.businessCode != null and dto.businessCode != ''">
        AND sdp.`BUSINESS_CODE` = #{dto.businessCode}
      </if>
      <if test="dto.roleId != null">
        AND role.`ID` =  #{dto.roleId}
      </if>
      <if test="dto.type != null">
        AND sdp.`TYPE` =  #{dto.type}
      </if>
      <if test="userId != null">
        AND exists (select sr.id from system_user_role sr where sr.role_id=sdp.role_id and sr.user_id=#{userId} and sr.deleted=0)
      </if>
    </where>
  </select>
</mapper>
server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.doumee.api.timer;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.timer.entity.QuartzJob;
import com.doumee.service.timer.QuartzJobService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * @author æ±Ÿè¹„蹄
 * @since 2024/04/28 16:06
 */
@Api(tags = "作业调度平台接口交互记录")
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/quartz")
public class QuartzCloudController extends BaseController {
    @Autowired
    private QuartzJobService quartzJobService;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @CloudRequiredPermission("business:quartz:create")
    public ApiResponse  create(@RequestBody QuartzJob quartzJob ,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
          quartzJobService.insert(quartzJob) ;
          return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:quartz:update")
    public ApiResponse updateById(@RequestBody QuartzJob quartzJob,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        quartzJobService.update(quartzJob);
        return ApiResponse.success(null);
    }
    @ApiOperation( "停止任务")
    @GetMapping("/pause/{id}")
    @CloudRequiredPermission("business:quartz:update")
    public ApiResponse pause(@PathVariable("id") Integer id) {
        quartzJobService.pause(id); return ApiResponse.success(null);
    }
    @ApiOperation( "恢复任务")
    @GetMapping("/resume/{id}")
    @CloudRequiredPermission("business:quartz:update")
    public ApiResponse resume(@PathVariable("id") Integer id) {
        quartzJobService.resume(id) ; return ApiResponse.success(null);
    }
    @ApiOperation( "执行一次")
    @GetMapping("/runOnce/{id}")
    @CloudRequiredPermission("business:quartz:update")
    public ApiResponse runOnce(@PathVariable("id") Integer id) {
        quartzJobService.runOnce(id) ; return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:quartz:query")
    public ApiResponse<PageData<QuartzJob>> findPage (@RequestBody PageWrap<QuartzJob> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(quartzJobService.findPage(pageWrap));
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:quartz:query")
    public ApiResponse<QuartzJob> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success( quartzJobService.getById(id));
    }
}
server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java
@@ -10,7 +10,7 @@
import javax.annotation.Resource;
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/quartz")
@RequestMapping( "/business/quartz")
@Api(tags = "定时任务接口")
public class QuartzController {
server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java
ÎļþÃû´Ó server/visits/admin_timer/src/main/java/com/doumee/api/HkLogTimerController.java ÐÞ¸Ä
@@ -1,19 +1,14 @@
package com.doumee.api;
import com.doumee.api.BaseController;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.service.business.InterfaceLogService;
import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
import com.doumee.service.business.PlatformInterfaceLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/**
 * @author æ±Ÿè¹„蹄
@@ -22,14 +17,17 @@
@Api(tags = "日志定时器接口")
@RestController
@RequestMapping("/timer/log")
public class HkLogTimerController extends BaseController {
public class InterfaceLogTimerController extends BaseController {
    @Autowired
    private InterfaceLogService interfaceLogService;
    @Autowired
    private PlatformInterfaceLogService platformInterfaceLogService;
    @ApiOperation("开启定时接口日志清理")
    @GetMapping("/clearThreeMonthLog")
    public ApiResponse clearThreeMonthLog() {
        interfaceLogService.clearThreeMonthLog();
        platformInterfaceLogService.clearThreeMonthLog();
        return ApiResponse.success("开启定时接口日志清理成功");
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java
@@ -39,7 +39,7 @@
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:approvetempl:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        approveTemplService.deleteById(id);
        approveTemplService.deleteById(id,this.getLoginUser(null));
        return ApiResponse.success(null);
    }
@@ -47,7 +47,7 @@
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:approvetempl:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        approveTemplService.deleteByIdInBatch(this.getIdList(ids));
        approveTemplService.deleteByIdInBatch(this.getIdList(ids),this.getLoginUser(null));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java
@@ -39,7 +39,7 @@
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:hiddendangerparam:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        hiddenDangerParamService.deleteById(id);
        hiddenDangerParamService.deleteById(id,this.getLoginUser(null));
        return ApiResponse.success(null);
    }
@@ -47,7 +47,7 @@
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:hiddendangerparam:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        hiddenDangerParamService.deleteByIdInBatch(this.getIdList(ids));
        hiddenDangerParamService.deleteByIdInBatch(this.getIdList(ids),this.getLoginUser(null));
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
@@ -34,14 +34,23 @@
    @PostMapping("/create")
    @CloudRequiredPermission("business:approvetempl:create")
    public ApiResponse create(@RequestBody ApproveTempl approveTempl,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        approveTempl.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(approveTemplService.create(approveTempl));
    }
    @PreventRepeat
    @ApiOperation("发布模版")
    @PostMapping("/save")
    @CloudRequiredPermission("business:approvetempl:create")
    public ApiResponse save(@RequestBody ApproveTempl approveTempl,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        approveTempl.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(approveTemplService.save(approveTempl));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:approvetempl:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        approveTemplService.deleteById(id);
        approveTemplService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
@@ -49,7 +58,7 @@
    @GetMapping("/delete/batch")
    @CloudRequiredPermission("business:approvetempl:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        approveTemplService.deleteByIdInBatch(this.getIdList(ids));
        approveTemplService.deleteByIdInBatch(this.getIdList(ids),this.getLoginUser(token));
        return ApiResponse.success(null);
    }
@@ -57,6 +66,7 @@
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:approvetempl:update")
    public ApiResponse updateById(@RequestBody ApproveTempl approveTempl,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        approveTempl.setLoginUserInfo(this.getLoginUser(token));
        approveTemplService.updateById(approveTempl);
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -100,4 +100,11 @@
        return ApiResponse.success(carUseBookService.checkDateUse(carId,dateDay));
    }
    @ApiOperation("申请撤销")
    @GetMapping("/revoke")
    public ApiResponse  revoke (@RequestParam Integer id, @RequestParam String info, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        carUseBookService.revoke(id,info,getLoginUser(token));
        return ApiResponse.success("操作成功");
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -13,6 +13,7 @@
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.request.MemberImport;
import com.doumee.dao.admin.request.MemberQuery;
import com.doumee.dao.business.dto.RegisterDriverDTO;
import com.doumee.dao.business.dto.ResetPasswordDTO;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.MemberRole;
@@ -327,4 +328,16 @@
        return ApiResponse.success(null);
    }
    @LoginNoRequired
    @ApiOperation("司机注册")
    @PostMapping("/registerDriver")
    public ApiResponse registerDriver(@RequestBody RegisterDriverDTO registerDriverDTO ){
        memberService.registerDriver(registerDriverDTO);
        return ApiResponse.success("注册成功");
    }
}
server/visits/dmvisit_service/pom.xml
@@ -22,5 +22,10 @@
            <artifactId>system_service</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.doumee</groupId>
            <artifactId>emaysms</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
@@ -3,10 +3,13 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.ApproveParam;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/12/28 11:46
 */
public interface ApproveParamMapper extends BaseMapper<ApproveParam> {
    void insertBatchSomeColumn(List<ApproveParam> paramList);
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.HiddenDanger;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @since 2024/04/28 16:06
 */
public interface HiddenDangerMapper extends BaseMapper<HiddenDanger> {
public interface HiddenDangerMapper extends MPJBaseMapper<HiddenDanger> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.dao.business.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/20 14:54
 */
@Data
public class RegisterDriverDTO {
    @ApiModelProperty(value = "姓名")
    private String name;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "验证码")
    private String validCode;
    @ApiModelProperty(value = "密码")
    private String password;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.doumee.dao.business.join;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Approve;
import com.github.yulichang.base.mapper.MPJJoinMapper;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/12/28 14:09
 */
public interface ApproveJoinMapper extends MPJJoinMapper<Approve> {
    void insertBatchSomeColumn(List<Approve> list);
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
@@ -68,8 +69,8 @@
    @ExcelColumn(name="ERP审批编码")
    private String erpId;
    @ApiModelProperty(value = "审批状态 0待审批 1审批中 2审批通过 3审批未通过 4他人已处理", example = "1")
    @ExcelColumn(name="审批状态 0待审批 1审批中 2审批通过 3审批未通过 4他人已处理")
    @ApiModelProperty(value = "审批状态 0待自己审批审批 1待自己审批 2审批通过 3审批未通过 4他人已处理 ", example = "1")
    @ExcelColumn(name="审批状态 0待自己审批审批 1待自己审批 2审批通过 3审批未通过 4他人已处理")
    private Integer status;
    @ApiModelProperty(value = "状态信息")
@@ -96,9 +97,6 @@
    @ExcelColumn(name="关联业务主键")
    private Integer objId;
    @ApiModelProperty(value = "关联业务类型:0=访客申请;1=用车申请", example = "1")
    @ExcelColumn(name="关联业务类型:0=访客申请;1=用车申请")
    private Integer objType;
    @ApiModelProperty(value = "审批等级", example = "1")
    @ExcelColumn(name="审批等级")
@@ -108,7 +106,39 @@
    @ExcelColumn(name="多人审批方式 0或签 1会签")
    private Integer approveType;
    @ApiModelProperty(value = "是否指定司机项 0不指定 1指定", example = "1")
    @ExcelColumn(name="是否指定司机项 0不指定 1指定")
    private Integer driverParam;
    @ApiModelProperty(value = "是否修改目的地 0否 1是", example = "1")
    @ExcelColumn(name="是否修改目的地 0否 1是")
    private Integer addrParam;
    @ApiModelProperty(value = "关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约", example = "1")
    @ExcelColumn(name="关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约")
    private Integer objType;
    @ApiModelProperty(value = "类型 0审批 1抄送", example = "1")
    @ExcelColumn(name="类型 0审批 1抄送")
    private Integer type;
    @ApiModelProperty(value = "姓名", example = "1")
    @ExcelColumn(name="姓名")
    @TableField(exist = false)
    private String memberName;
    @ApiModelProperty(value = "手机号", example = "1")
    @ExcelColumn(name="手机号")
    @TableField(exist = false)
    private String memberPhone;
    @ApiModelProperty(value = "部门", example = "1")
    @ExcelColumn(name="部门")
    @TableField(exist = false)
    private String companyName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
@@ -71,6 +71,15 @@
    @ApiModelProperty(value = "审批人编码,多个用英文逗号隔开")
    @ExcelColumn(name="审批人编码,多个用英文逗号隔开")
    private String objIds;
    @ApiModelProperty(value = "模版Id")
    @ExcelColumn(name="模版Id")
    private Integer templId;
    @ApiModelProperty(value = "是否指定司机项 0否 1是")
    @ExcelColumn(name="是否指定司机项 0否 1是")
    private Integer driverParam;
    @ApiModelProperty(value = "是否修改目的地 0否 1是")
    @ExcelColumn(name="是否修改目的地 0否 1是")
    private Integer addrParam;
    @ApiModelProperty(value = "审批主管等级 0直接主管 1二级主管 2三级主管 4四级主管", example = "1")
    @ExcelColumn(name="审批主管等级 0直接主管 1二级主管 2三级主管 4四级主管")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
@@ -10,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * å®¡æ‰¹æ¨¡ç‰ˆä¿¡æ¯è¡¨
@@ -60,4 +62,8 @@
    @ExcelColumn(name="名称")
    private String name;
    @ApiModelProperty(value = "审批模版配置明细集合")
    @TableField(exist = false)
    private List<ApproveParam> paramList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -93,13 +93,11 @@
    @ApiModelProperty(value = "取消类型 0申请人取消 1派车员撤销")
    @ExcelColumn(name="取消类型 0申请人取消 1派车员撤销")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date cancelType;
    private Integer cancelType;
    @ApiModelProperty(value = "是否已取消 0未取消 1已取消")
    @ExcelColumn(name="是否已取消 0未取消 1已取消")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date cancelStatus;
    private Integer cancelStatus;
    @ApiModelProperty(value = "取消时间")
    @ExcelColumn(name="取消时间")
@@ -172,4 +170,7 @@
    @ApiModelProperty(value = "申请人电话")
    @TableField(exist = false)
    private String memberMobile;
    @ApiModelProperty(value = "审批记录")
    @TableField(exist = false)
    private List<Approve> approveList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
@@ -4,6 +4,7 @@
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.system.model.Multifile;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.system.model.Multifile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -122,6 +123,15 @@
    @ApiModelProperty(value = "查询截止始时间(基于提报时间)", example = "2024-05-20 11:48:46")
    @TableField(exist = false)
    private Date queryEndTime;
    @ApiModelProperty(value = "现场情况提报附件集合")
    @TableField(exist = false)
    private List<Multifile> submitFileList;
    @ApiModelProperty(value = "处理前附件集合")
    @TableField(exist = false)
    private List<Multifile> dealBeforeFileList;
    @ApiModelProperty(value = "处理后附件集合")
    @TableField(exist = false)
    private List<Multifile> dealAfterFileList;
    @ApiModelProperty(value = "提报时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -76,7 +76,7 @@
    private String imgurl;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客  2内部人员", example = "1")
    @ExcelColumn(name="类型 0劳务访客 1普通访客  2内部人员")
    @ExcelColumn(name="类型 0劳务访客 1普通访客 2内部人员")
    private Integer type;
    @ApiModelProperty(value = "访客名称/内部人员")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -104,4 +104,6 @@
     * @return
     */
    InternalHomeVO getHomeData(Integer memberId);
    void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.ApproveTempl;
@@ -25,7 +26,7 @@
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id, LoginUserInfo user);
    /**
     * åˆ é™¤
@@ -39,7 +40,7 @@
     *
     * @param ids ä¸»é”®é›†
     */
    void deleteByIdInBatch(List<Integer> ids);
    void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user);
    /**
     * ä¸»é”®æ›´æ–°
@@ -94,4 +95,6 @@
     * @return long
     */
    long count(ApproveTempl approveTempl);
    int save(ApproveTempl approveTempl);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.CarUseBook;
@@ -101,4 +102,6 @@
    List<CarUseBook> carUseBookList(CarUseBook carUseBook);
    List<DateIntervalVO> checkDateUse(Integer cars, String dateDay);
    void revoke(Integer id, String info, LoginUserInfo loginUserInfo);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -7,6 +7,7 @@
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.request.MemberQuery;
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.dto.RegisterDriverDTO;
import com.doumee.dao.business.dto.ResetPasswordDTO;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.MemberRole;
@@ -161,6 +162,11 @@
    void memberFreeze();
    /********************************************公众号接口***********************************************************************/
    /**
     * å¸æœºæ³¨å†Œ
     * @param registerDriverDTO
     */
    void registerDriver(RegisterDriverDTO registerDriverDTO);
    /**
     * å¾®ä¿¡æŽˆæƒæŽ¥å£
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
@@ -94,4 +94,6 @@
     * @return long
     */
    long count(PlatformInterfaceLog platformInterfaceLog);
    void clearThreeMonthLog();
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1,23 +1,31 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.ApproveMapper;
import com.doumee.dao.business.model.Approve;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.response.InternalHomeVO;
import com.doumee.service.business.ApproveService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * å®¡æ‰¹ä¿¡æ¯è®°å½•表Service实现
@@ -32,6 +40,24 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private ApproveTemplMapper approveTemplMapper;
    @Autowired
    private ApproveParamMapper approveParamMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private CarUseBookMapper carUseBookMapper;
    @Autowired
    private CarDriverMapper carDriverMapper;
    @Override
    public Integer create(Approve approve) {
@@ -189,10 +215,214 @@
    }
    /**
     * åˆ›å»ºå®¡æ‰¹æµç¨‹
     * @param tempType æ¨¡æ¿ç±»åž‹  0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约
     * @param businessId ä¸šåС䏻键 æ ¹æ® tempType
     * @param createMemberId æäº¤æµç¨‹äººå‘˜
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId){
        //查询处理模板
        ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
                .eq(ApproveTempl::getType,tempType)
                .eq(ApproveTempl::getIsdeleted,Constants.ZERO)
                .last(" limit 1 ")
        );
        if(Objects.isNull(approveTempl)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到配置模板");
        }
        //查询配置流程
        List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>()
                .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO)
                .eq(ApproveParam::getTemplId,approveTempl.getId())
                .orderByAsc(ApproveParam::getType)
                .orderByAsc(ApproveParam::getLevel)
        );
        if(Objects.isNull(approveParamAllList)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未配置审批流程");
        }
        //审批配置
        List<ApproveParam> approveParamList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList());
        if(Objects.isNull(approveParamList)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未配置审批流程");
        }
        List<ApproveParam> approveCopyList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList());
        Member createMember = memberMapper.selectById(createMemberId);
        if(Objects.isNull(createMember)|| Objects.isNull(createMember.getCompanyId())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"申请人组织信息异常");
        }
        List<Approve> approveList = new ArrayList<>();
        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(approveList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误");
        }
        //处理抄送数据
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(approveCopyList)){
            this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList);
        }
        approveMapper.insertBatchSomeColumn(approveList);
    }
    /**
     * ç»„织审批流数据
     * @param approveTempl
     * @param approveParamList
     * @param createMember
     * @param businessId
     * @param approveList
     */
    public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Integer businessId,List<Approve> approveList){
        //审批业务数据
        for (int i = 0; i < approveParamList.size(); i++) {
            ApproveParam approveParam = approveParamList.get(i);
            List<Integer> ids = this.getApproveUserIds(approveParam,createMember);
            for (Integer memberId:ids) {
                Approve approve = new Approve();
                approve.setCreateDate(new Date());
                approve.setIsdeleted(Constants.ZERO);
                approve.setTemplatId(approveTempl.getId());
                approve.setChekorId(memberId);
                approve.setStatus(Constants.ZERO);
                approve.setStatusInfo("待审批");
                approve.setIsEndCheck((i+1) == approveParamList.size()?Constants.ONE:Constants.ZERO);
                approve.setObjId(businessId);
                approve.setLevel(i+1);
                approve.setApproveType(approveParam.getApproveType());
                approve.setDriverParam(approveParam.getDriverParam());
                approve.setAddrParam(approveParam.getAddrParam());
                approve.setType(Constants.ZERO);
                approveList.add(approve);
            }
        }
    }
    public void organizeApproveCopyData(ApproveTempl approveTempl,List<ApproveParam> approveCopyList,Integer businessId,List<Approve> approveList){
        for (ApproveParam approveParam:approveCopyList) {
            if(StringUtils.isBlank(approveParam.getObjIds())){
                return;
            }
            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .eq(Member::getWorkStatus,Constants.ZERO)
                    .in(Member::getId,approveParam.getObjIds().split(",")));
            List<Integer> userIds = new ArrayList<>();
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
                userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
            }
            //公务用车 é»˜è®¤åŠ å…¥ å¸æœºæŠ„送
            if(approveTempl.getType()==Constants.THREE||approveTempl.getType()==Constants.FOUR){
                CarUseBook carUseBook = carUseBookMapper.selectById(businessId);
                if(Objects.isNull(carUseBook)){
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"为查询到用车申请信息");
                }
                CarDriver carDriver = carDriverMapper.selectById(carUseBook.getDriverId());
                if(Objects.isNull(carDriver)){
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"为查询到司机信息");
                }
                userIds.add(carDriver.getMemberId());
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(userIds)){
                for (Integer memberId:userIds) {
                    Approve approve = new Approve();
                    approve.setCreateDate(new Date());
                    approve.setIsdeleted(Constants.ZERO);
                    approve.setTemplatId(approveTempl.getId());
                    approve.setChekorId(memberId);
                    approve.setObjId(businessId);
                    approve.setType(Constants.ONE);
                    approveList.add(approve);
                }
            }
        }
    }
    public List<Integer> getApproveUserIds(ApproveParam approveParam,Member createMember){
        List<Integer> userIds = new ArrayList<>();
        if(approveParam.getMemberType().equals(Constants.ZERO)){
            //申请人
            userIds.add(createMember.getId());
        }else if(approveParam.getMemberType().equals(Constants.ONE)){
            //指定人员
            if(StringUtils.isBlank(approveParam.getObjIds())){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"审批流配置错误[未配置指定审批人员]");
            }
            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .in(Member::getId,approveParam.getObjIds().split(",")));
            if(memberList.size()!=approveParam.getObjIds().split(",").length){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批人员信息异常]");
            }
            userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
        }else if(approveParam.getMemberType().equals(Constants.TWO)){
            //部门主管审批
            //审批部门
            Company memberCompany = companyMapper.selectById(createMember.getCompanyId());
            if(Objects.isNull(memberCompany)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]");
            }
            Company auditCompany = this.getAuditCompanyHead(memberCompany.getParentId(),approveParam.getObjLevel());
            if(Objects.isNull(auditCompany)){
                //审批部门为空 è‡ªåŠ¨æµè½¬ä¸‹ä¸€çº§å®¡æ‰¹é…ç½®
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]");
            }else{
                //查询部门负责人
                Member headMember = memberMapper.selectById(auditCompany.getHeadId());
                if(Objects.isNull(headMember)){
                    //未查询到部门负责人  æ ¹æ®é…ç½®å¤„理   ç”±ä¸Šçº§ä¸»ç®¡ä»£æ›¿å®¡æ ¸/直接结束流程
                    if(approveParam.getNoleaderOpt().equals(Constants.ONE)&&!Objects.isNull(auditCompany.getParentId())){
                        auditCompany = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getId,auditCompany.getParentId()));
                        //无父级 ç›´æŽ¥æµä¼ ä¸‹ä¸€çº§å®¡æ‰¹
                        if(Objects.isNull(auditCompany)){
                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未查询到]");
                        }
                        headMember = memberMapper.selectById(auditCompany.getHeadId());
                        if(Objects.isNull(headMember)){
                            //查询部门负责人 ä¸ºç©º è‡ªåŠ¨æµè½¬ä¸‹ä¸€çº§å®¡æ‰¹é…ç½®
                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误[指定审批部门未设置负责人]");
                        }else{
                            //添加审批人
                            userIds.add(headMember.getId());
                        }
                    }else{
                        //添加审批人
                        userIds.add(headMember.getId());
                    }
                }
            }
        }
        return userIds;
    }
    /**
     * æ ¹æ®é…ç½®æŸ¥è¯¢ä¸Šçº§æ•°æ®
     * @param companyId çˆ¶çº§éƒ¨é—¨ä¸»é”®
     * @param objLevel  æŸ¥è¯¢çº§åˆ«
     */
    public Company getAuditCompanyHead(Integer companyId, Integer objLevel){
        Integer queryLevel = Constants.ZERO;
        Company auditCompany =  companyMapper.selectById(companyId);
        while(queryLevel.equals(objLevel)){
            auditCompany = companyMapper.selectById(auditCompany.getParentId());
            if(Objects.isNull(auditCompany)){
                return null;
            }
            queryLevel = queryLevel + 1;
        }
        return auditCompany;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
@@ -7,11 +7,10 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.ApproveParamMapper;
import com.doumee.dao.business.ApproveTemplMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.ApproveTempl;
import com.doumee.dao.business.model.CarDriver;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.ApproveTemplService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -20,6 +19,7 @@
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
@@ -36,7 +36,58 @@
    @Autowired
    private ApproveTemplMapper approveTemplMapper;
    @Autowired
    private ApproveParamMapper approveParamMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public int save(ApproveTempl model) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo == null){
            loginUserInfo = model.getLoginUserInfo();
        }
        if(model.getType() == null || Constants.ApproveTmplType.getName(model.getType()) == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        ApproveTempl template = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
                .eq(ApproveTempl::getType,model.getType() )
                .eq(ApproveTempl::getIsdeleted,Constants.ZERO)
                .last("limit 1"));
        Date date =new Date();
        if(template == null){
            //如果模版没有,则新增
            template = new ApproveTempl();
            template.setType(model.getType());
            template.setCreateDate(date);
            template.setCreator(loginUserInfo.getId());
            template.setEditDate(date);
            template.setIsdeleted(Constants.ZERO);
            template.setEditor(loginUserInfo.getId());
            template.setName(Constants.ApproveTmplType.getName(model.getType()));
            approveTemplMapper.insert(template);
        }
        if(model.getParamList()!=null && model.getParamList().size()>0){
            for(ApproveParam param : model.getParamList()){
                param.setCreateDate(date);
                param.setCreator(loginUserInfo.getId());
                param.setEditDate(date);
                param.setEditor(loginUserInfo.getId());
                param.setIsdeleted(Constants.ZERO);
                param.setTemplId(template.getId());
                param.setType(Constants.formatIntegerNum(param.getType()));
                param.setAddrParam(Constants.formatIntegerNum(param.getAddrParam()));
                param.setDriverParam(Constants.formatIntegerNum(param.getDriverParam()));
                param.setApproveType(Constants.formatIntegerNum(param.getApproveType()));
            }
            //先清除原来所有的就陪配置
            approveParamMapper.delete(new UpdateWrapper<ApproveParam>().lambda()
                    .eq(ApproveParam::getTemplId,template.getId()));
            //批量插入新的配置
            approveParamMapper.insertBatchSomeColumn(model.getParamList());
        }
        return model.getId();
    }
    @Override
    public Integer create(ApproveTempl model) {
@@ -45,8 +96,13 @@
    }
    @Override
    public void deleteById(Integer id) {
        approveTemplMapper.deleteById(id);
    public void deleteById(Integer id, LoginUserInfo userInfo) {
        ApproveTempl model = new ApproveTempl();
        model.setEditDate(new Date());
        model.setEditor(userInfo.getId());
        model.setId(id);
        model.setIsdeleted(Constants.ONE);
        approveTemplMapper.updateById(model);
    }
    @Override
@@ -56,11 +112,13 @@
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
    public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        approveTemplMapper.deleteBatchIds(ids);
        for(Integer id:ids){
            deleteById(id,user);
        }
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -10,12 +10,15 @@
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.ApproveMapper;
import com.doumee.dao.business.CarUseBookMapper;
import com.doumee.dao.business.CarsMapper;
import com.doumee.dao.business.join.ApproveJoinMapper;
import com.doumee.dao.business.join.CarUseBookJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.DateIntervalVO;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.service.business.ApproveService;
import com.doumee.service.business.CarUseBookService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -56,6 +59,12 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private ApproveJoinMapper approveJoinMapper;
    @Autowired
    private ApproveService approveService;
    @Override
@@ -103,6 +112,8 @@
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在车辆预约时间与已预约时间冲突~");
        }
        carUseBookMapper.insert(carUseBook);
        //用车申请 å®¡æ‰¹è®°å½•创建
        approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId());
        return carUseBook.getId();
    }
@@ -155,6 +166,21 @@
                .eq(CarUseBook::getId,id)
                .last("limit 1"  );
        CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
        //审批记录
       List<Approve> approveList = approveJoinMapper.selectJoinList(Approve.class,
                new MPJLambdaWrapper<Approve>()
                        .selectAll(Approve.class)
                        .selectAs(Member::getName,Approve::getMemberName)
                        .selectAs(Member::getPhone,Approve::getMemberPhone)
                        .selectAs(Company::getName,Approve::getCompanyName)
                        .leftJoin(Member.class,Member::getId,Approve::getChekorId)
                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                        .eq(Approve::getIsdeleted,Constants.ZERO)
                        .eq(Approve::getObjType,Constants.ONE)
                        .eq(Approve::getObjId,id)
                        .orderByAsc(Approve::getLevel)
        );
       model.setApproveList(approveList);
        return  model;
    }
@@ -207,10 +233,8 @@
                .le(pageWrap.getModel().getCheckDate() != null, CarUseBook::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()))
                .eq(pageWrap.getModel().getCheckUserId() != null, CarUseBook::getCheckUserId, pageWrap.getModel().getCheckUserId())
                .eq(pageWrap.getModel().getCheckInfo() != null, CarUseBook::getCheckInfo, pageWrap.getModel().getCheckInfo())
                .ge(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getStart(pageWrap.getModel().getCancelType()))
                .le(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getEnd(pageWrap.getModel().getCancelType()))
                .ge(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getStart(pageWrap.getModel().getCancelStatus()))
                .le(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getEnd(pageWrap.getModel().getCancelStatus()))
                .eq(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType,  pageWrap.getModel().getCancelType())
                .eq(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, pageWrap.getModel().getCancelStatus())
                .ge(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getStart(pageWrap.getModel().getCancelTime()))
                .le(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getEnd(pageWrap.getModel().getCancelTime()))
                .eq(pageWrap.getModel().getCancelUser() != null, CarUseBook::getCancelUser, pageWrap.getModel().getCancelUser())
@@ -377,11 +401,30 @@
    }
    public void revoke(Integer id, LoginUserInfo loginUserInfo){
    @Override
    public void revoke(Integer id, String info, LoginUserInfo loginUserInfo){
       CarUseBook carUseBook = carUseBookMapper.selectById(id);
       if(Objects.isNull(carUseBook)){
           throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到用车申请信息");
       }
       carUseBook.setCancelInfo(info);
       carUseBook.setCancelTime(new Date());
       carUseBook.setCancelStatus(Constants.ONE);
       carUseBook.setStatus(Constants.FOUR);
       carUseBook.setCancelUser(loginUserInfo.getId());
       carUseBook.setCancelType(Constants.ONE);
       if(loginUserInfo.getId().equals(carUseBook.getCreator())){
           carUseBook.setCancelType(Constants.ZERO);
       }
       carUseBookMapper.updateById(carUseBook);
       //处理审批记录
       approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                .lambda()
                .set(Approve::getStatus,Constants.FOUR)
                .set(Approve::getCheckInfo,"用车申请取消")
                .in(Approve::getStatus,Constants.ZERO,Constants.ONE)
                .eq(Approve::getObjId,id)
        );
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
@@ -78,6 +78,7 @@
        model.setEditDate(new Date());
        model.setEditor(loginUserInfo.getId());
        model.setStatus(Constants.ZERO);
        model.setIsdeleted(Constants.ZERO);
        hiddenDangerParamMapper.insert(model);
        return model.getId();
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -1,40 +1,30 @@
package com.doumee.service.business.impl;
import cn.emay.sdk.util.StringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.HiddenDangerMapper;
import com.doumee.dao.business.HiddenDangerParamMapper;
import com.doumee.dao.business.model.HiddenDanger;
import com.doumee.dao.business.model.HiddenDangerParam;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.service.business.HiddenDangerParamService;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.service.business.HiddenDangerService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
 * é𐿂£ä¿¡æ¯è¡¨Service实现
@@ -47,13 +37,15 @@
    @Autowired
    private HiddenDangerMapper hiddenDangerMapper;
    @Autowired
    private MultifileMapper multifileMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private HiddenDangerParamMapper hiddenDangerParamMapper;
    @Autowired
    private MultifileMapper multifileMapper;
    @Override
    public Integer create(HiddenDanger hiddenDanger) {
@@ -134,9 +126,67 @@
    @Override
    public HiddenDanger findById(Integer id) {
        return hiddenDangerMapper.selectById(id);
    }
        MPJLambdaWrapper<HiddenDanger> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(HiddenDanger.class)
                .selectAs(HiddenDangerParam::getName,HiddenDanger::getCategoryName)
                .select("t1.name", HiddenDanger::getMemberName)
                .select("t1.phone",HiddenDanger::getMemberPhone)
                .select("t2.name",HiddenDanger::getCheckorName)
                .select("t3.phone",HiddenDanger::getCheckorPhone)
                .select("t4.company_name_path",HiddenDanger::getCompanyName);
        queryWrapper.leftJoin(Member.class,Member::getId,HiddenDanger::getMemberId)
                .leftJoin("company t4 on t1.company_id=t4.id")
                .leftJoin(Member.class,Member::getId,HiddenDanger::getCheckUserId)
                .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getCateId);
        queryWrapper
                .eq(HiddenDanger::getId, id).last("limit 1");
        HiddenDanger model =  hiddenDangerMapper.selectJoinOne(HiddenDanger.class,queryWrapper);
        if(model ==null || Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        initFiles(model);
        return model;
    }
    private void initFiles(HiddenDanger unionChange) {
        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId, unionChange.getId() )
                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.HIDDEN_DANGER_SUBMIT.getKey()
                        ,Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey()
                        ,Constants.MultiFile.HIDDEN_DANGER_DEAL_AFTER.getKey()}))
                .eq(Multifile::getIsdeleted,Constants.ZERO));
        if(multifiles!=null){
            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.HIDDEN_DANGER_FILE).getCode();
            for(Multifile f : multifiles){
                if(StringUtils.isBlank(f.getFileurl())){
                    continue;
                }
                f.setFileurlFull(path+f.getFileurl());
                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_SUBMIT.getKey())){
                    //现场情况
                    if(unionChange.getSubmitFileList() == null){
                        unionChange.setSubmitFileList(new ArrayList<>());
                    }
                    unionChange.getSubmitFileList().add(f);
                }
                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey())){
                    //处理前附件
                    if(unionChange.getDealBeforeFileList() == null){
                        unionChange.setDealBeforeFileList(new ArrayList<>());
                    }
                    unionChange.getDealBeforeFileList().add(f);
                }
                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_DEAL_AFTER.getKey())){
                    //处理后附件
                    if(unionChange.getDealAfterFileList() == null){
                        unionChange.setDealAfterFileList(new ArrayList<>());
                    }
                    unionChange.getDealAfterFileList().add(f);
                }
            }
        }
    }
    @Override
    public HiddenDanger findOne(HiddenDanger hiddenDanger) {
        QueryWrapper<HiddenDanger> wrapper = new QueryWrapper<>(hiddenDanger);
@@ -186,6 +236,7 @@
                .eq(pageWrap.getModel().getChecklInfo() != null, HiddenDanger::getChecklInfo, pageWrap.getModel().getChecklInfo())
                .eq(pageWrap.getModel().getCheckUserId() != null, HiddenDanger::getCheckUserId, pageWrap.getModel().getCheckUserId())
                .eq(pageWrap.getModel().getAreaName() != null, HiddenDanger::getAreaName, pageWrap.getModel().getAreaName())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                        .or().like(Member::getPhone,pageWrap.getModel().getMemberName()))
                .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), Empower::getCreateDate,pageWrap.getModel().getQueryStartTime())
@@ -199,7 +250,7 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(hiddenDangerMapper.selectPage(page, queryWrapper));
        return PageData.from(hiddenDangerMapper.selectJoinPage(page,HiddenDanger.class, queryWrapper));
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
@@ -1,7 +1,9 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.InterfaceLogMapper;
import com.doumee.dao.business.model.InterfaceLog;
@@ -26,6 +28,8 @@
    @Autowired
    private InterfaceLogMapper interfaceLogMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public Integer create(InterfaceLog interfaceLog) {
@@ -157,8 +161,11 @@
    }
    @Override
    public void clearThreeMonthLog() {
         int days =15;
         try {
             days = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HK_LOG_DEL_DAYS_LIMIT).getCode());
         }catch (Exception e){}
          interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda()
                  .apply("to_days(create_date)+15 < to_days(now())")
                  .like(InterfaceLog::getUrl,"/artemis/api/"));
                  .apply("to_days(create_date)+"+days+" < to_days(now())") );
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -34,6 +34,7 @@
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dto.RegisterDriverDTO;
import com.doumee.dao.business.dto.ResetPasswordDTO;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.join.RetentionJoinMapper;
@@ -48,6 +49,7 @@
import com.doumee.dao.web.response.MemberVO;
import com.doumee.dao.web.response.WxAuthorizeVO;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.SmsEmailService;
import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -119,6 +121,8 @@
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private SmsEmailService smsEmailService;
    @Value("${debug_model}")
    private Boolean isDebug;
@@ -1932,6 +1936,57 @@
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void registerDriver(RegisterDriverDTO registerDriverDTO){
        if(Objects.isNull(registerDriverDTO)
        || StringUtils.isBlank(registerDriverDTO.getName())
                || StringUtils.isBlank(registerDriverDTO.getPassword())
                || StringUtils.isBlank(registerDriverDTO.getValidCode())
                || StringUtils.isBlank(registerDriverDTO.getPhone())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getPhone,registerDriverDTO.getPhone())
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号已注册!");
        };
        if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
                .eq(SystemUser::getDeleted,Constants.ZERO)
                        .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号已注册!");
        };
        smsEmailService.validateCode(registerDriverDTO.getValidCode(),registerDriverDTO.getPhone());
        String salt = RandomStringUtils.randomAlphabetic(6);
       ;
        Member member = new Member();
        member.setCreateDate(new Date());
        member.setIsdeleted(Constants.ZERO);
        member.setType(Constants.TWO);
        member.setName(registerDriverDTO.getName());
        member.setPhone(registerDriverDTO.getPhone());
        member.setStatus(Constants.ZERO);
        member.setPassward(Utils.Secure.encryptPassword(registerDriverDTO.getPassword(), salt));
        memberMapper.insert(member);
        SystemUser systemUser = new SystemUser();
        systemUser.setCreateTime(new Date());
        systemUser.setDeleted(Boolean.FALSE);
        systemUser.setUsername(registerDriverDTO.getPhone());
        systemUser.setRealname(registerDriverDTO.getName());
        systemUser.setMemberId(member.getId());
        systemUser.setSalt(salt);
        systemUser.setPassword(member.getPassward());
        systemUser.setStatus(Constants.ZERO);
        systemUserMapper.insert(systemUser);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
@@ -1,9 +1,12 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.PlatformInterfaceLogMapper;
import com.doumee.dao.business.model.InterfaceLog;
import com.doumee.dao.business.model.PlatformInterfaceLog;
import com.doumee.service.business.PlatformInterfaceLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -23,6 +26,9 @@
 */
@Service
public class PlatformInterfaceLogServiceImpl implements PlatformInterfaceLogService {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private PlatformInterfaceLogMapper platformInterfaceLogMapper;
@@ -125,4 +131,13 @@
        QueryWrapper<PlatformInterfaceLog> wrapper = new QueryWrapper<>(platformInterfaceLog);
        return platformInterfaceLogMapper.selectCount(wrapper);
    }
    @Override
    public void clearThreeMonthLog() {
        int days =15;
        try {
            days = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.LOG_DEL_DAYS_LIMIT).getCode());
        }catch (Exception e){}
        platformInterfaceLogMapper.delete(new UpdateWrapper<PlatformInterfaceLog>().lambda()
                .apply("to_days(create_date)+"+days+" < to_days(now())"));
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -39,6 +39,7 @@
import com.doumee.dao.web.reqeust.VisitRecordDTO;
import com.doumee.dao.web.response.VisitDetailVO;
import com.doumee.dao.web.response.VisitRecordVO;
import com.doumee.service.business.ApproveService;
import com.doumee.service.business.InterfaceLogService;
import com.doumee.service.business.SmsEmailService;
import com.doumee.service.business.VisitsService;
@@ -104,6 +105,8 @@
    private SmsEmailService smsEmailService;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private ApproveService approveService;
    @Override
@@ -237,6 +240,7 @@
        }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
            visits.setStatus(Constants.VisitStatus.pass);
            visitsMapper.updateById(visits);
            approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
        }else{
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!");
        }
@@ -490,7 +494,6 @@
                .eq(ApproveParam::getMemberType,Constants.ZERO)
                .last("limit 1"));
         return  Objects.isNull(approveParam)?null:approveParam.getId();
    }
@@ -1356,8 +1359,6 @@
        dto.setId(systemUser.getId());
        dto.setOperaUserId(systemUser.getId());
        systemUserBiz.resetPwd(dto);
    }
}