commit 9b4916ef93a52788a175f0feaf4c54a717713a57 Author: liaowei <532810027@qq.com> Date: Fri Sep 6 19:15:39 2024 +0800 第一次提交招聘系统前端代码 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7034f9b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..e7932ba --- /dev/null +++ b/.env.development @@ -0,0 +1,11 @@ +# 页面标题 +VUE_APP_TITLE = ZeroErrOA系统 + +# 开发环境配置 +ENV = 'development' + +# ZeroErrOA系统/开发环境 +VUE_APP_BASE_API = '/dev-api' + +# 路由懒加载 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..d9cbd2c --- /dev/null +++ b/.env.production @@ -0,0 +1,8 @@ +# 页面标题 +VUE_APP_TITLE = ZeroErrOA系统 + +# 生产环境配置 +ENV = 'production' + +# ZeroErrOA系统/生产环境 +VUE_APP_BASE_API = '/prod-api' diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..990b496 --- /dev/null +++ b/.env.staging @@ -0,0 +1,10 @@ +# 页面标题 +VUE_APP_TITLE = ZeroErrOA系统 + +NODE_ENV = production + +# 测试环境配置 +ENV = 'staging' + +# ZeroErrOA系统/测试环境 +VUE_APP_BASE_API = '/stage-api' diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..89be6f6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,10 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +*.js +# 忽略当前目录下为vue的文件的语法检查 +*.vue \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..82bbdee --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 检查配置 +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78a752d --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/README.md b/README.md new file mode 100644 index 0000000..be86d12 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# ZeroErrOA-Vue + +零差云控的oa系统前端代码 \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..08324b5 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,18 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset', + ["@babel/preset-env", { + "targets": { + "node": "current" + } + }] + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + 'plugins': ['dynamic-import-node','transform-vue-jsx'] + } + } +} \ No newline at end of file diff --git a/bin/build.bat b/bin/build.bat new file mode 100644 index 0000000..dda590d --- /dev/null +++ b/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run build:prod + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..0e5bc0f --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm install --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/bin/run-web.bat b/bin/run-web.bat new file mode 100644 index 0000000..d30deae --- /dev/null +++ b/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vue CLI Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run dev + +pause \ No newline at end of file diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..0c57de2 --- /dev/null +++ b/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/nginx.conf.default b/nginx.conf.default new file mode 100644 index 0000000..29bc085 --- /dev/null +++ b/nginx.conf.default @@ -0,0 +1,117 @@ + +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + server { + listen 80; + server_name localhost; + + #charset koi8-r; + + #access_log logs/host.access.log main; + + location / { + root html; + index index.html index.htm; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} + } + + + # another virtual host using mix of IP-, name-, and port-based configuration + # + #server { + # listen 8000; + # listen somename:8080; + # server_name somename alias another.alias; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + +} diff --git a/nohup.out b/nohup.out new file mode 100644 index 0000000..dd40989 --- /dev/null +++ b/nohup.out @@ -0,0 +1,4051 @@ +Application Version: 1.0.0 +Spring Boot Version: 2.5.15 +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 佛祖保佑 永不宕机 永无BUG // +//////////////////////////////////////////////////////////////////// +16:07:22.861 [main] INFO c.z.RuoYiApplication - [logStarting,55] - Starting RuoYiApplication using Java 1.8.0_412 on centos with PID 3368 (/home/java/zeroerr_oa-admin.jar started by root in /home/java) +16:07:22.864 [main] DEBUG c.z.RuoYiApplication - [logStarting,56] - Running with Spring Boot v2.5.15, Spring v5.3.33 +16:07:22.865 [main] INFO c.z.RuoYiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "druid" +16:07:22.867 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +16:07:27.260 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8080"] +16:07:27.261 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +16:07:27.261 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.75] +16:07:27.348 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +16:07:28.159 [main] DEBUG c.z.f.s.f.JwtAuthenticationTokenFilter - [init,242] - Filter 'jwtAuthenticationTokenFilter' configured for use +Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/RecruitStructureMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysConfigMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysDeptMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysDictDataMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysDictTypeMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysLogininforMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysMenuMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysNoticeMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysOperLogMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysPostMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysRoleDeptMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysRoleMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysRoleMenuMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysUserMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysUserPostMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysUserRoleMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-quartz-3.8.7.jar!/mapper/quartz/SysJobLogMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-quartz-3.8.7.jar!/mapper/quartz/SysJobMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-generator-3.8.7.jar!/mapper/generator/GenTableColumnMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-generator-3.8.7.jar!/mapper/generator/GenTableMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/PostPlanFollowMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/RecruitPostMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/RecruitProcessTaskMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/RecruitProcessTaskNodeMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/ResumeFollowRecordMapper.xml]' +This "id" is the table primary key by default name for `id` in Class: "cn.zeroerr.domain.entity.ResumeHandleRecord",So @TableField will not work! +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/ResumeHandleRecordMapper.xml]' + _ _ |_ _ _|_. ___ _ | _ +| | |\/|_)(_| | |_\ |_)||_|_\ + / | + 3.4.0 +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16fdec90] was not registered for synchronization because synchronization is not active +16:07:30.699 [main] INFO c.a.d.p.DruidDataSource - [init,1009] - {dataSource-1} inited +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config +==> Parameters: +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 1, 主框架页-默认皮肤样式名称, sys.index.skinName, skin-blue, Y, admin, 2024-05-09 11:03:14, , null, 蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow +<== Row: 2, 用户管理-账号初始密码, sys.user.initPassword, 123456, Y, admin, 2024-05-09 11:03:14, , null, 初始化密码 123456 +<== Row: 3, 主框架页-侧边栏主题, sys.index.sideTheme, theme-dark, Y, admin, 2024-05-09 11:03:14, , null, 深色主题theme-dark,浅色主题theme-light +<== Row: 4, 账号自助-验证码开关, sys.account.captchaEnabled, false, Y, admin, 2024-05-09 11:03:14, admin, 2024-05-24 15:25:01, 是否开启验证码功能(true开启,false关闭) +<== Row: 5, 账号自助-是否开启用户注册功能, sys.account.registerUser, false, Y, admin, 2024-05-09 11:03:14, , null, 是否开启注册用户功能(true开启,false关闭) +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 6 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16fdec90] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@710b30ef] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark from sys_dict_data WHERE status = ? order by dict_sort asc +==> Parameters: 0(String) +<== Columns: dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark +<== Row: 1, 1, 男, 0, sys_user_sex, , , Y, 0, admin, 2024-05-09 11:03:14, 性别男 +<== Row: 4, 1, 显示, 0, sys_show_hide, , primary, Y, 0, admin, 2024-05-09 11:03:14, 显示菜单 +<== Row: 6, 1, 正常, 0, sys_normal_disable, , primary, Y, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 8, 1, 正常, 0, sys_job_status, , primary, Y, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 10, 1, 默认, DEFAULT, sys_job_group, , , Y, 0, admin, 2024-05-09 11:03:14, 默认分组 +<== Row: 12, 1, 是, Y, sys_yes_no, , primary, Y, 0, admin, 2024-05-09 11:03:14, 系统默认是 +<== Row: 14, 1, 通知, 1, sys_notice_type, , warning, Y, 0, admin, 2024-05-09 11:03:14, 通知 +<== Row: 16, 1, 正常, 0, sys_notice_status, , primary, Y, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 19, 1, 新增, 1, sys_oper_type, , info, N, 0, admin, 2024-05-09 11:03:14, 新增操作 +<== Row: 28, 1, 成功, 0, sys_common_status, , primary, N, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 100, 1, 部门, 0, recruit_structure_type, null, default, N, 0, admin, 2024-05-11 19:39:02, 新增的节点属于部门 +<== Row: 103, 1, 审批中, process, recruit_process_status, null, primary, N, 0, admin, 2024-05-16 10:48:15, 招聘申请审批中 +<== Row: 107, 1, 猎头, 1, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:42:54, null +<== Row: 114, 1, 扩大编制, 1, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:00, null +<== Row: 118, 1, 无需, 1, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:48:30, null +<== Row: 124, 1, 男, 1, recruit_process_sex, null, info, N, 0, admin, 2024-05-17 11:35:35, null +<== Row: 126, 1, 专科, 1, recruit_process_education, null, info, N, 0, admin, 2024-05-17 11:46:06, null +<== Row: 129, 1, 个人简历, 1, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:21, null +<== Row: 134, 1, 未修改, 1, recruit_process_edit, null, info, N, 0, admin, 2024-05-18 17:19:37, null +<== Row: 137, 1, 同意, approved, recruit_process_node_status, null, success, N, 0, admin, 2024-05-20 14:33:30, null +<== Row: 141, 1, 正在招聘, 0, recruit_post_status, null, primary, N, 0, admin, 2024-05-23 10:42:54, null +<== Row: 144, 1, 自投, 1, recruit_interview_source, null, primary, N, 0, admin, 2024-05-23 15:59:03, null +<== Row: 146, 1, A, 1, recruit_post_grade, null, danger, N, 0, admin, 2024-05-27 17:01:30, null +<== Row: 150, 1, Y, 1, recruit_interview_pass, null, success, N, 0, admin, 2024-05-31 15:27:13, null +<== Row: 152, 1, Y, 1, recruit_interview_phoneresult, null, success, N, 0, admin, 2024-05-31 16:49:14, null +<== Row: 158, 1, 未申请, 0, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 15:52:50, null +<== Row: 2, 2, 女, 1, sys_user_sex, , , N, 0, admin, 2024-05-09 11:03:14, 性别女 +<== Row: 5, 2, 隐藏, 1, sys_show_hide, , danger, N, 0, admin, 2024-05-09 11:03:14, 隐藏菜单 +<== Row: 7, 2, 停用, 1, sys_normal_disable, , danger, N, 0, admin, 2024-05-09 11:03:14, 停用状态 +<== Row: 9, 2, 暂停, 1, sys_job_status, , danger, N, 0, admin, 2024-05-09 11:03:14, 停用状态 +<== Row: 11, 2, 系统, SYSTEM, sys_job_group, , , N, 0, admin, 2024-05-09 11:03:14, 系统分组 +<== Row: 13, 2, 否, N, sys_yes_no, , danger, N, 0, admin, 2024-05-09 11:03:14, 系统默认否 +<== Row: 15, 2, 公告, 2, sys_notice_type, , success, N, 0, admin, 2024-05-09 11:03:14, 公告 +<== Row: 17, 2, 关闭, 1, sys_notice_status, , danger, N, 0, admin, 2024-05-09 11:03:14, 关闭状态 +<== Row: 20, 2, 修改, 2, sys_oper_type, , info, N, 0, admin, 2024-05-09 11:03:14, 修改操作 +<== Row: 29, 2, 失败, 1, sys_common_status, , danger, N, 0, admin, 2024-05-09 11:03:14, 停用状态 +<== Row: 101, 2, 岗位, 1, recruit_structure_type, null, default, N, 0, admin, 2024-05-11 19:39:28, 新增的节点属于岗位 +<== Row: 104, 2, 撤销, cancel, recruit_process_status, null, warning, N, 0, admin, 2024-05-16 10:48:37, 招聘申请被撤销 +<== Row: 108, 2, BOSS直聘, 2, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:14, null +<== Row: 115, 2, 储备人力, 2, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:11, null +<== Row: 119, 2, 1年以上, 2, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:48:39, null +<== Row: 125, 2, 女, 0, recruit_process_sex, null, info, N, 0, admin, 2024-05-17 11:35:46, null +<== Row: 127, 2, 本科, 2, recruit_process_education, null, primary, N, 0, admin, 2024-05-17 11:46:29, null +<== Row: 130, 2, 身份证明, 2, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:34, null +<== Row: 135, 2, 已修改, 2, recruit_process_edit, null, primary, N, 0, admin, 2024-05-18 17:20:20, null +<== Row: 138, 2, 驳回, refuse, recruit_process_node_status, null, warning, N, 0, admin, 2024-05-20 14:33:57, null +<== Row: 142, 2, 已招聘, 1, recruit_post_status, null, success, N, 0, admin, 2024-05-23 10:43:24, null +<== Row: 145, 2, 下载, 2, recruit_interview_source, null, primary, N, 0, admin, 2024-05-23 15:59:13, null +<== Row: 147, 2, B, 2, recruit_post_grade, null, warning, N, 0, admin, 2024-05-27 17:02:10, null +<== Row: 151, 2, N, 0, recruit_interview_pass, null, danger, N, 0, admin, 2024-05-31 15:27:28, null +<== Row: 153, 2, N, 2, recruit_interview_phoneresult, null, danger, N, 0, admin, 2024-05-31 16:49:33, null +<== Row: 159, 2, 申请中, 1, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 15:53:35, null +<== Row: 3, 3, 未知, 2, sys_user_sex, , , N, 0, admin, 2024-05-09 11:03:14, 性别未知 +<== Row: 21, 3, 删除, 3, sys_oper_type, , danger, N, 0, admin, 2024-05-09 11:03:14, 删除操作 +<== Row: 102, 3, 其他, 2, recruit_structure_type, null, default, N, 0, admin, 2024-05-11 19:40:59, 各部门自己划分节点 +<== Row: 105, 3, 拒绝, refuse, recruit_process_status, null, danger, N, 0, admin, 2024-05-16 10:49:11, 招聘申请被拒绝 +<== Row: 109, 3, 猎聘, 3, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:27, null +<== Row: 116, 3, 离职补充, 3, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:20, null +<== Row: 123, 3, 2年以上, 3, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:49:49, null +<== Row: 128, 3, 研究生, 3, recruit_process_education, null, warning, N, 0, admin, 2024-05-17 11:46:52, null +<== Row: 131, 3, 学历证明, 3, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:43, null +<== Row: 136, 3, 正在修改, 3, recruit_process_edit, null, success, N, 0, admin, 2024-05-18 17:20:32, null +<== Row: 139, 3, 打回, repulse, recruit_process_node_status, null, info, N, 0, admin, 2024-05-20 14:34:19, null +<== Row: 143, 3, 取消招聘, 2, recruit_post_status, null, warning, N, 0, admin, 2024-05-23 10:43:43, null +<== Row: 148, 3, C, 3, recruit_post_grade, null, success, N, 0, admin, 2024-05-27 17:02:24, null +<== Row: 154, 3, 候选人N, 3, recruit_interview_phoneresult, null, warning, N, 0, admin, 2024-05-31 16:49:51, null +<== Row: 157, 3, -, 2, recruit_interview_pass, null, info, N, 0, admin, 2024-06-04 15:52:40, null +<== Row: 160, 3, 已招聘, 2, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 15:53:49, null +<== Row: 22, 4, 授权, 4, sys_oper_type, , primary, N, 0, admin, 2024-05-09 11:03:14, 授权操作 +<== Row: 106, 4, 同意, approved, recruit_process_status, null, success, N, 0, admin, 2024-05-16 10:49:49, 招聘申请已通过 +<== Row: 110, 4, 内部推荐, 4, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:44, null +<== Row: 117, 4, 短期需要, 4, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:38, null +<== Row: 120, 4, 3-5年, 4, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:48:48, null +<== Row: 132, 4, 技术职称证明, 4, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:57, null +<== Row: 149, 4, D, 4, recruit_post_grade, null, info, N, 0, admin, 2024-05-27 17:02:37, null +<== Row: 155, 4, 直接邀约, 4, recruit_interview_phoneresult, null, primary, N, 0, admin, 2024-05-31 16:50:17, null +<== Row: 161, 4, 招聘中, 3, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 16:32:39, null +<== Row: 23, 5, 导出, 5, sys_oper_type, , warning, N, 0, admin, 2024-05-09 11:03:14, 导出操作 +<== Row: 111, 5, 官网, 5, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:56, null +<== Row: 121, 5, 5年以上, 5, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:49:05, null +<== Row: 133, 5, 其他, 5, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:51:07, null +<== Row: 140, 5, 打回, repulse, recruit_process_status, null, info, N, 0, admin, 2024-05-20 14:41:41, 招聘申请已打回 +<== Row: 156, 5, 未接通, 5, recruit_interview_phoneresult, null, info, N, 0, admin, 2024-05-31 16:50:29, null +<== Row: 24, 6, 导入, 6, sys_oper_type, , warning, N, 0, admin, 2024-05-09 11:03:14, 导入操作 +<== Row: 112, 6, 公众号, 6, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:44:08, null +<== Row: 122, 6, 10年以上, 6, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:49:26, null +<== Row: 25, 7, 强退, 7, sys_oper_type, , danger, N, 0, admin, 2024-05-09 11:03:14, 强退操作 +<== Row: 113, 7, 校招, 7, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:44:19, null +<== Row: 26, 8, 生成代码, 8, sys_oper_type, , warning, N, 0, admin, 2024-05-09 11:03:14, 生成操作 +<== Row: 27, 9, 清空数据, 9, sys_oper_type, , danger, N, 0, admin, 2024-05-09 11:03:14, 清空操作 +<== Row: 18, 99, 其他, 0, sys_oper_type, , info, N, 0, admin, 2024-05-09 11:03:14, 其他操作 +<== Total: 91 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@710b30ef] +16:07:32.638 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1220] - Using default implementation for ThreadExecutor +16:07:32.657 [main] INFO o.q.c.SchedulerSignalerImpl - [,61] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +16:07:32.657 [main] INFO o.q.c.QuartzScheduler - [,229] - Quartz Scheduler v.2.3.2 created. +16:07:32.658 [main] INFO o.q.s.RAMJobStore - [initialize,155] - RAMJobStore initialized. +16:07:32.659 [main] INFO o.q.c.QuartzScheduler - [initialize,294] - Scheduler meta-data: Quartz Scheduler (v2.3.2) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +16:07:32.660 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1374] - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +16:07:32.660 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1378] - Quartz scheduler version: 2.3.2 +16:07:32.660 [main] INFO o.q.c.QuartzScheduler - [setJobFactory,2293] - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@3c5a54b7 +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a865416] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark from sys_job +==> Parameters: +<== Columns: job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark +<== Row: 1, 系统默认(无参), DEFAULT, ryTask.ryNoParams, 0/10 * * * * ?, 3, 1, 1, admin, 2024-05-09 11:03:14, +<== Row: 2, 系统默认(有参), DEFAULT, ryTask.ryParams('ry'), 0/15 * * * * ?, 3, 1, 1, admin, 2024-05-09 11:03:14, +<== Row: 3, 系统默认(多参), DEFAULT, ryTask.ryMultipleParams('ry', true, 2000L, 316.50D, 100), 0/20 * * * * ?, 3, 1, 1, admin, 2024-05-09 11:03:14, +<== Total: 3 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a865416] + + +,------. ,--. ,--. ,--. +| .--. ' ,--,--. ,---. ,---. | '--' | ,---. | | ,---. ,---. ,--.--. +| '--' | ' ,-. | | .-. | | .-. : | .--. | | .-. : | | | .-. | | .-. : | .--' +| | --' \ '-' | ' '-' ' \ --. | | | | \ --. | | | '-' ' \ --. | | +`--' `--`--' .`- / `----' `--' `--' `----' `--' | |-' `----' `--' + `---' `--' is intercepting. + +16:07:35.068 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-8080"] +16:07:36.003 [main] INFO o.q.c.QuartzScheduler - [start,547] - Scheduler quartzScheduler_$_NON_CLUSTERED started. +16:07:36.027 [main] INFO c.z.RuoYiApplication - [logStarted,61] - Started RuoYiApplication in 13.998 seconds (JVM running for 14.929) +(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ + .-------. ____ __ + | _ _ \ \ \ / / + | ( ' ) | \ _. / ' + |(_ o _) / _( )_ .' + | (_,_).' __ ___(_ o _)' + | |\ \ | || |(_,_)' + | | \ `' /| `-' / + | | \ / \ / + ''-' `'-' `-..-' +16:07:57.529 [http-nio-8080-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@651b6390] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@651b6390] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@118b5db2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: admin(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 1, 104, admin, root, marketingdirector@zeroerr.cn, /profile/avatar/2024/05/14/avatar_20240514190935A001.png, 13682553316, $2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2, 0, 0, 0, 192.168.1.105, 2024-06-11 11:40:48, admin, 2024-05-09 11:03:14, 管理员, 104, 100, 0,100, 市场部, 2, 庞总, 0, 1, 超级管理员, admin, 1, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@118b5db2] +16:08:04.786 [http-nio-8080-exec-2] ERROR c.z.f.w.e.GlobalExceptionHandler - [handleServiceException,59] - 用户不存在/密码错误 +cn.zeroerr.common.exception.ServiceException: 用户不存在/密码错误 + at cn.zeroerr.framework.web.service.SysLoginService.login(SysLoginService.java:89) + at cn.zeroerr.web.controller.system.SysLoginController.login(SysLoginController.java:48) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:903) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:809) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at cn.zeroerr.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:43) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at cn.zeroerr.framework.security.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:42) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) +16:08:04.794 [schedule-pool-1] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Error][用户不存在/密码错误] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@632a472d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 1(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 用户不存在/密码错误(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@632a472d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4037ebb7] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4037ebb7] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@fcd17fa] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: admin(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 1, 104, admin, root, marketingdirector@zeroerr.cn, /profile/avatar/2024/05/14/avatar_20240514190935A001.png, 13682553316, $2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2, 0, 0, 0, 192.168.1.105, 2024-06-11 11:40:48, admin, 2024-05-09 11:03:14, 管理员, 104, 100, 0,100, 市场部, 2, 庞总, 0, 1, 超级管理员, admin, 1, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@fcd17fa] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ecf3855] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.105(String), 2024-06-11 16:08:08.915(Timestamp), 1(Long) +16:08:08.927 [schedule-pool-1] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69d22c5d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.687, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.687}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69d22c5d] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ecf3855] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e33cfd8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e33cfd8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@29a901ce] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@29a901ce] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@398f916a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@398f916a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52057ad8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52057ad8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1032109] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1032109] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b6d1841] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b6d1841] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@134ffb84] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:07:30.691, closeCount=0, lastValidateTimeMillis=2024-06-11 16:07:30.691}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@134ffb84] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44031333] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44031333] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7309c4a7] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7309c4a7] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77a89063] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77a89063] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ce58e05] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ce58e05] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75299b52] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75299b52] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e8c62] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e8c62] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b915119] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b915119] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4698cf71] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and u.user_name = ? +==> Parameters: admin(String) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 1, 超级管理员, admin, 1, 1, 1, 1, 0, 0, 2024-05-09 11:03:14, 超级管理员 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4698cf71] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2fe4367d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select p.node_id, p.node_name from recruit_structure p left join sys_user_post up on up.post_id = p.node_id left join sys_user u on u.user_id = up.user_id where u.user_name = ? and p.type=1 +==> Parameters: admin(String) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2fe4367d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2cacedc3] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: update sys_user set avatar = ? where user_name = ? +==> Parameters: /profile/avatar/2024/06/11/工作台_20240611162421A001.png(String), admin(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2cacedc3] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18c29297] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: 用户头像(String), 2(Integer), cn.zeroerr.web.controller.system.SysProfileController.avatar()(String), POST(String), 1(Integer), admin(String), 市场部(String), /system/user/profile/avatar(String), 192.168.1.105(String), 内网IP(String), (String), {"msg":"操作成功","imgUrl":"/profile/avatar/2024/06/11/工作台_20240611162421A001.png","code":200}(String), 0(Integer), null, 139(Long) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18c29297] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@753549bc] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: update sys_user set avatar = ? where user_name = ? +==> Parameters: /profile/avatar/2024/06/11/公司logo_20240611162451A002.png(String), admin(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@753549bc] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d36b468] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: 用户头像(String), 2(Integer), cn.zeroerr.web.controller.system.SysProfileController.avatar()(String), POST(String), 1(Integer), admin(String), 市场部(String), /system/user/profile/avatar(String), 192.168.1.105(String), 内网IP(String), (String), {"msg":"操作成功","imgUrl":"/profile/avatar/2024/06/11/公司logo_20240611162451A002.png","code":200}(String), 0(Integer), null, 29(Long) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d36b468] +16:24:55.408 [schedule-pool-3] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Logout][退出成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@559c6e94] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 退出成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@559c6e94] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cb8b780] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cb8b780] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5342405c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: admin(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 1, 104, admin, root, marketingdirector@zeroerr.cn, /profile/avatar/2024/06/11/公司logo_20240611162451A002.png, 13682553316, $2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2, 0, 0, 0, 192.168.1.105, 2024-06-11 16:08:08, admin, 2024-05-09 11:03:14, 管理员, 104, 100, 0,100, 市场部, 2, 庞总, 0, 1, 超级管理员, admin, 1, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5342405c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72ec41b2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:23:49.622}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.105(String), 2024-06-11 16:25:07.968(Timestamp), 1(Long) +16:25:07.978 [schedule-pool-2] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b62039e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72ec41b2] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b62039e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@10373ea0] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@10373ea0] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22f017af] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22f017af] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@28087cdf] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@28087cdf] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4fe5d8db] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4fe5d8db] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37a80e8d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37a80e8d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b879732] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b879732] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@96b6179] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@96b6179] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58b7b7d6] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58b7b7d6] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47e40ca7] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47e40ca7] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1272b61a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1272b61a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@188add6a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@188add6a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5acdffd2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5acdffd2] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3da7bf50] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3da7bf50] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fff7eda] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fff7eda] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39e9e64e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:25:07.989}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39e9e64e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cb9cd92] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cb9cd92] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2af3b7a5] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2af3b7a5] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@200bdcd5] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@200bdcd5] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52708b2b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52708b2b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ab5d6cf] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ab5d6cf] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@53d943a3] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@53d943a3] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@31b17ee0] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@31b17ee0] +16:27:31.883 [schedule-pool-7] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Logout][退出成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37d95b45] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 退出成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37d95b45] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76ef1172] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76ef1172] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@377f1935] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: jiaceo(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 102, 103, jiaceo, 贾总, , , , $2a$10$8ZXQ/xdTF0V9Jql.Zv8T..HjLnePV76m8DvCm5hVJM.gsztT/H0Ry, 0, 0, 0, 192.168.1.105, 2024-06-11 11:36:16, admin, 2024-05-14 15:39:26, null, 103, 100, 0,100, 研发部, 1, 贾总, 0, 101, 总经理, ceo, 4, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@377f1935] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4f669c68] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 101(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:postsea:list +<== Row: recruit:postsea:query +<== Row: recruit:postsea:distribution +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:apply:add +<== Row: recruit:apply:query +<== Row: recruit:apply:cancel +<== Row: recruit:pending:approved +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:pending:repulse +<== Row: recruit:pending:refuse +<== Row: recruit:approved:query +<== Row: recruit:apply:reapply +<== Row: recruit:interview:edit +<== Total: 37 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4f669c68] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f9cac1c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.105(String), 2024-06-11 16:27:37.747(Timestamp), 102(Long) +16:27:37.756 [schedule-pool-1] INFO sys-user - [run,55] - [192.168.1.105]内网IP[jiaceo][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4cff404c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: jiaceo(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f9cac1c] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4cff404c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@32065045] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 102(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 101, 总经理, ceo, 4, 1, 1, 1, 0, 0, 2024-05-14 15:37:59, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@32065045] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38fe3b35] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 101(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:postsea:list +<== Row: recruit:postsea:query +<== Row: recruit:postsea:distribution +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:apply:add +<== Row: recruit:apply:query +<== Row: recruit:apply:cancel +<== Row: recruit:pending:approved +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:pending:repulse +<== Row: recruit:pending:refuse +<== Row: recruit:approved:query +<== Row: recruit:apply:reapply +<== Row: recruit:interview:edit +<== Total: 37 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38fe3b35] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdd80e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 102(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 10 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cdd80e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@42de655f] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@42de655f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48260e2f] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48260e2f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c61e129] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 102(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c61e129] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@444c7127] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 102(Long) +<== Columns: task_id, dept_name, dept_id, apply_date, post_name, recruit_reason, post_count, salary, age, arrive_time, sex, education, rank, experience, first_interview, second_interview, final_interview, examination, recruitment_channel, required_keywords, optional_keywords, exclusive_requirement, precedence_requirement, position_statement, post_equirements, check_experience, application_materials, status, user_id, user_name, user_dept_id, del_flag, images, edit, complete_time, hr_id, hr_name, structure_post_id +<== Row: 1800371258123522049, 市场部, 104, 2024-06-11, 业务员, 2, 4, 32342.0, 111, 2024-06-11 00:00:00, 1, 2, 23524, 5, 阿道夫, null, 的发的啊 , 的阿帆啊啊, 2, 更好天津条约, 每一天, 我为额为, 而特他, 微软为为, 微软我, null, 1, repulse, 103, pangmarket, 104, 0, <>, 3, null, null, null, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@444c7127] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e50aa21] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 103(Long), 102(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e50aa21] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f483925] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 102(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f483925] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b49f3a5] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@701a69ed] was not registered for synchronization because synchronization is not active +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b49f3a5] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b5456e4] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e5c25a7] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e5c25a7] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:37.758}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN (SELECT task_id, MAX(order_num) AS max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:27:28.433}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT task_id FROM recruit_process_task_node WHERE operator_id = ? AND status = 'process') +==> Parameters: 102(Long) +==> Parameters: 102(Long) +<== Columns: count(0) +<== Row: 1 +<== Total: 1 +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@701a69ed] +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') LIMIT ? +==> Parameters: 102(Long), 10(Integer) +<== Columns: task_id, dept_name, dept_id, apply_date, post_name, recruit_reason, post_count, salary, age, arrive_time, sex, education, rank, experience, first_interview, second_interview, final_interview, examination, recruitment_channel, required_keywords, optional_keywords, exclusive_requirement, precedence_requirement, position_statement, post_equirements, check_experience, application_materials, status, user_id, user_name, user_dept_id, del_flag, images, edit, complete_time, hr_id, hr_name, structure_post_id +<== Row: 1800371258123522049, 市场部, 104, 2024-06-11, 业务员, 2, 4, 32342.0, 111, 2024-06-11 00:00:00, 1, 2, 23524, 5, 阿道夫, null, 的发的啊 , 的阿帆啊啊, 2, 更好天津条约, 每一天, 我为额为, 而特他, 微软为为, 微软我, null, 1, repulse, 103, pangmarket, 104, 0, <>, 3, null, null, null, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b5456e4] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5178899a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.703}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5178899a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ba309ed] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.703}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: chenxuan(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 105, 204, chenxuan, 陈璇, , , , $2a$10$97DDK.KX3opvSXvO2YI87OmJoK1bWX2493.bvtNWdrWy./pY0u8kG, 1, 0, 0, , null, admin, 2024-05-20 15:50:55, null, 204, 100, 0,100, 行政人事部, 7, 庞总, 0, 102, 人事, hr, 5, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ba309ed] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d520ae8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.703}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d520ae8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7ae302ad] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.703}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.138(String), 2024-06-11 16:28:47.894(Timestamp), 105(Long) +16:28:47.904 [schedule-pool-5] INFO sys-user - [run,55] - [192.168.1.138]内网IP[chenxuan][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@225d8907] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: chenxuan(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7ae302ad] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c60ad8c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.703}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 105(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c60ad8c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2698c6fc] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.703}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2698c6fc] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@225d8907] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@155d6480] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 105(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 9 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@155d6480] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9ff6d7c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9ff6d7c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58a24807] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58a24807] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f45e6c2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f45e6c2] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cecf41c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cecf41c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1eea822d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 204(Long), 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1eea822d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76908e67] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:28:47.906}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76908e67] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6bf2632e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:30:00.414}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6bf2632e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41b17126] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:32:22.226}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41b17126] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e658b04] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 105(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e658b04] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@719f7883] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@719f7883] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15d77fa9] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 105(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 9 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15d77fa9] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@747f0739] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@747f0739] +16:34:01.522 [schedule-pool-3] INFO sys-user - [run,55] - [192.168.1.138]内网IP[chenxuan][Logout][退出成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f6405e4] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: chenxuan(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 退出成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f6405e4] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7117ec1d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7117ec1d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3eed1674] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: pangmarket(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 103, 104, pangmarket, 庞总, , /profile/avatar/2024/05/24/微信截图_20240524140506_20240524140527A029.png, , $2a$10$92t4aLHs2YNzGqW/S7RTeeDb8loLmg4OS9lF9yYDggRmGi/bvyN7e, 0, 0, 0, 192.168.1.105, 2024-06-11 13:47:00, admin, 2024-05-14 15:40:26, null, 104, 100, 0,100, 市场部, 2, 庞总, 0, 100, 部门主管, leader, 3, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3eed1674] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f192a91] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 100(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:postsea:list +<== Row: recruit:postsea:query +<== Row: recruit:postsea:distribution +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:apply:add +<== Row: recruit:apply:query +<== Row: recruit:apply:cancel +<== Row: recruit:pending:approved +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:pending:repulse +<== Row: recruit:pending:refuse +<== Row: recruit:approved:query +<== Row: recruit:apply:reapply +<== Row: recruit:interview:edit +<== Total: 37 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f192a91] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@dd0d1a1] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.138(String), 2024-06-11 16:34:21.887(Timestamp), 103(Long) +16:34:21.897 [schedule-pool-6] INFO sys-user - [run,55] - [192.168.1.138]内网IP[pangmarket][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b4febc6] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:34:21.899}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: pangmarket(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@dd0d1a1] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f7c8e79] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 103(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 100, 部门主管, leader, 3, 1, 1, 1, 0, 0, 2024-05-14 15:37:10, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f7c8e79] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1584e509] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 100(Long) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b4febc6] +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:postsea:list +<== Row: recruit:postsea:query +<== Row: recruit:postsea:distribution +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:apply:add +<== Row: recruit:apply:query +<== Row: recruit:apply:cancel +<== Row: recruit:pending:approved +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:pending:repulse +<== Row: recruit:pending:refuse +<== Row: recruit:approved:query +<== Row: recruit:apply:reapply +<== Row: recruit:interview:edit +<== Total: 37 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1584e509] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2e1de453] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 103(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 10 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2e1de453] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@651827a4] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@651827a4] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11f070c1] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11f070c1] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40354a2c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40354a2c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1139ecbb] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1139ecbb] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@447b76a8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 103(Long) +<== Columns: task_id, apply_date, post_name, recruit_reason, post_count, salary, arrive_time, images, status, education, experience, edit, structure_post_id +<== Row: 1800371258123522049, 2024-06-11, 业务员, 2, 4, 32342.0, 2024-06-11 00:00:00, <>, repulse, 2, 5, 3, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@447b76a8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@765be7f0] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@765be7f0] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@236af3c3] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@236af3c3] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51cecb11] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT task_id FROM recruit_process_task_node WHERE operator_id = ? AND status = 'process') +==> Parameters: 103(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51cecb11] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7d74e2ab] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7d74e2ab] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57bfef3f] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d5b1de4] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE dept_id = ? AND user_id = ? AND del_flag = 0 +==> Parameters: 104(Long), 103(Long) +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:34:21.899}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN (SELECT task_id, MAX(order_num) AS max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 103(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d5b1de4] +<== Columns: count(0) +<== Row: 1 +<== Total: 1 +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 LIMIT ? +==> Parameters: 104(Long), 103(Long), 10(Integer) +<== Columns: task_id, apply_date, post_name, recruit_reason, post_count, salary, arrive_time, images, status, education, experience, edit, structure_post_id +<== Row: 1800371258123522049, 2024-06-11, 业务员, 2, 4, 32342.0, 2024-06-11 00:00:00, <>, repulse, 2, 5, 3, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57bfef3f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d72b1ca] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d72b1ca] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49c715c1] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where status!=1 and type= 1 and post_type=0 +Creating a new SqlSession +==> Parameters: +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e563142] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:34:21.899}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Total: 0 +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49c715c1] +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e563142] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ff85480] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:34:21.899}] will not be managed by Spring +==> Preparing: select * from recruit_structure where status!=1 and type= 1 and post_type=0 +==> Parameters: +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@627d72fe] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ff85480] +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@627d72fe] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65bfa05d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@65bfa05d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24e50533] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' AND node_id = ? order by d.parent_id, d.order_num +==> Parameters: 223(Long) +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24e50533] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a2b3ba6] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.type, d.post_type, d.task_id, (select node_name from recruit_structure where node_id = d.parent_id) parent_name from recruit_structure d where d.node_id = ? +==> Parameters: 223(Long) +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, type, post_type, task_id, parent_name +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 1, 1, 1800371258123522049, 外贸主管 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a2b3ba6] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16bb71b8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16bb71b8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a3f0370] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' AND node_id = ? order by d.parent_id, d.order_num +==> Parameters: 224(Long) +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a3f0370] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7bbf894c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.type, d.post_type, d.task_id, (select node_name from recruit_structure where node_id = d.parent_id) parent_name from recruit_structure d where d.node_id = ? +==> Parameters: 224(Long) +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, type, post_type, task_id, parent_name +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 1, 3, null, 外贸主管 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7bbf894c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7937c13b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7937c13b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21d5150a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3df4150f] was not registered for synchronization because synchronization is not active +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21d5150a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@194fc3f1] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ac74662] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676312a9] was not registered for synchronization because synchronization is not active +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@194fc3f1] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT task_id FROM recruit_process_task_node WHERE operator_id = ? AND status = 'process') +==> Parameters: 103(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3df4150f] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE dept_id = ? AND user_id = ? AND del_flag = 0 +==> Parameters: 104(Long), 103(Long) +<== Columns: count(0) +<== Row: 1 +<== Total: 1 +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 LIMIT ? +==> Parameters: 104(Long), 103(Long), 10(Integer) +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:36:26.363}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN (SELECT task_id, MAX(order_num) AS max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 103(Long) +<== Columns: task_id, apply_date, post_name, recruit_reason, post_count, salary, arrive_time, images, status, education, experience, edit, structure_post_id +<== Row: 1800371258123522049, 2024-06-11, 业务员, 2, 4, 32342.0, 2024-06-11 00:00:00, <>, repulse, 2, 5, 3, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676312a9] +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ac74662] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21d4901c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:36:26.363}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@155660b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select * from recruit_structure where status!=1 and type= 1 and post_type=0 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21d4901c] +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@155660b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7cdd97ea] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:33:53.604}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7cdd97ea] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16c1a17c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.507}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16c1a17c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@159b00df] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.507}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: chengmei(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 104, 204, chengmei, 程楣, , , , $2a$10$5awKsiADollilw1JJNtMd.QfEccpk6N9iPnt4APf2OycI5JZanMPy, 1, 0, 0, 192.168.1.105, 2024-06-11 12:01:38, admin, 2024-05-20 15:50:09, null, 204, 100, 0,100, 行政人事部, 7, 庞总, 0, 102, 人事, hr, 5, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@159b00df] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ec576af] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.507}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ec576af] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60c845c8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.507}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.222(String), 2024-06-11 16:39:35.692(Timestamp), 104(Long) +16:39:35.702 [schedule-pool-2] INFO sys-user - [run,55] - [192.168.1.222]内网IP[chengmei][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2315cd68] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: chengmei(String), 0(String), 192.168.1.222(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60c845c8] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2315cd68] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75f2b719] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 104(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75f2b719] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f0adc69] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f0adc69] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24fa05d9] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 104(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 9 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24fa05d9] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43b3acc6] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43b3acc6] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11502bc3] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11502bc3] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69f6b5fb] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 104(Long) +<== Columns: task_id, dept_name, dept_id, apply_date, post_name, recruit_reason, post_count, salary, age, arrive_time, sex, education, rank, experience, first_interview, second_interview, final_interview, examination, recruitment_channel, required_keywords, optional_keywords, exclusive_requirement, precedence_requirement, position_statement, post_equirements, check_experience, application_materials, status, user_id, user_name, user_dept_id, del_flag, images, edit, complete_time, hr_id, hr_name, structure_post_id +<== Row: 1800371258123522049, 市场部, 104, 2024-06-11, 业务员, 2, 4, 32342.0, 111, 2024-06-11 00:00:00, 1, 2, 23524, 5, 阿道夫, null, 的发的啊 , 的阿帆啊啊, 2, 更好天津条约, 每一天, 我为额为, 而特他, 微软为为, 微软我, null, 1, repulse, 103, pangmarket, 104, 0, <>, 3, null, null, null, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69f6b5fb] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7680f4b8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 104(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7680f4b8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72f27e74] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 204(Long), 104(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72f27e74] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1304526a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 104(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1304526a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78471f73] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78471f73] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58fa7fc9] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and u.user_name = ? +==> Parameters: chengmei(String) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58fa7fc9] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f1d8268] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select p.node_id, p.node_name from recruit_structure p left join sys_user_post up on up.post_id = p.node_id left join sys_user u on u.user_id = up.user_id where u.user_name = ? and p.type=1 +==> Parameters: chengmei(String) +<== Columns: node_id, node_name +<== Row: 230, 招聘高级专员 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f1d8268] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48f7a56e] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@168364e6] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@aaaa094] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@aaaa094] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT task_id FROM recruit_process_task_node WHERE operator_id = ? AND status = 'process') +==> Parameters: 104(Long) +<== Columns: count(0) +<== Row: 1 +<== Total: 1 +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') LIMIT ? +==> Parameters: 104(Long), 10(Integer) +<== Columns: task_id, dept_name, dept_id, apply_date, post_name, recruit_reason, post_count, salary, age, arrive_time, sex, education, rank, experience, first_interview, second_interview, final_interview, examination, recruitment_channel, required_keywords, optional_keywords, exclusive_requirement, precedence_requirement, position_statement, post_equirements, check_experience, application_materials, status, user_id, user_name, user_dept_id, del_flag, images, edit, complete_time, hr_id, hr_name, structure_post_id +<== Row: 1800371258123522049, 市场部, 104, 2024-06-11, 业务员, 2, 4, 32342.0, 111, 2024-06-11 00:00:00, 1, 2, 23524, 5, 阿道夫, null, 的发的啊 , 的阿帆啊啊, 2, 更好天津条约, 每一天, 我为额为, 而特他, 微软为为, 微软我, null, 1, repulse, 103, pangmarket, 104, 0, <>, 3, null, null, null, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48f7a56e] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN (SELECT task_id, MAX(order_num) AS max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 104(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@168364e6] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@649c083b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@649c083b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11b087cc] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7520872a] was not registered for synchronization because synchronization is not active +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11b087cc] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT task_id FROM recruit_post WHERE hr_id = ? AND status != 3) +==> Parameters: 104(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7520872a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f8a9911] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74298f83] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13293ae2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13293ae2] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN (SELECT task_id, MAX(order_num) AS max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 104(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74298f83] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT task_id FROM recruit_process_task_node WHERE operator_id = ? AND status = 'process') +==> Parameters: 104(Long) +<== Columns: count(0) +<== Row: 1 +<== Total: 1 +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') LIMIT ? +==> Parameters: 104(Long), 10(Integer) +<== Columns: task_id, dept_name, dept_id, apply_date, post_name, recruit_reason, post_count, salary, age, arrive_time, sex, education, rank, experience, first_interview, second_interview, final_interview, examination, recruitment_channel, required_keywords, optional_keywords, exclusive_requirement, precedence_requirement, position_statement, post_equirements, check_experience, application_materials, status, user_id, user_name, user_dept_id, del_flag, images, edit, complete_time, hr_id, hr_name, structure_post_id +<== Row: 1800371258123522049, 市场部, 104, 2024-06-11, 业务员, 2, 4, 32342.0, 111, 2024-06-11 00:00:00, 1, 2, 23524, 5, 阿道夫, null, 的发的啊 , 的阿帆啊啊, 2, 更好天津条约, 每一天, 我为额为, 而特他, 微软为为, 微软我, null, 1, repulse, 103, pangmarket, 104, 0, <>, 3, null, null, null, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f8a9911] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b6f1122] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b6f1122] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d78c47a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19f49644] was not registered for synchronization because synchronization is not active +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d78c47a] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM resume_handle_record WHERE operator_id = ? +==> Parameters: 104(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19f49644] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51da4c69] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select post_id,hr_id,hr_name, post_name,node_id,task_id,dept_id,dept_name,create_date from recruit_post where hr_id=? +==> Parameters: 104(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51da4c69] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5858f599] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +Creating a new SqlSession +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5302c5ae] was not registered for synchronization because synchronization is not active +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5858f599] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM resume_handle_record WHERE operator_id = ? +==> Parameters: 103(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5302c5ae] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046e86e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select post_id,hr_id,hr_name, post_name,node_id,task_id,dept_id,dept_name,create_date from recruit_post where hr_id=? +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046e86e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fe39a44] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fe39a44] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b715b20] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: chenxuan(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 105, 204, chenxuan, 陈璇, , , , $2a$10$97DDK.KX3opvSXvO2YI87OmJoK1bWX2493.bvtNWdrWy./pY0u8kG, 1, 0, 0, 192.168.1.138, 2024-06-11 16:28:47, admin, 2024-05-20 15:50:55, null, 204, 100, 0,100, 行政人事部, 7, 庞总, 0, 102, 人事, hr, 5, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b715b20] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64564ed8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64564ed8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e80a6ec] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.105(String), 2024-06-11 16:40:59.379(Timestamp), 105(Long) +16:40:59.389 [schedule-pool-4] INFO sys-user - [run,55] - [192.168.1.105]内网IP[chenxuan][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30b5c126] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: chenxuan(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e80a6ec] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30b5c126] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@55057a79] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 105(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@55057a79] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74660d63] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74660d63] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1676a39b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 105(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 9 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1676a39b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23c41d1e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23c41d1e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c1a037b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c1a037b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38c0b650] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38c0b650] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e14a682] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e14a682] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6372033f] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 204(Long), 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6372033f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114a1238] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114a1238] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22b62f17] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select post_id,hr_id,hr_name, post_name,node_id,task_id,dept_id,dept_name,create_date from recruit_post where hr_id=? +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22b62f17] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44da0870] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44da0870] +16:41:14.035 [schedule-pool-7] INFO sys-user - [run,55] - [192.168.1.138]内网IP[pangmarket][Logout][退出成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d213035] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: pangmarket(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 退出成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d213035] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15e13253] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15e13253] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@97e242f] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: chenxuan(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 105, 204, chenxuan, 陈璇, , , , $2a$10$97DDK.KX3opvSXvO2YI87OmJoK1bWX2493.bvtNWdrWy./pY0u8kG, 1, 0, 0, 192.168.1.105, 2024-06-11 16:40:59, admin, 2024-05-20 15:50:55, null, 204, 100, 0,100, 行政人事部, 7, 庞总, 0, 102, 人事, hr, 5, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@97e242f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2957948b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2957948b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25b5448a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.138(String), 2024-06-11 16:41:19.018(Timestamp), 105(Long) +<== Updates: 1 +16:41:19.039 [schedule-pool-8] INFO sys-user - [run,55] - [192.168.1.138]内网IP[chenxuan][Success][登录成功] +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25b5448a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@187b9b75] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: chenxuan(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 登录成功(String) +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2592f8c4] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 105(Long) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@187b9b75] +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2592f8c4] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74e3b003] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74e3b003] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2044a3ba] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 105(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 9 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2044a3ba] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ef8b47e] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ef8b47e] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@269782cb] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@269782cb] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2708c7dd] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2708c7dd] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@261eb606] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@261eb606] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@663a8103] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 204(Long), 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@663a8103] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@551ff741] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@551ff741] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d6958e9] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ae6e365] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name from sys_user u left join sys_user_role ru on u.user_id = ru.user_id left join sys_role r on r.role_id=ru.role_id where r.role_key='hr' or r.role_key='hrleader' +==> Parameters: +<== Columns: user_id, dept_id, user_name, nick_name +<== Row: 104, 204, chengmei, 程楣 +<== Row: 105, 204, chenxuan, 陈璇 +<== Row: 106, 204, luoshuangyan, 罗双燕 +<== Total: 3 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ae6e365] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM post_plan_follow WHERE dept_id IS NOT NULL AND ym = ? +==> Parameters: 2024-06(String) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d6958e9] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3410f255] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +Creating a new SqlSession +==> Parameters: +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d59fa18] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select post_id,hr_id,hr_name, post_name,node_id,task_id,dept_id,dept_name,create_date from recruit_post where hr_id=? +==> Parameters: 104(Long) +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Total: 0 +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d59fa18] +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3410f255] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d2aba50] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM resume_follow_record WHERE name IS NOT NULL +==> Parameters: +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d2aba50] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a34f409] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from sys_user where del_flag=0 and user_name != 'admin' +==> Parameters: +<== Columns: user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark +<== Row: 102, 103, jiaceo, 贾总, 00, , , 0, , $2a$10$8ZXQ/xdTF0V9Jql.Zv8T..HjLnePV76m8DvCm5hVJM.gsztT/H0Ry, 0, 0, 192.168.1.105, 2024-06-11 16:27:37, admin, 2024-05-14 15:39:26, admin, 2024-06-11 16:27:37, null +<== Row: 103, 104, pangmarket, 庞总, 00, , , 0, /profile/avatar/2024/05/24/微信截图_20240524140506_20240524140527A029.png, $2a$10$92t4aLHs2YNzGqW/S7RTeeDb8loLmg4OS9lF9yYDggRmGi/bvyN7e, 0, 0, 192.168.1.138, 2024-06-11 16:34:21, admin, 2024-05-14 15:40:26, admin, 2024-06-11 16:34:21, null +<== Row: 104, 204, chengmei, 程楣, 00, , , 1, , $2a$10$5awKsiADollilw1JJNtMd.QfEccpk6N9iPnt4APf2OycI5JZanMPy, 0, 0, 192.168.1.222, 2024-06-11 16:39:35, admin, 2024-05-20 15:50:09, admin, 2024-06-11 16:39:35, null +<== Row: 105, 204, chenxuan, 陈璇, 00, , , 1, , $2a$10$97DDK.KX3opvSXvO2YI87OmJoK1bWX2493.bvtNWdrWy./pY0u8kG, 0, 0, 192.168.1.138, 2024-06-11 16:41:19, admin, 2024-05-20 15:50:55, admin, 2024-06-11 16:41:19, null +<== Row: 106, 204, luoshuangyan, 罗双燕, 00, , , 1, , $2a$10$zJCwJxDjS6pgkcHvZY6A..TJ3b45XGaSA8XeeUiLsH9SEDbZFH5qK, 0, 0, 192.168.1.105, 2024-06-11 12:00:16, admin, 2024-05-21 14:19:10, admin, 2024-06-11 12:00:16, null +<== Total: 5 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a34f409] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ed98c24] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select post_id,hr_id,hr_name, post_name,node_id,task_id,dept_id,dept_name,create_date from recruit_post where hr_id=? +==> Parameters: 104(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ed98c24] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a18fa8c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a18fa8c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13180296] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 105(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 102, 人事, hr, 5, 1, 1, 1, 0, 0, 2024-05-20 15:49:31, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13180296] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@522508ad] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 102(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:approved:query +<== Row: recruit:interview:edit +<== Total: 27 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@522508ad] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3412ec49] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 105(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 9 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3412ec49] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@163633da] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@163633da] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e0d6764] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e0d6764] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30174ff2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30174ff2] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1c0fb467] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1c0fb467] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4193765b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 204(Long), 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4193765b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ffe58a9] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 105(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ffe58a9] +16:42:02.496 [schedule-pool-1] INFO sys-user - [run,55] - [192.168.1.138]内网IP[chenxuan][Logout][退出成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efaaab1] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: chenxuan(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 退出成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efaaab1] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1411d452] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1411d452] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2259ac05] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: pangMARKT(String) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2259ac05] +16:42:09.379 [http-nio-8080-exec-31] INFO c.z.f.w.s.UserDetailsServiceImpl - [loadUserByUsername,43] - 登录用户:pangMARKT 不存在. +16:42:09.382 [http-nio-8080-exec-31] ERROR c.z.f.w.e.GlobalExceptionHandler - [handleServiceException,59] - 用户不存在/密码错误 +cn.zeroerr.common.exception.ServiceException: 用户不存在/密码错误 + at cn.zeroerr.framework.web.service.SysLoginService.login(SysLoginService.java:89) + at cn.zeroerr.web.controller.system.SysLoginController.login(SysLoginController.java:48) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:903) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:809) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at cn.zeroerr.common.filter.RepeatableFilter.doFilter(RepeatableFilter.java:43) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at cn.zeroerr.framework.security.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:42) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) +16:42:09.394 [schedule-pool-9] INFO sys-user - [run,55] - [192.168.1.138]内网IP[pangMARKT][Error][用户不存在/密码错误] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@573ed774] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: pangMARKT(String), 1(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 用户不存在/密码错误(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@573ed774] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67f6d4dd] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67f6d4dd] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47500f9a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: pangMARKeT(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 103, 104, pangmarket, 庞总, , /profile/avatar/2024/05/24/微信截图_20240524140506_20240524140527A029.png, , $2a$10$92t4aLHs2YNzGqW/S7RTeeDb8loLmg4OS9lF9yYDggRmGi/bvyN7e, 0, 0, 0, 192.168.1.138, 2024-06-11 16:34:21, admin, 2024-05-14 15:40:26, null, 104, 100, 0,100, 市场部, 2, 庞总, 0, 100, 部门主管, leader, 3, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47500f9a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16f92ef3] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 100(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:postsea:list +<== Row: recruit:postsea:query +<== Row: recruit:postsea:distribution +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:apply:add +<== Row: recruit:apply:query +<== Row: recruit:apply:cancel +<== Row: recruit:pending:approved +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:pending:repulse +<== Row: recruit:pending:refuse +<== Row: recruit:approved:query +<== Row: recruit:apply:reapply +<== Row: recruit:interview:edit +<== Total: 37 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16f92ef3] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e8ec27a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.138(String), 2024-06-11 16:42:16.495(Timestamp), 103(Long) +16:42:16.505 [schedule-pool-5] INFO sys-user - [run,55] - [192.168.1.138]内网IP[pangMARKeT][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6da76907] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: pangMARKeT(String), 0(String), 192.168.1.138(String), 内网IP(String), Chrome 11(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e8ec27a] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6da76907] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@17d0e3c5] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id left join sys_dept d on u.dept_id = d.dept_id WHERE r.del_flag = '0' and ur.user_id = ? +==> Parameters: 103(Long) +<== Columns: role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_time, remark +<== Row: 100, 部门主管, leader, 3, 1, 1, 1, 0, 0, 2024-05-14 15:37:10, null +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@17d0e3c5] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@45400a8d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct m.perms from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id where m.status = '0' and rm.role_id = ? +==> Parameters: 100(Long) +<== Columns: perms +<== Row: +<== Row: recruit:structure:list +<== Row: recruit:follow:list +<== Row: recruit:interview:list +<== Row: recruit:structure:query +<== Row: recruit:structure:add +<== Row: recruit:structure:edit +<== Row: recruit:structure:remove +<== Row: recruit:postsea:list +<== Row: recruit:postsea:query +<== Row: recruit:postsea:distribution +<== Row: recruit:mypost:query +<== Row: recruit:mypost:list +<== Row: recruit:resume:list +<== Row: recruit:resume:add +<== Row: recruit:resume:query +<== Row: recruit:resume:edit +<== Row: recruit:resume:delete +<== Row: recruit:mypost:edit +<== Row: recruit:interview:add +<== Row: recruit:interview:query +<== Row: recruit:interview:delete +<== Row: recruit:follow:add +<== Row: recruit:follow:edit +<== Row: recruit:follow:delete +<== Row: recruit:process:list +<== Row: recruit:apply:add +<== Row: recruit:apply:query +<== Row: recruit:apply:cancel +<== Row: recruit:pending:approved +<== Row: recruit:pending:edit +<== Row: recruit:pending:query +<== Row: recruit:pending:repulse +<== Row: recruit:pending:refuse +<== Row: recruit:approved:query +<== Row: recruit:apply:reapply +<== Row: recruit:interview:edit +<== Total: 37 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@45400a8d] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71f29b17] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = ? and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num +==> Parameters: 103(Long) +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 10 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71f29b17] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6220f85c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6220f85c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33961244] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33961244] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40685d69] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40685d69] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37d84d73] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37d84d73] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d7280b9] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 103(Long) +<== Columns: task_id, apply_date, post_name, recruit_reason, post_count, salary, arrive_time, images, status, education, experience, edit, structure_post_id +<== Row: 1800371258123522049, 2024-06-11, 业务员, 2, 4, 32342.0, 2024-06-11 00:00:00, <>, repulse, 2, 5, 3, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d7280b9] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57c84173] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 103(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57c84173] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26ad976f] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 1, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26ad976f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e263ee1] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a226fcb] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a226fcb] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b00e50d] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT task_id FROM recruit_process_task_node WHERE operator_id = ? AND status = 'process') +==> Parameters: 103(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e263ee1] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE dept_id = ? AND user_id = ? AND del_flag = 0 +==> Parameters: 104(Long), 103(Long) +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eb624f8] was not registered for synchronization because synchronization is not active +<== Columns: count(0) +<== Row: 1 +<== Total: 1 +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 LIMIT ? +==> Parameters: 104(Long), 103(Long), 10(Integer) +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4994796a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:23:49.619, closeCount=0, lastValidateTimeMillis=2024-06-11 16:39:35.704}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4994796a] +<== Columns: task_id, apply_date, post_name, recruit_reason, post_count, salary, arrive_time, images, status, education, experience, edit, structure_post_id +<== Row: 1800371258123522049, 2024-06-11, 业务员, 2, 4, 32342.0, 2024-06-11 00:00:00, <>, repulse, 2, 5, 3, 223 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b00e50d] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: SELECT count(0) FROM recruit_process_task WHERE task_id IN (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN (SELECT task_id, MAX(order_num) AS max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 103(Long) +<== Columns: count(0) +<== Row: 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@eb624f8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@569cc69b] was not registered for synchronization because synchronization is not active +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b0a6de5] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:25:07.987, closeCount=0, lastValidateTimeMillis=2024-06-11 16:40:59.392}] will not be managed by Spring +==> Preparing: select * from recruit_structure where parent_id = '227' and status!=1 +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 16:42:28.157, closeCount=0, lastValidateTimeMillis=2024-06-11 16:42:28.16}] will not be managed by Spring +==> Preparing: select * from recruit_structure where status!=1 and type= 1 and post_type=0 +==> Parameters: +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@569cc69b] +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, update_by, update_time, post_type, task_id +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:51, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:14:58, null, null +<== Row: 105, 227, 0,100,227, 测试部, 3, 廖蔚, , , 0, 2, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:05, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:19, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, admin, 2024-06-07 15:15:25, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, admin, 2024-06-07 15:15:34, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, admin, 2024-06-07 15:15:39, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, admin, 2024-06-07 15:15:44, null, null +<== Total: 8 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b0a6de5] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6834586a] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.636, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.637}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6834586a] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3763c29b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.636, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.637}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: admin(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 1, 104, admin, root, marketingdirector@zeroerr.cn, /profile/avatar/2024/06/11/公司logo_20240611162451A002.png, 13682553316, $2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2, 0, 0, 0, 192.168.1.105, 2024-06-11 16:25:07, admin, 2024-05-09 11:03:14, 管理员, 104, 100, 0,100, 市场部, 2, 庞总, 0, 1, 超级管理员, admin, 1, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3763c29b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4761d639] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.636, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.637}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.105(String), 2024-06-11 17:40:30.826(Timestamp), 1(Long) +17:40:30.836 [schedule-pool-10] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74d427bd] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4761d639] +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74d427bd] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74dd4090] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74dd4090] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f0bfb76] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f0bfb76] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b7e0965] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b7e0965] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5c5e37c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5c5e37c] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cbac03b] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cbac03b] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38d25af4] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38d25af4] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13b2e104] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 17:40:30.84, closeCount=0, lastValidateTimeMillis=2024-06-11 17:40:30.841}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13b2e104] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1018fdb4] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config WHERE config_key = ? +==> Parameters: sys.login.blackIPList(String) +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1018fdb4] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@668d2ba0] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id left join sys_role r on r.role_id = ur.role_id where u.user_name = ? and u.del_flag = '0' +==> Parameters: admin(String) +<== Columns: user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, password, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark, dept_id, parent_id, ancestors, dept_name, order_num, leader, dept_status, role_id, role_name, role_key, role_sort, data_scope, role_status +<== Row: 1, 104, admin, root, marketingdirector@zeroerr.cn, /profile/avatar/2024/06/11/公司logo_20240611162451A002.png, 13682553316, $2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2, 0, 0, 0, 192.168.1.105, 2024-06-11 17:40:30, admin, 2024-05-09 11:03:14, 管理员, 104, 100, 0,100, 市场部, 2, 庞总, 0, 1, 超级管理员, admin, 1, 1, 0 +<== Total: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@668d2ba0] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@317a32ad] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: update sys_user SET login_ip = ?, login_date = ?, update_time = sysdate() where user_id = ? +==> Parameters: 192.168.1.105(String), 2024-06-11 20:31:51.567(Timestamp), 1(Long) +20:31:51.578 [schedule-pool-3] INFO sys-user - [run,55] - [192.168.1.105]内网IP[admin][Success][登录成功] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2bb60b88] was not registered for synchronization because synchronization is not active +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@317a32ad] +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate()) +==> Parameters: admin(String), 0(String), 192.168.1.105(String), 内网IP(String), Chrome 12(String), Windows 10(String), 登录成功(String) +<== Updates: 1 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2bb60b88] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@626d7f71] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num +==> Parameters: +<== Columns: menu_id, parent_id, menu_name, path, component, query, visible, status, perms, is_frame, is_cache, menu_type, icon, order_num, create_time +<== Row: 2000, 0, 招聘管理, recruit, null, null, 0, 0, , 1, 0, M, peoples, 0, 2024-05-10 17:13:45 +<== Row: 1, 0, 系统管理, system, null, , 0, 0, , 1, 0, M, system, 1, 2024-05-09 11:03:14 +<== Row: 2, 0, 系统监控, monitor, null, , 0, 0, , 1, 0, M, monitor, 2, 2024-05-09 11:03:14 +<== Row: 3, 0, 系统工具, tool, null, , 0, 0, , 1, 0, M, tool, 3, 2024-05-09 11:03:14 +<== Row: 100, 1, 用户管理, user, system/user/index, , 0, 0, system:user:list, 1, 0, C, user, 1, 2024-05-09 11:03:14 +<== Row: 101, 1, 角色管理, role, system/role/index, , 0, 0, system:role:list, 1, 0, C, peoples, 2, 2024-05-09 11:03:14 +<== Row: 102, 1, 菜单管理, menu, system/menu/index, , 0, 0, system:menu:list, 1, 0, C, tree-table, 3, 2024-05-09 11:03:14 +<== Row: 103, 1, 部门管理, dept, system/dept/index, , 0, 0, system:dept:list, 1, 0, C, tree, 4, 2024-05-09 11:03:14 +<== Row: 104, 1, 岗位管理, post, system/post/index, , 0, 0, system:post:list, 1, 0, C, post, 5, 2024-05-09 11:03:14 +<== Row: 105, 1, 字典管理, dict, system/dict/index, , 0, 0, system:dict:list, 1, 0, C, dict, 6, 2024-05-09 11:03:14 +<== Row: 106, 1, 参数设置, config, system/config/index, , 0, 0, system:config:list, 1, 0, C, edit, 7, 2024-05-09 11:03:14 +<== Row: 107, 1, 通知公告, notice, system/notice/index, , 0, 0, system:notice:list, 1, 0, C, message, 8, 2024-05-09 11:03:14 +<== Row: 108, 1, 日志管理, log, , , 0, 0, , 1, 0, M, log, 9, 2024-05-09 11:03:14 +<== Row: 109, 2, 在线用户, online, monitor/online/index, , 0, 0, monitor:online:list, 1, 0, C, online, 1, 2024-05-09 11:03:14 +<== Row: 110, 2, 定时任务, job, monitor/job/index, , 0, 0, monitor:job:list, 1, 0, C, job, 2, 2024-05-09 11:03:14 +<== Row: 111, 2, 数据监控, druid, monitor/druid/index, , 0, 0, monitor:druid:list, 1, 0, C, druid, 3, 2024-05-09 11:03:14 +<== Row: 112, 2, 服务监控, server, monitor/server/index, , 0, 0, monitor:server:list, 1, 0, C, server, 4, 2024-05-09 11:03:14 +<== Row: 113, 2, 缓存监控, cache, monitor/cache/index, , 0, 0, monitor:cache:list, 1, 0, C, redis, 5, 2024-05-09 11:03:14 +<== Row: 114, 2, 缓存列表, cacheList, monitor/cache/list, , 0, 0, monitor:cache:list, 1, 0, C, redis-list, 6, 2024-05-09 11:03:14 +<== Row: 115, 3, 表单构建, build, tool/build/index, , 0, 0, tool:build:list, 1, 0, C, build, 1, 2024-05-09 11:03:14 +<== Row: 116, 3, 代码生成, gen, tool/gen/index, , 0, 0, tool:gen:list, 1, 0, C, code, 2, 2024-05-09 11:03:14 +<== Row: 117, 3, 系统接口, swagger, tool/swagger/index, , 0, 0, tool:swagger:list, 1, 0, C, swagger, 3, 2024-05-09 11:03:14 +<== Row: 500, 108, 操作日志, operlog, monitor/operlog/index, , 0, 0, monitor:operlog:list, 1, 0, C, form, 1, 2024-05-09 11:03:14 +<== Row: 501, 108, 登录日志, logininfor, monitor/logininfor/index, , 0, 0, monitor:logininfor:list, 1, 0, C, logininfor, 2, 2024-05-09 11:03:14 +<== Row: 2001, 2000, 岗位组织架构, structure, recruit/structure/index, null, 0, 0, recruit:structure:list, 1, 0, C, tree, 1, 2024-05-10 17:19:23 +<== Row: 2002, 2000, 我的招聘, post, , null, 0, 0, , 1, 0, M, log, 2, 2024-05-10 17:21:22 +<== Row: 2055, 2002, 在招岗位, recruit, null, null, 0, 0, , 1, 0, M, form, 1, 2024-06-05 14:03:44 +<== Row: 2031, 2002, 简历处理, resume, recruit/resume/index, null, 0, 0, recruit:resume:list, 1, 0, C, education, 2, 2024-05-22 11:38:18 +<== Row: 2003, 2002, 任务跟踪, trace, recruit/follow/index, null, 0, 0, recruit:follow:list, 1, 0, C, eye-open, 3, 2024-05-10 17:25:37 +<== Row: 2004, 2002, 面试管理, interview, recruit/interview/index, null, 0, 0, recruit:interview:list, 1, 0, C, documentation, 4, 2024-05-10 17:26:59 +<== Row: 2015, 2011, 我的申请, apply, recruit/apply/index, null, 0, 0, recruit:apply:list, 1, 0, C, guide, 1, 2024-05-18 09:00:26 +<== Row: 2019, 2011, 待我审批, pending, recruit/pending/index, null, 0, 0, recruit:pending:list, 1, 0, C, checkbox, 2, 2024-05-18 09:06:24 +<== Row: 2020, 2011, 我已审批, approved, recruit/approved/index, null, 0, 0, recruit:approved:list, 1, 0, C, drag, 3, 2024-05-18 09:07:58 +<== Row: 2043, 2055, 审批, process, recruit/process/index, null, 0, 0, recruit:process:list, 1, 0, C, clipboard, 1, 2024-05-29 11:23:23 +<== Row: 2010, 2055, 岗位公海, postsea, recruit/postsea/index, null, 0, 0, recruit:postsea:list, 1, 0, C, list, 2, 2024-05-13 15:29:24 +<== Row: 2030, 2055, 我的待招, mypost, recruit/mypost/index, null, 0, 0, recruit:mypost:list, 1, 0, C, post, 3, 2024-05-22 11:24:34 +<== Total: 36 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@626d7f71] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21937bf8] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select id ,receive_date,recruitment_channel, resume_source,name,phone, post_id,post_name,suit_jd, hr_id,hr_name,interview_date, is_pass,invitation_date,rejected_reason, first_date,first_reach,first_test, first_interviewer_ids,first_pass,second_date, second_reach,second_interviewer_ids,second_pass, final_date,final_reach,final_interviewer_ids, final_pass,accept_offer,join_date,create_date,update_date,actual_join_date, fail_reason,special_reason,file from resume_follow_record where create_date >= ? and create_date <= ? +==> Parameters: 2024-06-01(LocalDate), 2024-06-30(LocalDate) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21937bf8] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22e4b2b3] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: SELECT * FROM ( SELECT p1.*, ROW_NUMBER() OVER (PARTITION BY p1.post_id ORDER BY FIELD(p1.grade, 'A', 'B', 'C', 'D'), p1.update_date DESC ) as row_num FROM post_plan_follow p1 JOIN ( SELECT post_id, MAX(update_date) AS max_update_date FROM post_plan_follow GROUP BY post_id ) p2 ON p1.post_id = p2.post_id AND p1.update_date = p2.max_update_date ) subquery WHERE subquery.row_num = 1 ORDER BY FIELD(subquery.grade, 'A', 'B', 'C', 'D'), subquery.update_date DESC LIMIT 7 +==> Parameters: +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22e4b2b3] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@400e195f] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (select distinct task_id from recruit_process_task_node where operator_id=? and status='process') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@400e195f] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3957c1da] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select task_id ,dept_name,dept_id, apply_date,post_name,recruit_reason, post_count,salary,age, arrive_time,sex,education, rank,experience,first_interview, second_interview,final_interview,examination, recruitment_channel,required_keywords,optional_keywords, exclusive_requirement,precedence_requirement,position_statement, post_equirements,check_experience,application_materials, status,user_id,user_name, user_dept_id,del_flag,images,edit,complete_time,hr_id,hr_name,structure_post_id from recruit_process_task where task_id in (SELECT DISTINCT t1.task_id FROM recruit_process_task_node t1 JOIN ( SELECT task_id, MAX(order_num) as max_order_num FROM recruit_process_task_node WHERE operator_id = ? GROUP BY task_id ) t2 ON t1.task_id = t2.task_id AND t1.order_num = t2.max_order_num WHERE t1.status = 'complete') +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3957c1da] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@346cf8f7] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select task_id, apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,structure_post_id from recruit_process_task where dept_id=? and user_id=? and del_flag=0 +==> Parameters: 104(Long), 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@346cf8f7] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43f935af] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select task_id,apply_date,post_name,recruit_reason,post_count,salary,arrive_time,images,status,education,experience,edit,dept_name,dept_id,structure_post_id from recruit_process_task where task_id in (select task_id from recruit_post where hr_id =? and status !=3 ) +==> Parameters: 1(Long) +<== Total: 0 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@43f935af] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7cf91a8c] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:31:51.377, closeCount=0, lastValidateTimeMillis=2024-06-11 20:31:51.378}] will not be managed by Spring +==> Preparing: select d.node_id, d.parent_id, d.ancestors, d.node_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.type, d.post_type, d.task_id from recruit_structure d where d.del_flag = '0' order by d.parent_id, d.order_num +==> Parameters: +<== Columns: node_id, parent_id, ancestors, node_name, order_num, leader, phone, email, status, del_flag, create_by, create_time, type, post_type, task_id +<== Row: 100, 0, 0, 深圳市零差云控科技有限公司, 0, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 2, null, null +<== Row: 227, 100, 0,100, 总经理, 1, null, null, null, 0, 0, admin, 2024-06-07 15:14:45, 1, 2, null +<== Row: 226, 104, 0,100,227,104, 市场总监, 1, null, null, null, 0, 0, admin, 2024-06-07 15:09:33, 1, 2, null +<== Row: 228, 204, 0,100,227,204, 招聘主管, 1, null, null, null, 0, 0, admin, 2024-06-07 15:19:11, 1, 2, null +<== Row: 229, 204, 0,100,227,204, 招聘专员, 2, null, null, null, 0, 0, admin, 2024-06-07 15:19:27, 1, 2, null +<== Row: 230, 204, 0,100,227,204, 招聘高级专员, 3, null, null, null, 0, 0, admin, 2024-06-07 15:19:44, 1, 2, null +<== Row: 219, 213, 0,100,227,104,226,213, 海外业务, 1, null, null, null, 0, 0, admin, 2024-06-04 14:56:40, 2, null, null +<== Row: 220, 213, 0,100,227,104,226,213, 国内业务, 2, null, null, null, 0, 0, admin, 2024-06-04 14:56:56, 2, null, null +<== Row: 221, 219, 0,100,227,104,226,213,219, 外贸主管, 1, null, null, null, 0, 0, admin, 2024-06-04 14:58:10, 1, 2, null +<== Row: 222, 219, 0,100,227,104,226,213,219, 技术主管, 2, null, null, null, 0, 0, admin, 2024-06-04 14:58:38, 1, 3, null +<== Row: 223, 221, 0,100,227,104,226,213,219,221, 业务员, 1, null, null, null, 0, 0, admin, 2024-06-04 15:24:24, 1, 0, 1800371258123522049 +<== Row: 224, 221, 0,100,227,104,226,213,219,221, 网络运营, 2, null, null, null, 0, 0, admin, 2024-06-04 15:24:40, 1, 3, null +<== Row: 213, 226, 0,100,227,104,226, 业务组别, 1, null, null, null, 0, 0, admin, 2024-05-13 14:36:10, 2, null, null +<== Row: 214, 226, 0,100,227,104,226, 支持组别, 2, null, null, null, 0, 0, admin, 2024-05-14 14:02:29, 2, null, null +<== Row: 103, 227, 0,100,227, 研发部, 1, 贾总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 104, 227, 0,100,227, 市场部, 2, 庞总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 106, 227, 0,100,227, 财务部, 4, 钱瑜, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 107, 227, 0,100,227, 制造部, 5, 崔总, , , 0, 0, admin, 2024-05-09 11:03:14, 0, null, null +<== Row: 204, 227, 0,100,227, 行政人事部, 7, 庞总, null, null, 0, 0, admin, 2024-05-10 13:57:33, 0, null, null +<== Row: 205, 227, 0,100,227, 销售部, 8, 朱亮, null, null, 0, 0, admin, 2024-05-10 13:57:55, 0, null, null +<== Row: 225, 227, 0,100,227, 总经办, 9, null, null, null, 0, 0, admin, 2024-06-07 09:01:29, 0, null, null +<== Total: 21 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7cf91a8c] +Application Version: 1.0.0 +Spring Boot Version: 2.5.15 +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 佛祖保佑 永不宕机 永无BUG // +//////////////////////////////////////////////////////////////////// +20:42:43.459 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:42:43.473 [main] INFO c.z.RuoYiApplication - [logStarting,55] - Starting RuoYiApplication using Java 1.8.0_412 on centos with PID 20816 (/home/java/zeroerr_oa-admin.jar started by root in /home/java) +20:42:43.474 [main] DEBUG c.z.RuoYiApplication - [logStarting,56] - Running with Spring Boot v2.5.15, Spring v5.3.33 +20:42:43.474 [main] INFO c.z.RuoYiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "druid" +20:42:47.560 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8080"] +20:42:47.561 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:42:47.562 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.75] +20:42:47.648 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:42:48.478 [main] DEBUG c.z.f.s.f.JwtAuthenticationTokenFilter - [init,242] - Filter 'jwtAuthenticationTokenFilter' configured for use +Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/RecruitStructureMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysConfigMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysDeptMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysDictDataMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysDictTypeMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysLogininforMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysMenuMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysNoticeMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysOperLogMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysPostMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysRoleDeptMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysRoleMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysRoleMenuMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysUserMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysUserPostMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-system-3.8.7.jar!/mapper/system/SysUserRoleMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-quartz-3.8.7.jar!/mapper/quartz/SysJobLogMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-quartz-3.8.7.jar!/mapper/quartz/SysJobMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-generator-3.8.7.jar!/mapper/generator/GenTableColumnMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-generator-3.8.7.jar!/mapper/generator/GenTableMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/PostPlanFollowMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/RecruitPostMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/RecruitProcessTaskMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/RecruitProcessTaskNodeMapper.xml]' +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/ResumeFollowRecordMapper.xml]' +This "id" is the table primary key by default name for `id` in Class: "cn.zeroerr.domain.entity.ResumeHandleRecord",So @TableField will not work! +Parsed mapper file: 'URL [jar:file:/home/java/zeroerr_oa-admin.jar!/BOOT-INF/lib/zeroerr_oa-recruit-3.8.7.jar!/mapper/ResumeHandleRecordMapper.xml]' + _ _ |_ _ _|_. ___ _ | _ +| | |\/|_)(_| | |_\ |_)||_|_\ + / | + 3.4.0 +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@460ebd80] was not registered for synchronization because synchronization is not active +20:42:50.952 [main] INFO c.a.d.p.DruidDataSource - [init,1009] - {dataSource-1} inited +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:42:50.948, closeCount=0, lastValidateTimeMillis=2024-06-11 20:42:50.948}] will not be managed by Spring +==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config +==> Parameters: +<== Columns: config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark +<== Row: 1, 主框架页-默认皮肤样式名称, sys.index.skinName, skin-blue, Y, admin, 2024-05-09 11:03:14, , null, 蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow +<== Row: 2, 用户管理-账号初始密码, sys.user.initPassword, 123456, Y, admin, 2024-05-09 11:03:14, , null, 初始化密码 123456 +<== Row: 3, 主框架页-侧边栏主题, sys.index.sideTheme, theme-dark, Y, admin, 2024-05-09 11:03:14, , null, 深色主题theme-dark,浅色主题theme-light +<== Row: 4, 账号自助-验证码开关, sys.account.captchaEnabled, false, Y, admin, 2024-05-09 11:03:14, admin, 2024-05-24 15:25:01, 是否开启验证码功能(true开启,false关闭) +<== Row: 5, 账号自助-是否开启用户注册功能, sys.account.registerUser, false, Y, admin, 2024-05-09 11:03:14, , null, 是否开启注册用户功能(true开启,false关闭) +<== Row: 6, 用户登录-黑名单列表, sys.login.blackIPList, , Y, admin, 2024-05-09 11:03:14, , null, 设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段) +<== Total: 6 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@460ebd80] +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f574cc2] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:42:50.948, closeCount=0, lastValidateTimeMillis=2024-06-11 20:42:50.948}] will not be managed by Spring +==> Preparing: select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark from sys_dict_data WHERE status = ? order by dict_sort asc +==> Parameters: 0(String) +<== Columns: dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark +<== Row: 1, 1, 男, 0, sys_user_sex, , , Y, 0, admin, 2024-05-09 11:03:14, 性别男 +<== Row: 4, 1, 显示, 0, sys_show_hide, , primary, Y, 0, admin, 2024-05-09 11:03:14, 显示菜单 +<== Row: 6, 1, 正常, 0, sys_normal_disable, , primary, Y, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 8, 1, 正常, 0, sys_job_status, , primary, Y, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 10, 1, 默认, DEFAULT, sys_job_group, , , Y, 0, admin, 2024-05-09 11:03:14, 默认分组 +<== Row: 12, 1, 是, Y, sys_yes_no, , primary, Y, 0, admin, 2024-05-09 11:03:14, 系统默认是 +<== Row: 14, 1, 通知, 1, sys_notice_type, , warning, Y, 0, admin, 2024-05-09 11:03:14, 通知 +<== Row: 16, 1, 正常, 0, sys_notice_status, , primary, Y, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 19, 1, 新增, 1, sys_oper_type, , info, N, 0, admin, 2024-05-09 11:03:14, 新增操作 +<== Row: 28, 1, 成功, 0, sys_common_status, , primary, N, 0, admin, 2024-05-09 11:03:14, 正常状态 +<== Row: 100, 1, 部门, 0, recruit_structure_type, null, default, N, 0, admin, 2024-05-11 19:39:02, 新增的节点属于部门 +<== Row: 103, 1, 审批中, process, recruit_process_status, null, primary, N, 0, admin, 2024-05-16 10:48:15, 招聘申请审批中 +<== Row: 107, 1, 猎头, 1, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:42:54, null +<== Row: 114, 1, 扩大编制, 1, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:00, null +<== Row: 118, 1, 无需, 1, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:48:30, null +<== Row: 124, 1, 男, 1, recruit_process_sex, null, info, N, 0, admin, 2024-05-17 11:35:35, null +<== Row: 126, 1, 专科, 1, recruit_process_education, null, info, N, 0, admin, 2024-05-17 11:46:06, null +<== Row: 129, 1, 个人简历, 1, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:21, null +<== Row: 134, 1, 未修改, 1, recruit_process_edit, null, info, N, 0, admin, 2024-05-18 17:19:37, null +<== Row: 137, 1, 同意, approved, recruit_process_node_status, null, success, N, 0, admin, 2024-05-20 14:33:30, null +<== Row: 141, 1, 正在招聘, 0, recruit_post_status, null, primary, N, 0, admin, 2024-05-23 10:42:54, null +<== Row: 144, 1, 自投, 1, recruit_interview_source, null, primary, N, 0, admin, 2024-05-23 15:59:03, null +<== Row: 146, 1, A, 1, recruit_post_grade, null, danger, N, 0, admin, 2024-05-27 17:01:30, null +<== Row: 150, 1, Y, 1, recruit_interview_pass, null, success, N, 0, admin, 2024-05-31 15:27:13, null +<== Row: 152, 1, Y, 1, recruit_interview_phoneresult, null, success, N, 0, admin, 2024-05-31 16:49:14, null +<== Row: 158, 1, 未申请, 0, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 15:52:50, null +<== Row: 2, 2, 女, 1, sys_user_sex, , , N, 0, admin, 2024-05-09 11:03:14, 性别女 +<== Row: 5, 2, 隐藏, 1, sys_show_hide, , danger, N, 0, admin, 2024-05-09 11:03:14, 隐藏菜单 +<== Row: 7, 2, 停用, 1, sys_normal_disable, , danger, N, 0, admin, 2024-05-09 11:03:14, 停用状态 +<== Row: 9, 2, 暂停, 1, sys_job_status, , danger, N, 0, admin, 2024-05-09 11:03:14, 停用状态 +<== Row: 11, 2, 系统, SYSTEM, sys_job_group, , , N, 0, admin, 2024-05-09 11:03:14, 系统分组 +<== Row: 13, 2, 否, N, sys_yes_no, , danger, N, 0, admin, 2024-05-09 11:03:14, 系统默认否 +<== Row: 15, 2, 公告, 2, sys_notice_type, , success, N, 0, admin, 2024-05-09 11:03:14, 公告 +<== Row: 17, 2, 关闭, 1, sys_notice_status, , danger, N, 0, admin, 2024-05-09 11:03:14, 关闭状态 +<== Row: 20, 2, 修改, 2, sys_oper_type, , info, N, 0, admin, 2024-05-09 11:03:14, 修改操作 +<== Row: 29, 2, 失败, 1, sys_common_status, , danger, N, 0, admin, 2024-05-09 11:03:14, 停用状态 +<== Row: 101, 2, 岗位, 1, recruit_structure_type, null, default, N, 0, admin, 2024-05-11 19:39:28, 新增的节点属于岗位 +<== Row: 104, 2, 撤销, cancel, recruit_process_status, null, warning, N, 0, admin, 2024-05-16 10:48:37, 招聘申请被撤销 +<== Row: 108, 2, BOSS直聘, 2, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:14, null +<== Row: 115, 2, 储备人力, 2, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:11, null +<== Row: 119, 2, 1年以上, 2, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:48:39, null +<== Row: 125, 2, 女, 0, recruit_process_sex, null, info, N, 0, admin, 2024-05-17 11:35:46, null +<== Row: 127, 2, 本科, 2, recruit_process_education, null, primary, N, 0, admin, 2024-05-17 11:46:29, null +<== Row: 130, 2, 身份证明, 2, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:34, null +<== Row: 135, 2, 已修改, 2, recruit_process_edit, null, primary, N, 0, admin, 2024-05-18 17:20:20, null +<== Row: 138, 2, 驳回, refuse, recruit_process_node_status, null, warning, N, 0, admin, 2024-05-20 14:33:57, null +<== Row: 142, 2, 已招聘, 1, recruit_post_status, null, success, N, 0, admin, 2024-05-23 10:43:24, null +<== Row: 145, 2, 下载, 2, recruit_interview_source, null, primary, N, 0, admin, 2024-05-23 15:59:13, null +<== Row: 147, 2, B, 2, recruit_post_grade, null, warning, N, 0, admin, 2024-05-27 17:02:10, null +<== Row: 151, 2, N, 0, recruit_interview_pass, null, danger, N, 0, admin, 2024-05-31 15:27:28, null +<== Row: 153, 2, N, 2, recruit_interview_phoneresult, null, danger, N, 0, admin, 2024-05-31 16:49:33, null +<== Row: 159, 2, 申请中, 1, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 15:53:35, null +<== Row: 3, 3, 未知, 2, sys_user_sex, , , N, 0, admin, 2024-05-09 11:03:14, 性别未知 +<== Row: 21, 3, 删除, 3, sys_oper_type, , danger, N, 0, admin, 2024-05-09 11:03:14, 删除操作 +<== Row: 102, 3, 其他, 2, recruit_structure_type, null, default, N, 0, admin, 2024-05-11 19:40:59, 各部门自己划分节点 +<== Row: 105, 3, 拒绝, refuse, recruit_process_status, null, danger, N, 0, admin, 2024-05-16 10:49:11, 招聘申请被拒绝 +<== Row: 109, 3, 猎聘, 3, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:27, null +<== Row: 116, 3, 离职补充, 3, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:20, null +<== Row: 123, 3, 2年以上, 3, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:49:49, null +<== Row: 128, 3, 研究生, 3, recruit_process_education, null, warning, N, 0, admin, 2024-05-17 11:46:52, null +<== Row: 131, 3, 学历证明, 3, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:43, null +<== Row: 136, 3, 正在修改, 3, recruit_process_edit, null, success, N, 0, admin, 2024-05-18 17:20:32, null +<== Row: 139, 3, 打回, repulse, recruit_process_node_status, null, info, N, 0, admin, 2024-05-20 14:34:19, null +<== Row: 143, 3, 取消招聘, 2, recruit_post_status, null, warning, N, 0, admin, 2024-05-23 10:43:43, null +<== Row: 148, 3, C, 3, recruit_post_grade, null, success, N, 0, admin, 2024-05-27 17:02:24, null +<== Row: 154, 3, 候选人N, 3, recruit_interview_phoneresult, null, warning, N, 0, admin, 2024-05-31 16:49:51, null +<== Row: 157, 3, -, 2, recruit_interview_pass, null, info, N, 0, admin, 2024-06-04 15:52:40, null +<== Row: 160, 3, 已招聘, 2, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 15:53:49, null +<== Row: 22, 4, 授权, 4, sys_oper_type, , primary, N, 0, admin, 2024-05-09 11:03:14, 授权操作 +<== Row: 106, 4, 同意, approved, recruit_process_status, null, success, N, 0, admin, 2024-05-16 10:49:49, 招聘申请已通过 +<== Row: 110, 4, 内部推荐, 4, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:44, null +<== Row: 117, 4, 短期需要, 4, recruit_process_reason, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-16 17:54:38, null +<== Row: 120, 4, 3-5年, 4, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:48:48, null +<== Row: 132, 4, 技术职称证明, 4, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:50:57, null +<== Row: 149, 4, D, 4, recruit_post_grade, null, info, N, 0, admin, 2024-05-27 17:02:37, null +<== Row: 155, 4, 直接邀约, 4, recruit_interview_phoneresult, null, primary, N, 0, admin, 2024-05-31 16:50:17, null +<== Row: 161, 4, 招聘中, 3, recruit_structure_posttype, null, default, N, 0, admin, 2024-06-05 16:32:39, null +<== Row: 23, 5, 导出, 5, sys_oper_type, , warning, N, 0, admin, 2024-05-09 11:03:14, 导出操作 +<== Row: 111, 5, 官网, 5, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:43:56, null +<== Row: 121, 5, 5年以上, 5, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:49:05, null +<== Row: 133, 5, 其他, 5, recruit_process_materials, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 11:51:07, null +<== Row: 140, 5, 打回, repulse, recruit_process_status, null, info, N, 0, admin, 2024-05-20 14:41:41, 招聘申请已打回 +<== Row: 156, 5, 未接通, 5, recruit_interview_phoneresult, null, info, N, 0, admin, 2024-05-31 16:50:29, null +<== Row: 24, 6, 导入, 6, sys_oper_type, , warning, N, 0, admin, 2024-05-09 11:03:14, 导入操作 +<== Row: 112, 6, 公众号, 6, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:44:08, null +<== Row: 122, 6, 10年以上, 6, recruit_process_experience, el-tag--mini el-tag--plain, primary, N, 0, admin, 2024-05-17 08:49:26, null +<== Row: 25, 7, 强退, 7, sys_oper_type, , danger, N, 0, admin, 2024-05-09 11:03:14, 强退操作 +<== Row: 113, 7, 校招, 7, recruit_process_channel, null, primary, N, 0, admin, 2024-05-16 17:44:19, null +<== Row: 26, 8, 生成代码, 8, sys_oper_type, , warning, N, 0, admin, 2024-05-09 11:03:14, 生成操作 +<== Row: 27, 9, 清空数据, 9, sys_oper_type, , danger, N, 0, admin, 2024-05-09 11:03:14, 清空操作 +<== Row: 18, 99, 其他, 0, sys_oper_type, , info, N, 0, admin, 2024-05-09 11:03:14, 其他操作 +<== Total: 91 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f574cc2] +20:42:52.899 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1220] - Using default implementation for ThreadExecutor +20:42:52.927 [main] INFO o.q.c.SchedulerSignalerImpl - [,61] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +20:42:52.928 [main] INFO o.q.c.QuartzScheduler - [,229] - Quartz Scheduler v.2.3.2 created. +20:42:52.929 [main] INFO o.q.s.RAMJobStore - [initialize,155] - RAMJobStore initialized. +20:42:52.930 [main] INFO o.q.c.QuartzScheduler - [initialize,294] - Scheduler meta-data: Quartz Scheduler (v2.3.2) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +20:42:52.930 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1374] - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +20:42:52.930 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1378] - Quartz scheduler version: 2.3.2 +20:42:52.931 [main] INFO o.q.c.QuartzScheduler - [setJobFactory,2293] - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@45673f68 +Creating a new SqlSession +SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f6bcf87] was not registered for synchronization because synchronization is not active +JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-11 20:42:50.948, closeCount=0, lastValidateTimeMillis=2024-06-11 20:42:50.948}] will not be managed by Spring +==> Preparing: select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark from sys_job +==> Parameters: +<== Columns: job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark +<== Row: 1, 系统默认(无参), DEFAULT, ryTask.ryNoParams, 0/10 * * * * ?, 3, 1, 1, admin, 2024-05-09 11:03:14, +<== Row: 2, 系统默认(有参), DEFAULT, ryTask.ryParams('ry'), 0/15 * * * * ?, 3, 1, 1, admin, 2024-05-09 11:03:14, +<== Row: 3, 系统默认(多参), DEFAULT, ryTask.ryMultipleParams('ry', true, 2000L, 316.50D, 100), 0/20 * * * * ?, 3, 1, 1, admin, 2024-05-09 11:03:14, +<== Total: 3 +Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f6bcf87] + + +,------. ,--. ,--. ,--. +| .--. ' ,--,--. ,---. ,---. | '--' | ,---. | | ,---. ,---. ,--.--. +| '--' | ' ,-. | | .-. | | .-. : | .--. | | .-. : | | | .-. | | .-. : | .--' +| | --' \ '-' | ' '-' ' \ --. | | | | \ --. | | | '-' ' \ --. | | +`--' `--`--' .`- / `----' `--' `--' `----' `--' | |-' `----' `--' + `---' `--' is intercepting. + +20:42:55.531 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-8080"] +20:42:56.445 [main] INFO o.q.c.QuartzScheduler - [start,547] - Scheduler quartzScheduler_$_NON_CLUSTERED started. +20:42:56.467 [main] INFO c.z.RuoYiApplication - [logStarted,61] - Started RuoYiApplication in 13.81 seconds (JVM running for 14.569) +(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ + .-------. ____ __ + | _ _ \ \ \ / / + | ( ' ) | \ _. / ' + |(_ o _) / _( )_ .' + | (_,_).' __ ___(_ o _)' + | |\ \ | || |(_,_)' + | | \ `' /| `-' / + | | \ / \ / + ''-' `'-' `-..-' diff --git a/package.json b/package.json new file mode 100644 index 0000000..6d4f416 --- /dev/null +++ b/package.json @@ -0,0 +1,95 @@ +{ + "name": "zeroerr", + "version": "1.0.0", + "description": "ZeroErrOA系统", + "author": "廖蔚", + "license": "MIT", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "repository": { + "type": "git", + "url": "https://gitee.com/y_project/RuoYi-Vue.git" + }, + "dependencies": { + "@riophae/vue-treeselect": "0.4.0", + "axios": "0.24.0", + "clipboard": "2.0.8", + "core-js": "3.25.3", + "echarts": "^5.5.0", + "element-ui": "2.15.14", + "file-saver": "2.0.5", + "fuse.js": "6.4.3", + "highlight.js": "9.18.5", + "js-beautify": "1.13.0", + "js-cookie": "3.0.1", + "jsencrypt": "3.0.0-rc.1", + "nprogress": "0.2.0", + "quill": "1.3.7", + "screenfull": "5.0.2", + "sortablejs": "1.10.2", + "vue": "2.6.12", + "vue-count-to": "1.0.13", + "vue-cropper": "0.5.5", + "vue-meta": "2.4.0", + "vue-router": "3.4.9", + "vue-tree-color": "^2.3.3", + "vuedraggable": "2.24.3", + "vuex": "3.6.0", + "watermark-dom": "^2.3.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.6", + "@vue/cli-plugin-eslint": "4.4.6", + "@vue/cli-service": "4.4.6", + "babel-eslint": "10.1.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "babel-plugin-transform-vue-jsx": "^3.7.0", + "chalk": "4.1.0", + "compression-webpack-plugin": "6.1.2", + "connect": "3.6.6", + "eslint": "7.15.0", + "eslint-plugin-vue": "7.2.0", + "less": "^3.9.0", + "less-loader": "^4.1.0", + "lint-staged": "10.5.3", + "runjs": "4.4.2", + "sass": "1.32.13", + "sass-loader": "10.1.1", + "script-ext-html-webpack-plugin": "2.1.5", + "svg-sprite-loader": "5.1.1", + "vue-template-compiler": "2.6.12" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..9f5570c Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/html/ie.html b/public/html/ie.html new file mode 100644 index 0000000..052ffcd --- /dev/null +++ b/public/html/ie.html @@ -0,0 +1,46 @@ + + + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..925455c --- /dev/null +++ b/public/index.html @@ -0,0 +1,208 @@ + + + + + + + + + <%= webpackConfig.name %> + + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..cfb4298 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,65 @@ + + + + diff --git a/src/api/home/echart.js b/src/api/home/echart.js new file mode 100644 index 0000000..c7e8d98 --- /dev/null +++ b/src/api/home/echart.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + + +//获取简历分析数据 + export function getResumeStat(query) { + console.log(query) + return request({ + url: '/home/getResumeStat', + method: 'get', + params: query + }) + } +//获取公告 +export function getAnnouncementList() { + return request({ + url: '/home/getAnnouncement', + method: 'get', + }) +} \ No newline at end of file diff --git a/src/api/login.js b/src/api/login.js new file mode 100644 index 0000000..7b7388f --- /dev/null +++ b/src/api/login.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 登录方法 +export function login(username, password, code, uuid) { + const data = { + username, + password, + code, + uuid + } + return request({ + url: '/login', + headers: { + isToken: false, + repeatSubmit: false + }, + method: 'post', + data: data + }) +} + +// 注册方法 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post' + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + headers: { + isToken: false + }, + method: 'get', + timeout: 20000 + }) +} \ No newline at end of file diff --git a/src/api/menu.js b/src/api/menu.js new file mode 100644 index 0000000..faef101 --- /dev/null +++ b/src/api/menu.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取路由 +export const getRouters = () => { + return request({ + url: '/getRouters', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/monitor/cache.js b/src/api/monitor/cache.js new file mode 100644 index 0000000..72c5f6a --- /dev/null +++ b/src/api/monitor/cache.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} + +// 查询缓存名称列表 +export function listCacheName() { + return request({ + url: '/monitor/cache/getNames', + method: 'get' + }) +} + +// 查询缓存键名列表 +export function listCacheKey(cacheName) { + return request({ + url: '/monitor/cache/getKeys/' + cacheName, + method: 'get' + }) +} + +// 查询缓存内容 +export function getCacheValue(cacheName, cacheKey) { + return request({ + url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, + method: 'get' + }) +} + +// 清理指定名称缓存 +export function clearCacheName(cacheName) { + return request({ + url: '/monitor/cache/clearCacheName/' + cacheName, + method: 'delete' + }) +} + +// 清理指定键名缓存 +export function clearCacheKey(cacheKey) { + return request({ + url: '/monitor/cache/clearCacheKey/' + cacheKey, + method: 'delete' + }) +} + +// 清理全部缓存 +export function clearCacheAll() { + return request({ + url: '/monitor/cache/clearCacheAll', + method: 'delete' + }) +} diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js new file mode 100644 index 0000000..3815569 --- /dev/null +++ b/src/api/monitor/job.js @@ -0,0 +1,71 @@ +import request from '@/utils/request' + +// 查询定时任务调度列表 +export function listJob(query) { + return request({ + url: '/monitor/job/list', + method: 'get', + params: query + }) +} + +// 查询定时任务调度详细 +export function getJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'get' + }) +} + +// 新增定时任务调度 +export function addJob(data) { + return request({ + url: '/monitor/job', + method: 'post', + data: data + }) +} + +// 修改定时任务调度 +export function updateJob(data) { + return request({ + url: '/monitor/job', + method: 'put', + data: data + }) +} + +// 删除定时任务调度 +export function delJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'delete' + }) +} + +// 任务状态修改 +export function changeJobStatus(jobId, status) { + const data = { + jobId, + status + } + return request({ + url: '/monitor/job/changeStatus', + method: 'put', + data: data + }) +} + + +// 定时任务立即执行一次 +export function runJob(jobId, jobGroup) { + const data = { + jobId, + jobGroup + } + return request({ + url: '/monitor/job/run', + method: 'put', + data: data + }) +} \ No newline at end of file diff --git a/src/api/monitor/jobLog.js b/src/api/monitor/jobLog.js new file mode 100644 index 0000000..6e0be61 --- /dev/null +++ b/src/api/monitor/jobLog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询调度日志列表 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 删除调度日志 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 清空调度日志 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} diff --git a/src/api/monitor/logininfor.js b/src/api/monitor/logininfor.js new file mode 100644 index 0000000..4d112b7 --- /dev/null +++ b/src/api/monitor/logininfor.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 解锁用户登录状态 +export function unlockLogininfor(userName) { + return request({ + url: '/monitor/logininfor/unlock/' + userName, + method: 'get' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js new file mode 100644 index 0000000..bd22137 --- /dev/null +++ b/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询在线用户列表 +export function list(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/src/api/monitor/operlog.js b/src/api/monitor/operlog.js new file mode 100644 index 0000000..a04bca8 --- /dev/null +++ b/src/api/monitor/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js new file mode 100644 index 0000000..e1f9ca2 --- /dev/null +++ b/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取服务信息 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/recruit/apply.js b/src/api/recruit/apply.js new file mode 100644 index 0000000..1a644df --- /dev/null +++ b/src/api/recruit/apply.js @@ -0,0 +1,76 @@ +import request from '@/utils/request' + + +// 组织架构图片上传 +export function uploadstructureImages(data) { + return request({ + url: '/recruit/process/structure/images', + method: 'post', + data: data + }) +} + + // 新增招聘申请审批 +export function addApplyList(data) { + return request({ + url: '/recruit/process/apply', + method: 'post', + data: data + }) +} + + // 获取所有二级组织架构 + export function getSecond(data) { + return request({ + url: '/recruit/process/apply/listDept', + method: 'get', + data: data + }) + } + + + // 获取所有二级组织架构 + export function listStructurePost(data) { + return request({ + url: '/recruit/process/apply/listStructurePost', + method: 'get', + data: data + }) + } + + + // 查询节点列表 +export function listApply(query) { + return request({ + url: '/recruit/process/apply/list', + method: 'get', + params: query + }) +} + + +// 查询审批单据详细 +export function getApplyTask(taskId) { + return request({ + url: '/recruit/process/' + taskId, + method: 'get' + }) +} + + +// 撤销单据 +export function cancelApplyTask(taskId) { + return request({ + url: '/recruit/process/apply/' + taskId, + method: 'put' + }) +} + +//修改后重新申请 +export function reapply(data) { + return request({ + url: '/recruit/process/apply/reapply', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/src/api/recruit/approved.js b/src/api/recruit/approved.js new file mode 100644 index 0000000..e7b73d2 --- /dev/null +++ b/src/api/recruit/approved.js @@ -0,0 +1,13 @@ +import request from '@/utils/request' + + + + // 查询节点列表 +export function listApproved(query) { + return request({ + url: '/recruit/process/approved/list', + method: 'get', + params: query + }) +} + diff --git a/src/api/recruit/entry.js b/src/api/recruit/entry.js new file mode 100644 index 0000000..baad51f --- /dev/null +++ b/src/api/recruit/entry.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + + +//新增入职管理记录 +export function addEntryRecord(data) { + return request({ + url: '/recruit/entryManage/add', + method: 'post', + data: data + }) +} + +//修改入职管理记录 +export function editEntryRecord(data) { + return request({ + url: '/recruit/entryManage/edit', + method: 'put', + data: data + }) +} + +//查询某个入职管理的记录 +export function getEntryRecord(entryId) { + return request({ + url: '/recruit/entryManage/get/' + entryId, + method: 'get' + }) +} + +//查询入职管理记录列表 +export function listEntryRecord(query) { + return request({ + url: '/recruit/entryManage/list', + method: 'get', + params: query + }) +} + +//删除入职管理记录 +export function deleteEntryRecord(entryId) { + return request({ + url: '/recruit/entryManage/delete/' + entryId, + method: 'delete' + }) +} + + +//查看入职管理统计 +export function getStatistics(year) { + return request({ + url: '/recruit/entryManage/getStatistics/' + year, + method: 'get' + }) +} diff --git a/src/api/recruit/follow.js b/src/api/recruit/follow.js new file mode 100644 index 0000000..5225e69 --- /dev/null +++ b/src/api/recruit/follow.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + + // 新增招聘计划与统计跟踪 + export function addFollow(data) { + return request({ + url: '/recruit/process/follow/add', + method: 'post', + data: data + }) + } + + + + // 查询新增招聘计划与统计跟踪列表 +export function listFollow(query) { + return request({ + url: '/recruit/process/follow/list', + method: 'get', + params: query + }) +} + + + // 查询某个招聘计划与统计详细信息 + export function getFollowById(id) { + return request({ + url: '/recruit/process/follow/' +id, + method: 'get', + }) + } + + + // 修改某个招聘计划与统计详细信息 + export function editFollowById(data) { + return request({ + url: '/recruit/process/follow/edit' , + method: 'put', + data: data + }) + } + + + // 删除某个招聘计划与统计详细信息 + export function deleteFollowById(id) { + return request({ + url: '/recruit/process/follow/delete/' +id, + method: 'delete', + }) + } \ No newline at end of file diff --git a/src/api/recruit/grade.js b/src/api/recruit/grade.js new file mode 100644 index 0000000..c9b7ac9 --- /dev/null +++ b/src/api/recruit/grade.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + + // 查询岗位评级列表 +export function listPostGrade(query) { + return request({ + url: '/recruit/postGrade/list', + method: 'get', + params: query + }) +} + +//新增岗位评级 +export function addPostGrade(data) { + return request({ + url: '/recruit/postGrade/add', + method: 'post', + data: data + }) +} + + +//修改岗位评级 +export function editPostGrade(data) { + return request({ + url: '/recruit/postGrade/edit', + method: 'put', + data: data + }) +} + + +//删除岗位评级 +export function deletePostGrade(gradeId) { + return request({ + url: '/recruit/postGrade/delete/'+gradeId, + method: 'delete', + }) +} + +export function getOnePostGrade(gradeId) { + return request({ + url: '/recruit/postGrade/get/'+gradeId, + method: 'get', + }) +} diff --git a/src/api/recruit/home.js b/src/api/recruit/home.js new file mode 100644 index 0000000..128c73f --- /dev/null +++ b/src/api/recruit/home.js @@ -0,0 +1,11 @@ +import request from '@/utils/request' + + +//获取当前月份的岗位数据 +export function getMonthPost(data) { + return request({ + url: '/home/getRecruitingPost', + method: 'get', + data: data + }) +} \ No newline at end of file diff --git a/src/api/recruit/interview.js b/src/api/recruit/interview.js new file mode 100644 index 0000000..ad791bc --- /dev/null +++ b/src/api/recruit/interview.js @@ -0,0 +1,87 @@ +import request from '@/utils/request' + + +//获取所有用户的名字(领导+hr) +export function getUserList(data) { + return request({ + url: '/recruit/process/interview/getAllUser', + method: 'get', + data: data + }) +} + + + // 新增简历跟进记录 + export function addInterviewFollow(data) { + return request({ + url: '/recruit/process/interview/add', + method: 'post', + data: data + }) + } + + + + // 查询简历跟进列表 +export function listInterViewFollow(query) { + return request({ + url: '/recruit/process/interview/list', + method: 'get', + params: query + }) +} + + + // 查询某个简历跟进详细信息 + export function getInterViewFollow(id) { + return request({ + url: '/recruit/process/interview/' +id, + method: 'get', + }) + } + + + // 修改简历跟进记录 + export function editInterviewFollow(data) { + return request({ + url: '/recruit/process/interview/edit', + method: 'put', + data: data + }) + } + + // 修改简历跟进记录是否置顶 + export function editTop(data) { + return request({ + url: '/recruit/process/interview/editTopping', + method: 'put', + data: data + }) + } + + // 删除某个简历跟进详细信息 + export function deleteInterViewFollow(id) { + return request({ + url: '/recruit/process/interview/' +id, + method: 'delete', + }) + } + + + // 简历上传 +export function uploadResume(data) { + return request({ + url: '/recruit/process/interview/uploadResume', + method: 'post', + data: data + }) +} + +//返回面试标签的树状列表 +export function InterviewTag(data) { + return request({ + url: '/recruit/process/interview/tag', + method: 'get', + data: data + }) +} \ No newline at end of file diff --git a/src/api/recruit/jd.js b/src/api/recruit/jd.js new file mode 100644 index 0000000..c75bce0 --- /dev/null +++ b/src/api/recruit/jd.js @@ -0,0 +1,13 @@ +import request from '@/utils/request' + + + + // 查询节点列表 +export function listJd(query) { + return request({ + url: '/recruit/process/jd/list', + method: 'get', + params: query + }) +} + diff --git a/src/api/recruit/mypost.js b/src/api/recruit/mypost.js new file mode 100644 index 0000000..b651903 --- /dev/null +++ b/src/api/recruit/mypost.js @@ -0,0 +1,79 @@ +import request from '@/utils/request' + + // 查询节点列表 +export function listmypost(query) { + return request({ + url: '/recruit/process/mypost/list', + method: 'get', + params: query + }) +} + + // 新增岗位处理记录 + export function addResumeRecord(data) { + return request({ + url: '/recruit/process/mypost/resume/add', + method: 'post', + data: data + }) + } + + + //获取所有我负责的岗位名称 +export function getMyPostList(data) { + return request({ + url: '/recruit/process/mypost/resume/postList', + method: 'get', + data: data + }) +} + + + //获取所有我的简历处理记录 + export function getResumeRecordList(query) { + return request({ + url: '/recruit/process/mypost/resume/getRecordList', + method: 'get', + params: query + }) + } + + + +// 查询某个我的简历处理记录 +export function getResumeRecord(id) { + return request({ + url: '/recruit/process/mypost/resume/getRecord/' + id, + method: 'get' + }) +} + + + +//修改某建立处理记录 +export function edit(data) { + return request({ + url: '/recruit/process/mypost/resume/edit', + method: 'put', + data: data + }) +} + + +//删除某建立处理记录 +export function deleteRecord(id) { + return request({ + url: '/recruit/process/mypost/resume/delete/'+ id, + method: 'delete' + }) +} + + +//修改某岗位的招聘状态 +export function editPostStatus(data) { + return request({ + url: '/recruit/process/mypost/edit', + method: 'put', + data: data + }) +} diff --git a/src/api/recruit/pending.js b/src/api/recruit/pending.js new file mode 100644 index 0000000..5d35df8 --- /dev/null +++ b/src/api/recruit/pending.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + + + + // 查询节点列表 +export function listPending(query) { + return request({ + url: '/recruit/process/pending/list', + method: 'get', + params: query + }) +} + + // 审批某节点 + export function audit(data) { + return request({ + url: '/recruit/process/pending/audit', + method: 'put', + data: data + }) + } + + +//修改某单据参数 + export function edit(data) { + return request({ + url: '/recruit/process/pending/edit/', + method: 'put', + data: data + }) + } + + + +//获取所有hr的名字 +export function getHrList(data) { + return request({ + url: '/recruit/process/pending/getHr', + method: 'get', + data: data + }) +} + +//获取打回/修改记录 +export function getEditRecord(taskId) { + return request({ + url: '/recruit/process/mypost/getRecord/'+taskId, + method: 'get', + }) +} \ No newline at end of file diff --git a/src/api/recruit/postsea.js b/src/api/recruit/postsea.js new file mode 100644 index 0000000..e9fa510 --- /dev/null +++ b/src/api/recruit/postsea.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + + // 查询节点列表 +export function listpostsea(query) { + return request({ + url: 'recruit/process/postsea/list', + method: 'get', + params: query + }) +} + +//分配hr +export function distributionPost(data) { + return request({ + url: '/recruit/process/postsea/distribution', + method: 'put', + data: data + }) +} + + +export function getRecord(postId) { + return request({ + url: '/recruit/process/mypost/getOne/' + postId, + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/recruit/structure.js b/src/api/recruit/structure.js new file mode 100644 index 0000000..79bae3e --- /dev/null +++ b/src/api/recruit/structure.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 查询节点列表 +export function listNode(query) { + return request({ + url: '/recruit/structure/list', + method: 'get', + params: query + }) +} + + +// 新增节点 +export function addNode(data) { + return request({ + url: '/recruit/structure', + method: 'post', + data: data + }) +} + + + +// 修改部门 +export function updateNode(data) { + return request({ + url: '/recruit/structure', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delNode(nodeId) { + return request({ + url: '/recruit/structure/' + nodeId, + method: 'delete' + }) +} + +// 查询部门详细 +export function getNode(nodeId) { + return request({ + url: '/recruit/structure/' + nodeId, + method: 'get' + }) +} + + +// 查询部门列表(排除节点) +export function listNodeExcludeChild(nodeId) { + return request({ + url: '/recruit/structure/list/exclude/' + nodeId, + method: 'get' + }) +} + + + +// 查询岗位对应的部门 +export function getDeptByNodeId(nodeId) { + return request({ + url: '/recruit/process/apply/listDept/' + nodeId, + method: 'get' + }) +} diff --git a/src/api/system/config.js b/src/api/system/config.js new file mode 100644 index 0000000..a404d82 --- /dev/null +++ b/src/api/system/config.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} diff --git a/src/api/system/dept.js b/src/api/system/dept.js new file mode 100644 index 0000000..fc943cd --- /dev/null +++ b/src/api/system/dept.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询部门列表 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query + }) +} + +// 查询部门列表(排除节点) +export function listDeptExcludeChild(deptId) { + return request({ + url: '/system/dept/list/exclude/' + deptId, + method: 'get' + }) +} + +// 查询部门详细 +export function getDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'get' + }) +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/dict/data.js b/src/api/system/dict/data.js new file mode 100644 index 0000000..6c9eb79 --- /dev/null +++ b/src/api/system/dict/data.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} diff --git a/src/api/system/dict/type.js b/src/api/system/dict/type.js new file mode 100644 index 0000000..a7a6e01 --- /dev/null +++ b/src/api/system/dict/type.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 刷新字典缓存 +export function refreshCache() { + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete' + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..f6415c6 --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get' + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/menu/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data: data + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/notice.js b/src/api/system/notice.js new file mode 100644 index 0000000..c274ea5 --- /dev/null +++ b/src/api/system/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/post.js b/src/api/system/post.js new file mode 100644 index 0000000..1a8e9ca --- /dev/null +++ b/src/api/system/post.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询岗位列表 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query + }) +} + +// 查询岗位详细 +export function getPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'get' + }) +} + +// 新增岗位 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data: data + }) +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 删除岗位 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} diff --git a/src/api/system/role.js b/src/api/system/role.js new file mode 100644 index 0000000..f13e6f4 --- /dev/null +++ b/src/api/system/role.js @@ -0,0 +1,119 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'get' + }) +} + +// 新增角色 +export function addRole(data) { + return request({ + url: '/system/role', + method: 'post', + data: data + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role', + method: 'put', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 查询角色已授权用户列表 +export function allocatedUserList(query) { + return request({ + url: '/system/role/authUser/allocatedList', + method: 'get', + params: query + }) +} + +// 查询角色未授权用户列表 +export function unallocatedUserList(query) { + return request({ + url: '/system/role/authUser/unallocatedList', + method: 'get', + params: query + }) +} + +// 取消用户授权角色 +export function authUserCancel(data) { + return request({ + url: '/system/role/authUser/cancel', + method: 'put', + data: data + }) +} + +// 批量取消用户授权角色 +export function authUserCancelAll(data) { + return request({ + url: '/system/role/authUser/cancelAll', + method: 'put', + params: data + }) +} + +// 授权用户选择 +export function authUserSelectAll(data) { + return request({ + url: '/system/role/authUser/selectAll', + method: 'put', + params: data + }) +} + +// 根据角色ID查询部门树结构 +export function deptTreeSelect(roleId) { + return request({ + url: '/system/role/deptTree/' + roleId, + method: 'get' + }) +} diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..10cd23d --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,135 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/profile ', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data: data + }) +} + +// 查询授权角色 +export function getAuthRole(userId) { + return request({ + url: '/system/user/authRole/' + userId, + method: 'get' + }) +} + +// 保存授权角色 +export function updateAuthRole(data) { + return request({ + url: '/system/user/authRole', + method: 'put', + params: data + }) +} + +// 查询部门下拉树结构 +export function deptTreeSelect() { + return request({ + url: '/system/user/deptTree', + method: 'get' + }) +} diff --git a/src/api/tool/gen.js b/src/api/tool/gen.js new file mode 100644 index 0000000..2075677 --- /dev/null +++ b/src/api/tool/gen.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' + +// 查询生成表数据 +export function listTable(query) { + return request({ + url: '/tool/gen/list', + method: 'get', + params: query + }) +} +// 查询db数据库列表 +export function listDbTable(query) { + return request({ + url: '/tool/gen/db/list', + method: 'get', + params: query + }) +} + +// 查询表详细信息 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 修改代码生成信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen', + method: 'put', + data: data + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} + +// 创建表 +export function createTable(data) { + return request({ + url: '/tool/gen/createTable', + method: 'post', + params: data + }) +} + +// 预览生成代码 +export function previewTable(tableId) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'get' + }) +} + +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 生成代码(自定义路径) +export function genCode(tableName) { + return request({ + url: '/tool/gen/genCode/' + tableName, + method: 'get' + }) +} + +// 同步数据库 +export function synchDb(tableName) { + return request({ + url: '/tool/gen/synchDb/' + tableName, + method: 'get' + }) +} diff --git a/src/assets/401_images/401.gif b/src/assets/401_images/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/src/assets/401_images/401.gif differ diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/src/assets/404_images/404.png differ diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000..c6281d0 Binary files /dev/null and b/src/assets/404_images/404_cloud.png differ diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/src/assets/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/src/assets/icons/svg/404.svg b/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/bug.svg b/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/build.svg b/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/button.svg b/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/cascader.svg b/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/checkbox.svg b/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/clipboard.svg b/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/code.svg b/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..5f9c5ab --- /dev/null +++ b/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/color.svg b/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/component.svg b/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/date-range.svg b/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/date.svg b/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..52dc73e --- /dev/null +++ b/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dict.svg b/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..4849377 --- /dev/null +++ b/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/documentation.svg b/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/download.svg b/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..c896951 --- /dev/null +++ b/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/downloadResume.svg b/src/assets/icons/svg/downloadResume.svg new file mode 100644 index 0000000..1ef4b21 --- /dev/null +++ b/src/assets/icons/svg/downloadResume.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/drag.svg b/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/druid.svg b/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..a2b4b4e --- /dev/null +++ b/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/email.svg b/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/entryPeople.svg b/src/assets/icons/svg/entryPeople.svg new file mode 100644 index 0000000..e4f6f70 --- /dev/null +++ b/src/assets/icons/svg/entryPeople.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/entryPersent.svg b/src/assets/icons/svg/entryPersent.svg new file mode 100644 index 0000000..c18c7ea --- /dev/null +++ b/src/assets/icons/svg/entryPersent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/example.svg b/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/excel.svg b/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/eye-open.svg b/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/eye.svg b/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/findResume.svg b/src/assets/icons/svg/findResume.svg new file mode 100644 index 0000000..0323c3f --- /dev/null +++ b/src/assets/icons/svg/findResume.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/firstPeople.svg b/src/assets/icons/svg/firstPeople.svg new file mode 100644 index 0000000..0071068 --- /dev/null +++ b/src/assets/icons/svg/firstPeople.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/form.svg b/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/github.svg b/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..db0a0d4 --- /dev/null +++ b/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/guide.svg b/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/haveProcess.svg b/src/assets/icons/svg/haveProcess.svg new file mode 100644 index 0000000..f770c26 --- /dev/null +++ b/src/assets/icons/svg/haveProcess.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/input.svg b/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/interview.svg b/src/assets/icons/svg/interview.svg new file mode 100644 index 0000000..411e12b --- /dev/null +++ b/src/assets/icons/svg/interview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/invitepercent.svg b/src/assets/icons/svg/invitepercent.svg new file mode 100644 index 0000000..0073e98 --- /dev/null +++ b/src/assets/icons/svg/invitepercent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/job.svg b/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..2a93a25 --- /dev/null +++ b/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/language.svg b/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/log.svg b/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..d879d33 --- /dev/null +++ b/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/logininfor.svg b/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..267f844 --- /dev/null +++ b/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/money.svg b/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..bc308cb --- /dev/null +++ b/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/more.svg b/src/assets/icons/svg/more.svg new file mode 100644 index 0000000..d4daae5 --- /dev/null +++ b/src/assets/icons/svg/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/myProcess.svg b/src/assets/icons/svg/myProcess.svg new file mode 100644 index 0000000..d73290d --- /dev/null +++ b/src/assets/icons/svg/myProcess.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/myRecruit.svg b/src/assets/icons/svg/myRecruit.svg new file mode 100644 index 0000000..500baa4 --- /dev/null +++ b/src/assets/icons/svg/myRecruit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/number.svg b/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/online.svg b/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..330a202 --- /dev/null +++ b/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/passPeople.svg b/src/assets/icons/svg/passPeople.svg new file mode 100644 index 0000000..ee2aca9 --- /dev/null +++ b/src/assets/icons/svg/passPeople.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/passPersent.svg b/src/assets/icons/svg/passPersent.svg new file mode 100644 index 0000000..4371303 --- /dev/null +++ b/src/assets/icons/svg/passPersent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/password.svg b/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..6c64def --- /dev/null +++ b/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/pdf.svg b/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..ab8e8c4 --- /dev/null +++ b/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/post.svg b/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..2922c61 --- /dev/null +++ b/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/qq.svg b/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/question.svg b/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..cf75bd4 --- /dev/null +++ b/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/radio.svg b/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/rate.svg b/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/redis-list.svg b/src/assets/icons/svg/redis-list.svg new file mode 100644 index 0000000..98a15b2 --- /dev/null +++ b/src/assets/icons/svg/redis-list.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/redis.svg b/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..2f1d62d --- /dev/null +++ b/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/refresh.svg b/src/assets/icons/svg/refresh.svg new file mode 100644 index 0000000..8fe669d --- /dev/null +++ b/src/assets/icons/svg/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/resume.svg b/src/assets/icons/svg/resume.svg new file mode 100644 index 0000000..bf32a90 --- /dev/null +++ b/src/assets/icons/svg/resume.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/row.svg b/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/search.svg b/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/select.svg b/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/self.svg b/src/assets/icons/svg/self.svg new file mode 100644 index 0000000..de6e495 --- /dev/null +++ b/src/assets/icons/svg/self.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/server.svg b/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..eb287e3 --- /dev/null +++ b/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/shopping.svg b/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/slider.svg b/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/star.svg b/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..05d4e7b --- /dev/null +++ b/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/switch.svg b/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/system.svg b/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..5992593 --- /dev/null +++ b/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/table.svg b/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/textarea.svg b/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/time-range.svg b/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/time.svg b/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tool.svg b/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..48e0e35 --- /dev/null +++ b/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/upload.svg b/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/user.svg b/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/waitProcess.svg b/src/assets/icons/svg/waitProcess.svg new file mode 100644 index 0000000..9a90127 --- /dev/null +++ b/src/assets/icons/svg/waitProcess.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/zip.svg b/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svgo.yml b/src/assets/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/src/assets/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/src/assets/images/dark.svg b/src/assets/images/dark.svg new file mode 100644 index 0000000..f646bd7 --- /dev/null +++ b/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/light.svg b/src/assets/images/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/login-background.jpg b/src/assets/images/login-background.jpg new file mode 100644 index 0000000..4cbb103 Binary files /dev/null and b/src/assets/images/login-background.jpg differ diff --git a/src/assets/images/pay.png b/src/assets/images/pay.png new file mode 100644 index 0000000..bb8b967 Binary files /dev/null and b/src/assets/images/pay.png differ diff --git a/src/assets/images/profile.jpg b/src/assets/images/profile.jpg new file mode 100644 index 0000000..9f5570c Binary files /dev/null and b/src/assets/images/profile.jpg differ diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png new file mode 100644 index 0000000..9f5570c Binary files /dev/null and b/src/assets/logo/logo.png differ diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss new file mode 100644 index 0000000..e6ba1a8 --- /dev/null +++ b/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..363092a --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,92 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +.el-menu--collapse + > div + > .el-submenu + > .el-submenu__title + .el-submenu__icon-arrow { + display: none; +} \ No newline at end of file diff --git a/src/assets/styles/element-variables.scss b/src/assets/styles/element-variables.scss new file mode 100644 index 0000000..1615ff2 --- /dev/null +++ b/src/assets/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #1890ff; +$--color-success: #13ce66; +$--color-warning: #ffba00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border: 1px solid #dfe6ec; + +/* icon font path, required */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "~element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..2f3b9ef --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,182 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} diff --git a/src/assets/styles/mixin.scss b/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss new file mode 100644 index 0000000..4e29874 --- /dev/null +++ b/src/assets/styles/ruoyi.scss @@ -0,0 +1,291 @@ +/** +* 通用css样式布局处理 +* Copyright (c) 2019 ruoyi +*/ + +/** 基础通用 **/ +.pt5 { + padding-top: 5px; +} + +.pr5 { + padding-right: 5px; +} + +.pb5 { + padding-bottom: 5px; +} + +.mt5 { + margin-top: 5px; +} + +.mr5 { + margin-right: 5px; +} + +.mb5 { + margin-bottom: 5px; +} + +.mb8 { + margin-bottom: 8px; +} + +.ml5 { + margin-left: 5px; +} + +.mt10 { + margin-top: 10px; +} + +.mr10 { + margin-right: 10px; +} + +.mb10 { + margin-bottom: 10px; +} +.ml10 { + margin-left: 10px; +} + +.mt20 { + margin-top: 20px; +} + +.mr20 { + margin-right: 20px; +} + +.mb20 { + margin-bottom: 20px; +} +.ml20 { + margin-left: 20px; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.el-message-box__status + .el-message-box__message{ + word-break: break-word; +} + +.el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; +} + +.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; +} + +.el-table { + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9; + color: #515a6e; + height: 40px; + font-size: 13px; + } + } + + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 表单布局 **/ +.form-header { + font-size: 15px; + color: #6379bb; + border-bottom: 1px solid #ddd; + margin: 8px 10px 25px 10px; + padding-bottom: 5px +} + +/** 表格布局 **/ +.pagination-container { + position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius: 4px; +} + +.pagination-container .el-pagination { + right: 0; + position: absolute; +} + +@media (max-width: 768px) { + .pagination-container .el-pagination > .el-pagination__jump { + display: none !important; + } + .pagination-container .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-table .fixed-width .el-button--mini { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link,.el-table .el-dropdown-selfdefine { + cursor: pointer; + margin-left: 5px; +} + +.el-table .el-dropdown, .el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; +} + +.el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: relative; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 拖拽列样式 */ +.sortable-ghost { + opacity: .8; + color: #fff !important; + background: #42b983 !important; +} + +.top-right-btn { + position: relative; + float: right; +} diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..abe5b63 --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,227 @@ +#app { + + .main-container { + height: 100%; + transition: margin-left .28s; + margin-left: $base-sidebar-width; + position: relative; + } + + .sidebarHide { + margin-left: 0!important; + } + + .sidebar-container { + -webkit-transition: width .28s; + transition: width 0.28s; + width: $base-sidebar-width !important; + background-color: $base-menu-background; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 2px 0 6px rgba(0,21,41,.35); + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + .el-menu-item, .el-submenu__title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-submenu__title { + color: $base-menu-color-active !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $base-sidebar-width !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-submenu>.el-submenu__title, + & .theme-dark .el-submenu .el-menu-item { + background-color: $base-sub-menu-background !important; + + &:hover { + background-color: $base-sub-menu-hover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $base-sidebar-width !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$base-sidebar-width, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/assets/styles/transition.scss b/src/assets/styles/transition.scss new file mode 100644 index 0000000..073f8c6 --- /dev/null +++ b/src/assets/styles/transition.scss @@ -0,0 +1,49 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform--move, +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/assets/styles/variables.scss b/src/assets/styles/variables.scss new file mode 100644 index 0000000..34484d4 --- /dev/null +++ b/src/assets/styles/variables.scss @@ -0,0 +1,54 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// 默认菜单主题风格 +$base-menu-color:#bfcbd9; +$base-menu-color-active:#f4f4f5; +$base-menu-background:#304156; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#1f2d3d; +$base-sub-menu-hover:#001528; + +// 自定义暗色菜单风格 +/** +$base-menu-color:hsla(0,0%,100%,.65); +$base-menu-color-active:#fff; +$base-menu-background:#001529; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#000c17; +$base-sub-menu-hover:#001528; +*/ + +$base-sidebar-width: 200px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuColor: $base-menu-color; + menuLightColor: $base-menu-light-color; + menuColorActive: $base-menu-color-active; + menuBackground: $base-menu-background; + menuLightBackground: $base-menu-light-background; + subMenuBackground: $base-sub-menu-background; + subMenuHover: $base-sub-menu-hover; + sideBarWidth: $base-sidebar-width; + logoTitleColor: $base-logo-title-color; + logoLightTitleColor: $base-logo-light-title-color +} diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..1696f54 --- /dev/null +++ b/src/components/Breadcrumb/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/Crontab/day.vue b/src/components/Crontab/day.vue new file mode 100644 index 0000000..fe3eaf0 --- /dev/null +++ b/src/components/Crontab/day.vue @@ -0,0 +1,161 @@ + + + diff --git a/src/components/Crontab/hour.vue b/src/components/Crontab/hour.vue new file mode 100644 index 0000000..4b1f1fc --- /dev/null +++ b/src/components/Crontab/hour.vue @@ -0,0 +1,114 @@ + + + diff --git a/src/components/Crontab/index.vue b/src/components/Crontab/index.vue new file mode 100644 index 0000000..3963df2 --- /dev/null +++ b/src/components/Crontab/index.vue @@ -0,0 +1,430 @@ + + + + diff --git a/src/components/Crontab/min.vue b/src/components/Crontab/min.vue new file mode 100644 index 0000000..43cab90 --- /dev/null +++ b/src/components/Crontab/min.vue @@ -0,0 +1,116 @@ + + + \ No newline at end of file diff --git a/src/components/Crontab/month.vue b/src/components/Crontab/month.vue new file mode 100644 index 0000000..fd0ac38 --- /dev/null +++ b/src/components/Crontab/month.vue @@ -0,0 +1,114 @@ + + + diff --git a/src/components/Crontab/result.vue b/src/components/Crontab/result.vue new file mode 100644 index 0000000..aea6e0e --- /dev/null +++ b/src/components/Crontab/result.vue @@ -0,0 +1,559 @@ + + + diff --git a/src/components/Crontab/second.vue b/src/components/Crontab/second.vue new file mode 100644 index 0000000..e7b7761 --- /dev/null +++ b/src/components/Crontab/second.vue @@ -0,0 +1,117 @@ + + + diff --git a/src/components/Crontab/week.vue b/src/components/Crontab/week.vue new file mode 100644 index 0000000..1cec700 --- /dev/null +++ b/src/components/Crontab/week.vue @@ -0,0 +1,202 @@ + + + diff --git a/src/components/Crontab/year.vue b/src/components/Crontab/year.vue new file mode 100644 index 0000000..5487a6c --- /dev/null +++ b/src/components/Crontab/year.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/components/DictData/index.js b/src/components/DictData/index.js new file mode 100644 index 0000000..7b85d4a --- /dev/null +++ b/src/components/DictData/index.js @@ -0,0 +1,49 @@ +import Vue from 'vue' +import store from '@/store' +import DataDict from '@/utils/dict' +import { getDicts as getDicts } from '@/api/system/dict/data' + +function searchDictByKey(dict, key) { + if (key == null && key == "") { + return null + } + try { + for (let i = 0; i < dict.length; i++) { + if (dict[i].key == key) { + return dict[i].value + } + } + } catch (e) { + return null + } +} + +function install() { + Vue.use(DataDict, { + metas: { + '*': { + labelField: 'dictLabel', + valueField: 'dictValue', + request(dictMeta) { + const storeDict = searchDictByKey(store.getters.dict, dictMeta.type) + if (storeDict) { + return new Promise(resolve => { resolve(storeDict) }) + } else { + return new Promise((resolve, reject) => { + getDicts(dictMeta.type).then(res => { + store.dispatch('dict/setDict', { key: dictMeta.type, value: res.data }) + resolve(res.data) + }).catch(error => { + reject(error) + }) + }) + } + }, + }, + }, + }) +} + +export default { + install, +} \ No newline at end of file diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue new file mode 100644 index 0000000..6b5b230 --- /dev/null +++ b/src/components/DictTag/index.vue @@ -0,0 +1,89 @@ + + + + diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue new file mode 100644 index 0000000..8981d76 --- /dev/null +++ b/src/components/Editor/index.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue new file mode 100644 index 0000000..c7f6b0a --- /dev/null +++ b/src/components/FileUpload/index.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..7d6780b --- /dev/null +++ b/src/components/HeaderSearch/index.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue new file mode 100644 index 0000000..8dadc02 --- /dev/null +++ b/src/components/IconSelect/index.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..99e5c54 --- /dev/null +++ b/src/components/IconSelect/requireIcons.js @@ -0,0 +1,11 @@ + +const req = require.context('../../assets/icons/svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys() + +const re = /\.\/(.*)\.svg/ + +const icons = requireAll(req).map(i => { + return i.match(re)[1] +}) + +export default icons diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue new file mode 100644 index 0000000..3c770c7 --- /dev/null +++ b/src/components/ImagePreview/index.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue new file mode 100644 index 0000000..2e64c9b --- /dev/null +++ b/src/components/ImageUpload/index.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue new file mode 100644 index 0000000..56f5a6b --- /dev/null +++ b/src/components/Pagination/index.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/src/components/PanThumb/index.vue b/src/components/PanThumb/index.vue new file mode 100644 index 0000000..1bcf417 --- /dev/null +++ b/src/components/PanThumb/index.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/src/components/ParentView/index.vue b/src/components/ParentView/index.vue new file mode 100644 index 0000000..7bf6148 --- /dev/null +++ b/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue new file mode 100644 index 0000000..5abeecb --- /dev/null +++ b/src/components/RightPanel/index.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/src/components/RightToolbar/index.vue b/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..67da293 --- /dev/null +++ b/src/components/RightToolbar/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/components/RuoYi/Doc/index.vue b/src/components/RuoYi/Doc/index.vue new file mode 100644 index 0000000..75fa864 --- /dev/null +++ b/src/components/RuoYi/Doc/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/src/components/RuoYi/Git/index.vue b/src/components/RuoYi/Git/index.vue new file mode 100644 index 0000000..bdafbae --- /dev/null +++ b/src/components/RuoYi/Git/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/src/components/Screenfull/index.vue b/src/components/Screenfull/index.vue new file mode 100644 index 0000000..d4e539c --- /dev/null +++ b/src/components/Screenfull/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/components/SizeSelect/index.vue b/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..069b5de --- /dev/null +++ b/src/components/SizeSelect/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/components/StructMap/index.vue b/src/components/StructMap/index.vue new file mode 100644 index 0000000..baf2e85 --- /dev/null +++ b/src/components/StructMap/index.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..e4bf5ad --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue new file mode 100644 index 0000000..1714e1f --- /dev/null +++ b/src/components/ThemePicker/index.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/components/TopNav/index.vue b/src/components/TopNav/index.vue new file mode 100644 index 0000000..86a91c4 --- /dev/null +++ b/src/components/TopNav/index.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/components/iFrame/index.vue b/src/components/iFrame/index.vue new file mode 100644 index 0000000..426857f --- /dev/null +++ b/src/components/iFrame/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue new file mode 100644 index 0000000..2fc9209 --- /dev/null +++ b/src/layout/components/Navbar.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue new file mode 100644 index 0000000..bb3c9ce --- /dev/null +++ b/src/layout/components/Settings/index.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..6823726 --- /dev/null +++ b/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,25 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue new file mode 100644 index 0000000..be3285d --- /dev/null +++ b/src/layout/components/Sidebar/Item.vue @@ -0,0 +1,33 @@ + diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..8b0bc93 --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..2774cc8 --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..82ba407 --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,100 @@ + + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..51d0839 --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..bb753a1 --- /dev/null +++ b/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..96585a5 --- /dev/null +++ b/src/layout/components/TagsView/index.vue @@ -0,0 +1,332 @@ + + + + + + + diff --git a/src/layout/components/index.js b/src/layout/components/index.js new file mode 100644 index 0000000..104bd3a --- /dev/null +++ b/src/layout/components/index.js @@ -0,0 +1,5 @@ +export { default as AppMain } from './AppMain' +export { default as Navbar } from './Navbar' +export { default as Settings } from './Settings' +export { default as Sidebar } from './Sidebar/index.vue' +export { default as TagsView } from './TagsView/index.vue' diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..dba4393 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/layout/mixin/ResizeHandler.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..2688f2b --- /dev/null +++ b/src/main.js @@ -0,0 +1,90 @@ +import Vue from 'vue' + +import Cookies from 'js-cookie' + +import Element from 'element-ui' +import './assets/styles/element-variables.scss' + +import '@/assets/styles/index.scss' // global css +import '@/assets/styles/ruoyi.scss' // ruoyi css +import App from './App' +import store from './store' +import router from './router' +import directive from './directive' // directive +import plugins from './plugins' // plugins +import { download } from '@/utils/request' + +import './assets/icons' // icon +import './permission' // permission control +import { getDicts } from "@/api/system/dict/data"; +import { getConfigKey } from "@/api/system/config"; +import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi"; +// 分页组件 +import Pagination from "@/components/Pagination"; +// 自定义表格工具组件 +import RightToolbar from "@/components/RightToolbar" +// 富文本组件 +import Editor from "@/components/Editor" +// 文件上传组件 +import FileUpload from "@/components/FileUpload" +// 图片上传组件 +import ImageUpload from "@/components/ImageUpload" +// 图片预览组件 +import ImagePreview from "@/components/ImagePreview" +// 字典标签组件 +import DictTag from '@/components/DictTag' +// 头部标签组件 +import VueMeta from 'vue-meta' +// 字典数据组件 +import DictData from '@/components/DictData' + +import Vue2OrgTree from 'vue-tree-color' +Vue.use(Vue2OrgTree) + +// 全局方法挂载 +Vue.prototype.getDicts = getDicts +Vue.prototype.getConfigKey = getConfigKey +Vue.prototype.parseTime = parseTime +Vue.prototype.resetForm = resetForm +Vue.prototype.addDateRange = addDateRange +Vue.prototype.selectDictLabel = selectDictLabel +Vue.prototype.selectDictLabels = selectDictLabels +Vue.prototype.download = download +Vue.prototype.handleTree = handleTree + +// 全局组件挂载 +Vue.component('DictTag', DictTag) +Vue.component('Pagination', Pagination) +Vue.component('RightToolbar', RightToolbar) +Vue.component('Editor', Editor) +Vue.component('FileUpload', FileUpload) +Vue.component('ImageUpload', ImageUpload) +Vue.component('ImagePreview', ImagePreview) +Vue.component('vue2-org-tree', Vue2OrgTree); + +Vue.use(directive) +Vue.use(plugins) +Vue.use(VueMeta) +DictData.install() + +/** + * If you don't want to use mock-server + * you want to use MockJs for mock api + * you can execute: mockXHR() + * + * Currently MockJs will be used in the production environment, + * please remove it before going online! ! ! + */ + +Vue.use(Element, { + size: Cookies.get('size') || 'medium' // set element-ui default size +}) + +Vue.config.productionTip = false + +new Vue({ + el: '#app', + router, + store, + render: h => h(App) +}) diff --git a/src/permission.js b/src/permission.js new file mode 100644 index 0000000..c568979 --- /dev/null +++ b/src/permission.js @@ -0,0 +1,58 @@ +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' +import { isRelogin } from '@/utils/request' + +NProgress.configure({ showSpinner: false }) + +const whiteList = ['/login', '/register'] + +router.beforeEach((to, from, next) => { + NProgress.start() + if (getToken()) { + to.meta.title && store.dispatch('settings/setTitle', to.meta.title) + /* has token*/ + if (to.path === '/login') { + next({ path: '/' }) + NProgress.done() + } else if (whiteList.indexOf(to.path) !== -1) { + next() + } else { + if (store.getters.roles.length === 0) { + isRelogin.show = true + // 判断当前用户是否已拉取完user_info信息 + store.dispatch('GetInfo').then(() => { + isRelogin.show = false + store.dispatch('GenerateRoutes').then(accessRoutes => { + // 根据roles权限生成可访问的路由表 + router.addRoutes(accessRoutes) // 动态添加可访问路由表 + next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + }) + }).catch(err => { + store.dispatch('LogOut').then(() => { + Message.error(err) + next({ path: '/' }) + }) + }) + } else { + next() + } + } + } else { + // 没有token + if (whiteList.indexOf(to.path) !== -1) { + // 在免登录白名单,直接进入 + next() + } else { + next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页 + NProgress.done() + } + } +}) + +router.afterEach(() => { + NProgress.done() +}) diff --git a/src/plugins/auth.js b/src/plugins/auth.js new file mode 100644 index 0000000..6c6bc24 --- /dev/null +++ b/src/plugins/auth.js @@ -0,0 +1,60 @@ +import store from '@/store' + +function authPermission(permission) { + const all_permission = "*:*:*"; + const permissions = store.getters && store.getters.permissions + if (permission && permission.length > 0) { + return permissions.some(v => { + return all_permission === v || v === permission + }) + } else { + return false + } +} + +function authRole(role) { + const super_admin = "admin"; + const roles = store.getters && store.getters.roles + if (role && role.length > 0) { + return roles.some(v => { + return super_admin === v || v === role + }) + } else { + return false + } +} + +export default { + // 验证用户是否具备某权限 + hasPermi(permission) { + return authPermission(permission); + }, + // 验证用户是否含有指定权限,只需包含其中一个 + hasPermiOr(permissions) { + return permissions.some(item => { + return authPermission(item) + }) + }, + // 验证用户是否含有指定权限,必须全部拥有 + hasPermiAnd(permissions) { + return permissions.every(item => { + return authPermission(item) + }) + }, + // 验证用户是否具备某角色 + hasRole(role) { + return authRole(role); + }, + // 验证用户是否含有指定角色,只需包含其中一个 + hasRoleOr(roles) { + return roles.some(item => { + return authRole(item) + }) + }, + // 验证用户是否含有指定角色,必须全部拥有 + hasRoleAnd(roles) { + return roles.every(item => { + return authRole(item) + }) + } +} diff --git a/src/plugins/cache.js b/src/plugins/cache.js new file mode 100644 index 0000000..6b5c00b --- /dev/null +++ b/src/plugins/cache.js @@ -0,0 +1,77 @@ +const sessionCache = { + set (key, value) { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get (key) { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key) { + sessionStorage.removeItem(key); + } +} +const localCache = { + set (key, value) { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get (key) { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key) { + localStorage.removeItem(key); + } +} + +export default { + /** + * 会话级缓存 + */ + session: sessionCache, + /** + * 本地缓存 + */ + local: localCache +} diff --git a/src/plugins/download.js b/src/plugins/download.js new file mode 100644 index 0000000..42acd00 --- /dev/null +++ b/src/plugins/download.js @@ -0,0 +1,79 @@ +import axios from 'axios' +import {Loading, Message} from 'element-ui' +import { saveAs } from 'file-saver' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { blobValidate } from "@/utils/ruoyi"; + +const baseURL = process.env.VUE_APP_BASE_API +let downloadLoadingInstance; + +export default { + name(name, isDelete = true) { + var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data); + } + }) + }, + resource(resource) { + var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource); + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data); + } + }) + }, + zip(url, name) { + var url = baseURL + url + downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name) + } else { + this.printErrMsg(res.data); + } + downloadLoadingInstance.close(); + }).catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close(); + }) + }, + saveAs(text, name, opts) { + saveAs(text, name, opts); + }, + async printErrMsg(data) { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + } +} + diff --git a/src/plugins/index.js b/src/plugins/index.js new file mode 100644 index 0000000..d000f2d --- /dev/null +++ b/src/plugins/index.js @@ -0,0 +1,20 @@ +import tab from './tab' +import auth from './auth' +import cache from './cache' +import modal from './modal' +import download from './download' + +export default { + install(Vue) { + // 页签操作 + Vue.prototype.$tab = tab + // 认证对象 + Vue.prototype.$auth = auth + // 缓存对象 + Vue.prototype.$cache = cache + // 模态框对象 + Vue.prototype.$modal = modal + // 下载文件 + Vue.prototype.$download = download + } +} diff --git a/src/plugins/modal.js b/src/plugins/modal.js new file mode 100644 index 0000000..b37ca14 --- /dev/null +++ b/src/plugins/modal.js @@ -0,0 +1,83 @@ +import { Message, MessageBox, Notification, Loading } from 'element-ui' + +let loadingInstance; + +export default { + // 消息提示 + msg(content) { + Message.info(content) + }, + // 错误消息 + msgError(content) { + Message.error(content) + }, + // 成功消息 + msgSuccess(content) { + Message.success(content) + }, + // 警告消息 + msgWarning(content) { + Message.warning(content) + }, + // 弹出提示 + alert(content) { + MessageBox.alert(content, "系统提示") + }, + // 错误提示 + alertError(content) { + MessageBox.alert(content, "系统提示", { type: 'error' }) + }, + // 成功提示 + alertSuccess(content) { + MessageBox.alert(content, "系统提示", { type: 'success' }) + }, + // 警告提示 + alertWarning(content) { + MessageBox.alert(content, "系统提示", { type: 'warning' }) + }, + // 通知提示 + notify(content) { + Notification.info(content) + }, + // 错误通知 + notifyError(content) { + Notification.error(content); + }, + // 成功通知 + notifySuccess(content) { + Notification.success(content) + }, + // 警告通知 + notifyWarning(content) { + Notification.warning(content) + }, + // 确认窗体 + confirm(content) { + return MessageBox.confirm(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 提交内容 + prompt(content) { + return MessageBox.prompt(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 打开遮罩层 + loading(content) { + loadingInstance = Loading.service({ + lock: true, + text: content, + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }) + }, + // 关闭遮罩层 + closeLoading() { + loadingInstance.close(); + } +} diff --git a/src/plugins/tab.js b/src/plugins/tab.js new file mode 100644 index 0000000..fcde419 --- /dev/null +++ b/src/plugins/tab.js @@ -0,0 +1,71 @@ +import store from '@/store' +import router from '@/router'; + +export default { + // 刷新当前tab页签 + refreshPage(obj) { + const { path, query, matched } = router.currentRoute; + if (obj === undefined) { + matched.forEach((m) => { + if (m.components && m.components.default && m.components.default.name) { + if (!['Layout', 'ParentView'].includes(m.components.default.name)) { + obj = { name: m.components.default.name, path: path, query: query }; + } + } + }); + } + return store.dispatch('tagsView/delCachedView', obj).then(() => { + const { path, query } = obj + router.replace({ + path: '/redirect' + path, + query: query + }) + }) + }, + // 关闭当前tab页签,打开新页签 + closeOpenPage(obj) { + store.dispatch("tagsView/delView", router.currentRoute); + if (obj !== undefined) { + return router.push(obj); + } + }, + // 关闭指定tab页签 + closePage(obj) { + if (obj === undefined) { + return store.dispatch('tagsView/delView', router.currentRoute).then(({ visitedViews }) => { + const latestView = visitedViews.slice(-1)[0] + if (latestView) { + return router.push(latestView.fullPath) + } + return router.push('/'); + }); + } + return store.dispatch('tagsView/delView', obj); + }, + // 关闭所有tab页签 + closeAllPage() { + return store.dispatch('tagsView/delAllViews'); + }, + // 关闭左侧tab页签 + closeLeftPage(obj) { + return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute); + }, + // 关闭右侧tab页签 + closeRightPage(obj) { + return store.dispatch('tagsView/delRightTags', obj || router.currentRoute); + }, + // 关闭其他tab页签 + closeOtherPage(obj) { + return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute); + }, + // 添加tab页签 + openPage(title, url, params) { + const obj = { path: url, meta: { title: title } } + store.dispatch('tagsView/addView', obj); + return router.push({ path: url, query: params }); + }, + // 修改tab页签 + updatePage(obj) { + return store.dispatch('tagsView/updateVisitedView', obj); + } +} diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..c35190b --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,183 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +/* Layout */ +import Layout from '@/layout' + +/** + * Note: 路由配置项 + * + * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 + * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 + * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 + * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 + * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 + * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 + * roles: ['admin', 'common'] // 访问路由的角色权限 + * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 + * meta : { + noCache: true // 如果设置为true,则不会被 缓存(默认 false) + title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 + icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg + breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 + activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 + } + */ + +// 公共路由 +export const constantRoutes = [ + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect') + } + ] + }, + { + path: '/login', + component: () => import('@/views/login'), + hidden: true + }, + { + path: '/register', + component: () => import('@/views/register'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/error/404'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/error/401'), + hidden: true + }, + { + path: '', + component: Layout, + redirect: 'index', + children: [ + { + path: 'index', + component: () => import('@/views/index'), + name: 'Index', + meta: { title: '主页', icon: 'dashboard', affix: true } + } + ] + }, + { + path: '/user', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'profile', + component: () => import('@/views/system/user/profile/index'), + name: 'Profile', + meta: { title: '个人中心', icon: 'user' } + } + ] + } +] + +// 动态路由,基于用户权限动态去加载 +export const dynamicRoutes = [ + { + path: '/system/user-auth', + component: Layout, + hidden: true, + permissions: ['system:user:edit'], + children: [ + { + path: 'role/:userId(\\d+)', + component: () => import('@/views/system/user/authRole'), + name: 'AuthRole', + meta: { title: '分配角色', activeMenu: '/system/user' } + } + ] + }, + { + path: '/system/role-auth', + component: Layout, + hidden: true, + permissions: ['system:role:edit'], + children: [ + { + path: 'user/:roleId(\\d+)', + component: () => import('@/views/system/role/authUser'), + name: 'AuthUser', + meta: { title: '分配用户', activeMenu: '/system/role' } + } + ] + }, + { + path: '/system/dict-data', + component: Layout, + hidden: true, + permissions: ['system:dict:list'], + children: [ + { + path: 'index/:dictId(\\d+)', + component: () => import('@/views/system/dict/data'), + name: 'Data', + meta: { title: '字典数据', activeMenu: '/system/dict' } + } + ] + }, + { + path: '/monitor/job-log', + component: Layout, + hidden: true, + permissions: ['monitor:job:list'], + children: [ + { + path: 'index/:jobId(\\d+)', + component: () => import('@/views/monitor/job/log'), + name: 'JobLog', + meta: { title: '调度日志', activeMenu: '/monitor/job' } + } + ] + }, + { + path: '/tool/gen-edit', + component: Layout, + hidden: true, + permissions: ['tool:gen:edit'], + children: [ + { + path: 'index/:tableId(\\d+)', + component: () => import('@/views/tool/gen/editTable'), + name: 'GenEdit', + meta: { title: '修改生成配置', activeMenu: '/tool/gen' } + } + ] + } +] + +// 防止连续点击多次路由报错 +let routerPush = Router.prototype.push; +let routerReplace = Router.prototype.replace; +// push +Router.prototype.push = function push(location) { + return routerPush.call(this, location).catch(err => err) +} +// replace +Router.prototype.replace = function push(location) { + return routerReplace.call(this, location).catch(err => err) +} + +export default new Router({ + mode: 'history', // 去掉url中的# + scrollBehavior: () => ({ y: 0 }), + routes: constantRoutes +}) diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 0000000..6a0b09f --- /dev/null +++ b/src/settings.js @@ -0,0 +1,44 @@ +module.exports = { + /** + * 侧边栏主题 深色主题theme-dark,浅色主题theme-light + */ + sideTheme: 'theme-dark', + + /** + * 是否系统布局配置 + */ + showSettings: false, + + /** + * 是否显示顶部导航 + */ + topNav: false, + + /** + * 是否显示 tagsView + */ + tagsView: true, + + /** + * 是否固定头部 + */ + fixedHeader: false, + + /** + * 是否显示logo + */ + sidebarLogo: true, + + /** + * 是否显示动态标题 + */ + dynamicTitle: false, + + /** + * @type {string | array} 'production' | ['production', 'development'] + * @description Need show err logs component. + * The default is only used in the production env + * If you want to also use it in dev, you can pass ['production', 'development'] + */ + errorLog: 'production' +} diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..8adb1b6 --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,19 @@ +const getters = { + sidebar: state => state.app.sidebar, + size: state => state.app.size, + device: state => state.app.device, + dict: state => state.dict.dict, + visitedViews: state => state.tagsView.visitedViews, + cachedViews: state => state.tagsView.cachedViews, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name, + introduction: state => state.user.introduction, + roles: state => state.user.roles, + permissions: state => state.user.permissions, + permission_routes: state => state.permission.routes, + topbarRouters:state => state.permission.topbarRouters, + defaultRoutes:state => state.permission.defaultRoutes, + sidebarRouters:state => state.permission.sidebarRouters, +} +export default getters diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..97aaef8 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,25 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import app from './modules/app' +import dict from './modules/dict' +import user from './modules/user' +import tagsView from './modules/tagsView' +import permission from './modules/permission' +import settings from './modules/settings' +import getters from './getters' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + modules: { + app, + dict, + user, + tagsView, + permission, + settings + }, + getters +}) + +export default store diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..3e22d1c --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,66 @@ +import Cookies from 'js-cookie' + +const state = { + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + withoutAnimation: false, + hide: false + }, + device: 'desktop', + size: Cookies.get('size') || 'medium' +} + +const mutations = { + TOGGLE_SIDEBAR: state => { + if (state.sidebar.hide) { + return false; + } + state.sidebar.opened = !state.sidebar.opened + state.sidebar.withoutAnimation = false + if (state.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Cookies.set('sidebarStatus', 0) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + }, + SET_SIZE: (state, size) => { + state.size = size + Cookies.set('size', size) + }, + SET_SIDEBAR_HIDE: (state, status) => { + state.sidebar.hide = status + } +} + +const actions = { + toggleSideBar({ commit }) { + commit('TOGGLE_SIDEBAR') + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + toggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + }, + setSize({ commit }, size) { + commit('SET_SIZE', size) + }, + toggleSideBarHide({ commit }, status) { + commit('SET_SIDEBAR_HIDE', status) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/modules/dict.js b/src/store/modules/dict.js new file mode 100644 index 0000000..7a1b2f0 --- /dev/null +++ b/src/store/modules/dict.js @@ -0,0 +1,50 @@ +const state = { + dict: new Array() +} +const mutations = { + SET_DICT: (state, { key, value }) => { + if (key !== null && key !== "") { + state.dict.push({ + key: key, + value: value + }) + } + }, + REMOVE_DICT: (state, key) => { + try { + for (let i = 0; i < state.dict.length; i++) { + if (state.dict[i].key == key) { + state.dict.splice(i, 1) + return true + } + } + } catch (e) { + } + }, + CLEAN_DICT: (state) => { + state.dict = new Array() + } +} + +const actions = { + // 设置字典 + setDict({ commit }, data) { + commit('SET_DICT', data) + }, + // 删除字典 + removeDict({ commit }, key) { + commit('REMOVE_DICT', key) + }, + // 清空字典 + cleanDict({ commit }) { + commit('CLEAN_DICT') + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js new file mode 100644 index 0000000..b3c216a --- /dev/null +++ b/src/store/modules/permission.js @@ -0,0 +1,137 @@ +import auth from '@/plugins/auth' +import router, { constantRoutes, dynamicRoutes } from '@/router' +import { getRouters } from '@/api/menu' +import Layout from '@/layout/index' +import ParentView from '@/components/ParentView' +import InnerLink from '@/layout/components/InnerLink' + +const permission = { + state: { + routes: [], + addRoutes: [], + defaultRoutes: [], + topbarRouters: [], + sidebarRouters: [] + }, + mutations: { + SET_ROUTES: (state, routes) => { + state.addRoutes = routes + state.routes = constantRoutes.concat(routes) + }, + SET_DEFAULT_ROUTES: (state, routes) => { + state.defaultRoutes = constantRoutes.concat(routes) + }, + SET_TOPBAR_ROUTES: (state, routes) => { + state.topbarRouters = routes + }, + SET_SIDEBAR_ROUTERS: (state, routes) => { + state.sidebarRouters = routes + }, + }, + actions: { + // 生成路由 + GenerateRoutes({ commit }) { + return new Promise(resolve => { + // 向后端请求路由数据 + getRouters().then(res => { + const sdata = JSON.parse(JSON.stringify(res.data)) + const rdata = JSON.parse(JSON.stringify(res.data)) + const sidebarRoutes = filterAsyncRouter(sdata) + const rewriteRoutes = filterAsyncRouter(rdata, false, true) + const asyncRoutes = filterDynamicRoutes(dynamicRoutes); + rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) + router.addRoutes(asyncRoutes); + commit('SET_ROUTES', rewriteRoutes) + commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) + commit('SET_DEFAULT_ROUTES', sidebarRoutes) + commit('SET_TOPBAR_ROUTES', sidebarRoutes) + resolve(rewriteRoutes) + }) + }) + } + } +} + +// 遍历后台传来的路由字符串,转换为组件对象 +function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { + return asyncRouterMap.filter(route => { + if (type && route.children) { + route.children = filterChildren(route.children) + } + if (route.component) { + // Layout ParentView 组件特殊处理 + if (route.component === 'Layout') { + route.component = Layout + } else if (route.component === 'ParentView') { + route.component = ParentView + } else if (route.component === 'InnerLink') { + route.component = InnerLink + } else { + route.component = loadView(route.component) + } + } + if (route.children != null && route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, route, type) + } else { + delete route['children'] + delete route['redirect'] + } + return true + }) +} + +function filterChildren(childrenMap, lastRouter = false) { + var children = [] + childrenMap.forEach((el, index) => { + if (el.children && el.children.length) { + if (el.component === 'ParentView' && !lastRouter) { + el.children.forEach(c => { + c.path = el.path + '/' + c.path + if (c.children && c.children.length) { + children = children.concat(filterChildren(c.children, c)) + return + } + children.push(c) + }) + return + } + } + if (lastRouter) { + el.path = lastRouter.path + '/' + el.path + if (el.children && el.children.length) { + children = children.concat(filterChildren(el.children, el)) + return + } + } + children = children.concat(el) + }) + return children +} + +// 动态路由遍历,验证是否具备权限 +export function filterDynamicRoutes(routes) { + const res = [] + routes.forEach(route => { + if (route.permissions) { + if (auth.hasPermiOr(route.permissions)) { + res.push(route) + } + } else if (route.roles) { + if (auth.hasRoleOr(route.roles)) { + res.push(route) + } + } + }) + return res +} + +export const loadView = (view) => { + if (process.env.NODE_ENV === 'development') { + return (resolve) => require([`@/views/${view}`], resolve) + } else { + // 使用 import 实现生产环境的路由懒加载 + return () => import(`@/views/${view}`) + } +} + +export default permission diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js new file mode 100644 index 0000000..2455a1e --- /dev/null +++ b/src/store/modules/settings.js @@ -0,0 +1,42 @@ +import defaultSettings from '@/settings' + +const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings + +const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' +const state = { + title: '', + theme: storageSetting.theme || '#409EFF', + sideTheme: storageSetting.sideTheme || sideTheme, + showSettings: showSettings, + topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, + tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, + fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, + sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, + dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle +} +const mutations = { + CHANGE_SETTING: (state, { key, value }) => { + if (state.hasOwnProperty(key)) { + state[key] = value + } + } +} + +const actions = { + // 修改布局设置 + changeSetting({ commit }, data) { + commit('CHANGE_SETTING', data) + }, + // 设置网页标题 + setTitle({ commit }, title) { + state.title = title + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/src/store/modules/tagsView.js b/src/store/modules/tagsView.js new file mode 100644 index 0000000..5fc011c --- /dev/null +++ b/src/store/modules/tagsView.js @@ -0,0 +1,228 @@ +const state = { + visitedViews: [], + cachedViews: [], + iframeViews: [] +} + +const mutations = { + ADD_IFRAME_VIEW: (state, view) => { + if (state.iframeViews.some(v => v.path === view.path)) return + state.iframeViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + ADD_VISITED_VIEW: (state, view) => { + if (state.visitedViews.some(v => v.path === view.path)) return + state.visitedViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + ADD_CACHED_VIEW: (state, view) => { + if (state.cachedViews.includes(view.name)) return + if (view.meta && !view.meta.noCache) { + state.cachedViews.push(view.name) + } + }, + DEL_VISITED_VIEW: (state, view) => { + for (const [i, v] of state.visitedViews.entries()) { + if (v.path === view.path) { + state.visitedViews.splice(i, 1) + break + } + } + state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) + }, + DEL_IFRAME_VIEW: (state, view) => { + state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) + }, + DEL_CACHED_VIEW: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + index > -1 && state.cachedViews.splice(index, 1) + }, + + DEL_OTHERS_VISITED_VIEWS: (state, view) => { + state.visitedViews = state.visitedViews.filter(v => { + return v.meta.affix || v.path === view.path + }) + state.iframeViews = state.iframeViews.filter(item => item.path === view.path) + }, + DEL_OTHERS_CACHED_VIEWS: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + if (index > -1) { + state.cachedViews = state.cachedViews.slice(index, index + 1) + } else { + state.cachedViews = [] + } + }, + DEL_ALL_VISITED_VIEWS: state => { + // keep affix tags + const affixTags = state.visitedViews.filter(tag => tag.meta.affix) + state.visitedViews = affixTags + state.iframeViews = [] + }, + DEL_ALL_CACHED_VIEWS: state => { + state.cachedViews = [] + }, + UPDATE_VISITED_VIEW: (state, view) => { + for (let v of state.visitedViews) { + if (v.path === view.path) { + v = Object.assign(v, view) + break + } + } + }, + DEL_RIGHT_VIEWS: (state, view) => { + const index = state.visitedViews.findIndex(v => v.path === view.path) + if (index === -1) { + return + } + state.visitedViews = state.visitedViews.filter((item, idx) => { + if (idx <= index || (item.meta && item.meta.affix)) { + return true + } + const i = state.cachedViews.indexOf(item.name) + if (i > -1) { + state.cachedViews.splice(i, 1) + } + if(item.meta.link) { + const fi = state.iframeViews.findIndex(v => v.path === item.path) + state.iframeViews.splice(fi, 1) + } + return false + }) + }, + DEL_LEFT_VIEWS: (state, view) => { + const index = state.visitedViews.findIndex(v => v.path === view.path) + if (index === -1) { + return + } + state.visitedViews = state.visitedViews.filter((item, idx) => { + if (idx >= index || (item.meta && item.meta.affix)) { + return true + } + const i = state.cachedViews.indexOf(item.name) + if (i > -1) { + state.cachedViews.splice(i, 1) + } + if(item.meta.link) { + const fi = state.iframeViews.findIndex(v => v.path === item.path) + state.iframeViews.splice(fi, 1) + } + return false + }) + } +} + +const actions = { + addView({ dispatch }, view) { + dispatch('addVisitedView', view) + dispatch('addCachedView', view) + }, + addIframeView({ commit }, view) { + commit('ADD_IFRAME_VIEW', view) + }, + addVisitedView({ commit }, view) { + commit('ADD_VISITED_VIEW', view) + }, + addCachedView({ commit }, view) { + commit('ADD_CACHED_VIEW', view) + }, + delView({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delVisitedView', view) + dispatch('delCachedView', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delVisitedView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_VISITED_VIEW', view) + resolve([...state.visitedViews]) + }) + }, + delIframeView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_IFRAME_VIEW', view) + resolve([...state.iframeViews]) + }) + }, + delCachedView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_CACHED_VIEW', view) + resolve([...state.cachedViews]) + }) + }, + delOthersViews({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delOthersVisitedViews', view) + dispatch('delOthersCachedViews', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delOthersVisitedViews({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_OTHERS_VISITED_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, + delOthersCachedViews({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_OTHERS_CACHED_VIEWS', view) + resolve([...state.cachedViews]) + }) + }, + delAllViews({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delAllVisitedViews', view) + dispatch('delAllCachedViews', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delAllVisitedViews({ commit, state }) { + return new Promise(resolve => { + commit('DEL_ALL_VISITED_VIEWS') + resolve([...state.visitedViews]) + }) + }, + delAllCachedViews({ commit, state }) { + return new Promise(resolve => { + commit('DEL_ALL_CACHED_VIEWS') + resolve([...state.cachedViews]) + }) + }, + updateVisitedView({ commit }, view) { + commit('UPDATE_VISITED_VIEW', view) + }, + delRightTags({ commit }, view) { + return new Promise(resolve => { + commit('DEL_RIGHT_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, + delLeftTags({ commit }, view) { + return new Promise(resolve => { + commit('DEL_LEFT_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/modules/user.js b/src/store/modules/user.js new file mode 100644 index 0000000..cdbab1e --- /dev/null +++ b/src/store/modules/user.js @@ -0,0 +1,101 @@ +import { login, logout, getInfo } from '@/api/login' +import { getToken, setToken, removeToken } from '@/utils/auth' + +const user = { + state: { + token: getToken(), + id: '', + name: '', + avatar: '', + roles: [], + permissions: [] + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_ID: (state, id) => { + state.id = id + }, + SET_NAME: (state, name) => { + state.name = name + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_ROLES: (state, roles) => { + state.roles = roles + }, + SET_PERMISSIONS: (state, permissions) => { + state.permissions = permissions + } + }, + + actions: { + // 登录 + Login({ commit }, userInfo) { + const username = userInfo.username.trim() + const password = userInfo.password + const code = userInfo.code + const uuid = userInfo.uuid + return new Promise((resolve, reject) => { + login(username, password, code, uuid).then(res => { + setToken(res.token) + commit('SET_TOKEN', res.token) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 获取用户信息 + GetInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getInfo().then(res => { + const user = res.user + const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; + if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 + commit('SET_ROLES', res.roles) + commit('SET_PERMISSIONS', res.permissions) + } else { + commit('SET_ROLES', ['ROLE_DEFAULT']) + } + commit('SET_ID', user.userId) + commit('SET_NAME', user.userName) + commit('SET_AVATAR', avatar) + resolve(res) + }).catch(error => { + reject(error) + }) + }) + }, + + // 退出系统 + LogOut({ commit, state }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + commit('SET_TOKEN', '') + commit('SET_ROLES', []) + commit('SET_PERMISSIONS', []) + removeToken() + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 前端 登出 + FedLogOut({ commit }) { + return new Promise(resolve => { + commit('SET_TOKEN', '') + removeToken() + resolve() + }) + } + } +} + +export default user diff --git a/src/utils/auth.js b/src/utils/auth.js new file mode 100644 index 0000000..08a43d6 --- /dev/null +++ b/src/utils/auth.js @@ -0,0 +1,15 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'Admin-Token' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} diff --git a/src/utils/dict/Dict.js b/src/utils/dict/Dict.js new file mode 100644 index 0000000..104bd6e --- /dev/null +++ b/src/utils/dict/Dict.js @@ -0,0 +1,82 @@ +import Vue from 'vue' +import { mergeRecursive } from "@/utils/ruoyi"; +import DictMeta from './DictMeta' +import DictData from './DictData' + +const DEFAULT_DICT_OPTIONS = { + types: [], +} + +/** + * @classdesc 字典 + * @property {Object} label 标签对象,内部属性名为字典类型名称 + * @property {Object} dict 字段数组,内部属性名为字典类型名称 + * @property {Array.} _dictMetas 字典元数据数组 + */ +export default class Dict { + constructor() { + this.owner = null + this.label = {} + this.type = {} + } + + init(options) { + if (options instanceof Array) { + options = { types: options } + } + const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options) + if (opts.types === undefined) { + throw new Error('need dict types') + } + const ps = [] + this._dictMetas = opts.types.map(t => DictMeta.parse(t)) + this._dictMetas.forEach(dictMeta => { + const type = dictMeta.type + Vue.set(this.label, type, {}) + Vue.set(this.type, type, []) + if (dictMeta.lazy) { + return + } + ps.push(loadDict(this, dictMeta)) + }) + return Promise.all(ps) + } + + /** + * 重新加载字典 + * @param {String} type 字典类型 + */ + reloadDict(type) { + const dictMeta = this._dictMetas.find(e => e.type === type) + if (dictMeta === undefined) { + return Promise.reject(`the dict meta of ${type} was not found`) + } + return loadDict(this, dictMeta) + } +} + +/** + * 加载字典 + * @param {Dict} dict 字典 + * @param {DictMeta} dictMeta 字典元数据 + * @returns {Promise} + */ +function loadDict(dict, dictMeta) { + return dictMeta.request(dictMeta) + .then(response => { + const type = dictMeta.type + let dicts = dictMeta.responseConverter(response, dictMeta) + if (!(dicts instanceof Array)) { + console.error('the return of responseConverter must be Array.') + dicts = [] + } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) { + console.error('the type of elements in dicts must be DictData') + dicts = [] + } + dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts) + dicts.forEach(d => { + Vue.set(dict.label[type], d.value, d.label) + }) + return dicts + }) +} diff --git a/src/utils/dict/DictConverter.js b/src/utils/dict/DictConverter.js new file mode 100644 index 0000000..0cf5df8 --- /dev/null +++ b/src/utils/dict/DictConverter.js @@ -0,0 +1,17 @@ +import DictOptions from './DictOptions' +import DictData from './DictData' + +export default function(dict, dictMeta) { + const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS) + const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS) + return new DictData(dict[label], dict[value], dict) +} + +/** + * 确定字典字段 + * @param {DictData} dict + * @param {...String} fields + */ +function determineDictField(dict, ...fields) { + return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f)) +} diff --git a/src/utils/dict/DictData.js b/src/utils/dict/DictData.js new file mode 100644 index 0000000..afc763e --- /dev/null +++ b/src/utils/dict/DictData.js @@ -0,0 +1,13 @@ +/** + * @classdesc 字典数据 + * @property {String} label 标签 + * @property {*} value 标签 + * @property {Object} raw 原始数据 + */ +export default class DictData { + constructor(label, value, raw) { + this.label = label + this.value = value + this.raw = raw + } +} diff --git a/src/utils/dict/DictMeta.js b/src/utils/dict/DictMeta.js new file mode 100644 index 0000000..9779daa --- /dev/null +++ b/src/utils/dict/DictMeta.js @@ -0,0 +1,38 @@ +import { mergeRecursive } from "@/utils/ruoyi"; +import DictOptions from './DictOptions' + +/** + * @classdesc 字典元数据 + * @property {String} type 类型 + * @property {Function} request 请求 + * @property {String} label 标签字段 + * @property {String} value 值字段 + */ +export default class DictMeta { + constructor(options) { + this.type = options.type + this.request = options.request + this.responseConverter = options.responseConverter + this.labelField = options.labelField + this.valueField = options.valueField + this.lazy = options.lazy === true + } +} + + +/** + * 解析字典元数据 + * @param {Object} options + * @returns {DictMeta} + */ +DictMeta.parse= function(options) { + let opts = null + if (typeof options === 'string') { + opts = DictOptions.metas[options] || {} + opts.type = options + } else if (typeof options === 'object') { + opts = options + } + opts = mergeRecursive(DictOptions.metas['*'], opts) + return new DictMeta(opts) +} diff --git a/src/utils/dict/DictOptions.js b/src/utils/dict/DictOptions.js new file mode 100644 index 0000000..338a94e --- /dev/null +++ b/src/utils/dict/DictOptions.js @@ -0,0 +1,51 @@ +import { mergeRecursive } from "@/utils/ruoyi"; +import dictConverter from './DictConverter' + +export const options = { + metas: { + '*': { + /** + * 字典请求,方法签名为function(dictMeta: DictMeta): Promise + */ + request: (dictMeta) => { + console.log(`load dict ${dictMeta.type}`) + return Promise.resolve([]) + }, + /** + * 字典响应数据转换器,方法签名为function(response: Object, dictMeta: DictMeta): DictData + */ + responseConverter, + labelField: 'label', + valueField: 'value', + }, + }, + /** + * 默认标签字段 + */ + DEFAULT_LABEL_FIELDS: ['label', 'name', 'title'], + /** + * 默认值字段 + */ + DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'], +} + +/** + * 映射字典 + * @param {Object} response 字典数据 + * @param {DictMeta} dictMeta 字典元数据 + * @returns {DictData} + */ +function responseConverter(response, dictMeta) { + const dicts = response.content instanceof Array ? response.content : response + if (dicts === undefined) { + console.warn(`no dict data of "${dictMeta.type}" found in the response`) + return [] + } + return dicts.map(d => dictConverter(d, dictMeta)) +} + +export function mergeOptions(src) { + mergeRecursive(options, src) +} + +export default options diff --git a/src/utils/dict/index.js b/src/utils/dict/index.js new file mode 100644 index 0000000..215eb9e --- /dev/null +++ b/src/utils/dict/index.js @@ -0,0 +1,33 @@ +import Dict from './Dict' +import { mergeOptions } from './DictOptions' + +export default function(Vue, options) { + mergeOptions(options) + Vue.mixin({ + data() { + if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) { + return {} + } + const dict = new Dict() + dict.owner = this + return { + dict + } + }, + created() { + if (!(this.dict instanceof Dict)) { + return + } + options.onCreated && options.onCreated(this.dict) + this.dict.init(this.$options.dicts).then(() => { + options.onReady && options.onReady(this.dict) + this.$nextTick(() => { + this.$emit('dictReady', this.dict) + if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) { + this.$options.methods.onDictReady.call(this, this.dict) + } + }) + }) + }, + }) +} diff --git a/src/utils/errorCode.js b/src/utils/errorCode.js new file mode 100644 index 0000000..d2111ee --- /dev/null +++ b/src/utils/errorCode.js @@ -0,0 +1,6 @@ +export default { + '401': '认证失败,无法访问系统资源', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} diff --git a/src/utils/generator/config.js b/src/utils/generator/config.js new file mode 100644 index 0000000..7abf227 --- /dev/null +++ b/src/utils/generator/config.js @@ -0,0 +1,438 @@ +export const formConf = { + formRef: 'elForm', + formModel: 'formData', + size: 'medium', + labelPosition: 'right', + labelWidth: 100, + formRules: 'rules', + gutter: 15, + disabled: false, + span: 24, + formBtns: true +} + +export const inputComponents = [ + { + label: '单行文本', + tag: 'el-input', + tagIcon: 'input', + placeholder: '请输入', + defaultValue: undefined, + span: 24, + labelWidth: null, + style: { width: '100%' }, + clearable: true, + prepend: '', + append: '', + 'prefix-icon': '', + 'suffix-icon': '', + maxlength: null, + 'show-word-limit': false, + readonly: false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input' + }, + { + label: '多行文本', + tag: 'el-input', + tagIcon: 'textarea', + type: 'textarea', + placeholder: '请输入', + defaultValue: undefined, + span: 24, + labelWidth: null, + autosize: { + minRows: 4, + maxRows: 4 + }, + style: { width: '100%' }, + maxlength: null, + 'show-word-limit': false, + readonly: false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input' + }, + { + label: '密码', + tag: 'el-input', + tagIcon: 'password', + placeholder: '请输入', + defaultValue: undefined, + span: 24, + 'show-password': true, + labelWidth: null, + style: { width: '100%' }, + clearable: true, + prepend: '', + append: '', + 'prefix-icon': '', + 'suffix-icon': '', + maxlength: null, + 'show-word-limit': false, + readonly: false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input' + }, + { + label: '计数器', + tag: 'el-input-number', + tagIcon: 'number', + placeholder: '', + defaultValue: undefined, + span: 24, + labelWidth: null, + min: undefined, + max: undefined, + step: undefined, + 'step-strictly': false, + precision: undefined, + 'controls-position': '', + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input-number' + } +] + +export const selectComponents = [ + { + label: '下拉选择', + tag: 'el-select', + tagIcon: 'select', + placeholder: '请选择', + defaultValue: undefined, + span: 24, + labelWidth: null, + style: { width: '100%' }, + clearable: true, + disabled: false, + required: true, + filterable: false, + multiple: false, + options: [{ + label: '选项一', + value: 1 + }, { + label: '选项二', + value: 2 + }], + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/select' + }, + { + label: '级联选择', + tag: 'el-cascader', + tagIcon: 'cascader', + placeholder: '请选择', + defaultValue: [], + span: 24, + labelWidth: null, + style: { width: '100%' }, + props: { + props: { + multiple: false + } + }, + 'show-all-levels': true, + disabled: false, + clearable: true, + filterable: false, + required: true, + options: [{ + id: 1, + value: 1, + label: '选项1', + children: [{ + id: 2, + value: 2, + label: '选项1-1' + }] + }], + dataType: 'dynamic', + labelKey: 'label', + valueKey: 'value', + childrenKey: 'children', + separator: '/', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/cascader' + }, + { + label: '单选框组', + tag: 'el-radio-group', + tagIcon: 'radio', + defaultValue: undefined, + span: 24, + labelWidth: null, + style: {}, + optionType: 'default', + border: false, + size: 'medium', + disabled: false, + required: true, + options: [{ + label: '选项一', + value: 1 + }, { + label: '选项二', + value: 2 + }], + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/radio' + }, + { + label: '多选框组', + tag: 'el-checkbox-group', + tagIcon: 'checkbox', + defaultValue: [], + span: 24, + labelWidth: null, + style: {}, + optionType: 'default', + border: false, + size: 'medium', + disabled: false, + required: true, + options: [{ + label: '选项一', + value: 1 + }, { + label: '选项二', + value: 2 + }], + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/checkbox' + }, + { + label: '开关', + tag: 'el-switch', + tagIcon: 'switch', + defaultValue: false, + span: 24, + labelWidth: null, + style: {}, + disabled: false, + required: true, + 'active-text': '', + 'inactive-text': '', + 'active-color': null, + 'inactive-color': null, + 'active-value': true, + 'inactive-value': false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/switch' + }, + { + label: '滑块', + tag: 'el-slider', + tagIcon: 'slider', + defaultValue: null, + span: 24, + labelWidth: null, + disabled: false, + required: true, + min: 0, + max: 100, + step: 1, + 'show-stops': false, + range: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/slider' + }, + { + label: '时间选择', + tag: 'el-time-picker', + tagIcon: 'time', + placeholder: '请选择', + defaultValue: null, + span: 24, + labelWidth: null, + style: { width: '100%' }, + disabled: false, + clearable: true, + required: true, + 'picker-options': { + selectableRange: '00:00:00-23:59:59' + }, + format: 'HH:mm:ss', + 'value-format': 'HH:mm:ss', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' + }, + { + label: '时间范围', + tag: 'el-time-picker', + tagIcon: 'time-range', + defaultValue: null, + span: 24, + labelWidth: null, + style: { width: '100%' }, + disabled: false, + clearable: true, + required: true, + 'is-range': true, + 'range-separator': '至', + 'start-placeholder': '开始时间', + 'end-placeholder': '结束时间', + format: 'HH:mm:ss', + 'value-format': 'HH:mm:ss', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' + }, + { + label: '日期选择', + tag: 'el-date-picker', + tagIcon: 'date', + placeholder: '请选择', + defaultValue: null, + type: 'date', + span: 24, + labelWidth: null, + style: { width: '100%' }, + disabled: false, + clearable: true, + required: true, + format: 'yyyy-MM-dd', + 'value-format': 'yyyy-MM-dd', + readonly: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' + }, + { + label: '日期范围', + tag: 'el-date-picker', + tagIcon: 'date-range', + defaultValue: null, + span: 24, + labelWidth: null, + style: { width: '100%' }, + type: 'daterange', + 'range-separator': '至', + 'start-placeholder': '开始日期', + 'end-placeholder': '结束日期', + disabled: false, + clearable: true, + required: true, + format: 'yyyy-MM-dd', + 'value-format': 'yyyy-MM-dd', + readonly: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' + }, + { + label: '评分', + tag: 'el-rate', + tagIcon: 'rate', + defaultValue: 0, + span: 24, + labelWidth: null, + style: {}, + max: 5, + 'allow-half': false, + 'show-text': false, + 'show-score': false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/rate' + }, + { + label: '颜色选择', + tag: 'el-color-picker', + tagIcon: 'color', + defaultValue: null, + labelWidth: null, + 'show-alpha': false, + 'color-format': '', + disabled: false, + required: true, + size: 'medium', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/color-picker' + }, + { + label: '上传', + tag: 'el-upload', + tagIcon: 'upload', + action: 'https://jsonplaceholder.typicode.com/posts/', + defaultValue: null, + labelWidth: null, + disabled: false, + required: true, + accept: '', + name: 'file', + 'auto-upload': true, + showTip: false, + buttonText: '点击上传', + fileSize: 2, + sizeUnit: 'MB', + 'list-type': 'text', + multiple: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/upload' + } +] + +export const layoutComponents = [ + { + layout: 'rowFormItem', + tagIcon: 'row', + type: 'default', + justify: 'start', + align: 'top', + label: '行容器', + layoutTree: true, + children: [], + document: 'https://element.eleme.cn/#/zh-CN/component/layout' + }, + { + layout: 'colFormItem', + label: '按钮', + changeTag: true, + labelWidth: null, + tag: 'el-button', + tagIcon: 'button', + span: 24, + default: '主要按钮', + type: 'primary', + icon: 'el-icon-search', + size: 'medium', + disabled: false, + document: 'https://element.eleme.cn/#/zh-CN/component/button' + } +] + +// 组件rule的触发方式,无触发方式的组件不生成rule +export const trigger = { + 'el-input': 'blur', + 'el-input-number': 'blur', + 'el-select': 'change', + 'el-radio-group': 'change', + 'el-checkbox-group': 'change', + 'el-cascader': 'change', + 'el-time-picker': 'change', + 'el-date-picker': 'change', + 'el-rate': 'change' +} diff --git a/src/utils/generator/css.js b/src/utils/generator/css.js new file mode 100644 index 0000000..c1c62e6 --- /dev/null +++ b/src/utils/generator/css.js @@ -0,0 +1,18 @@ +const styles = { + 'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}', + 'el-upload': '.el-upload__tip{line-height: 1.2;}' +} + +function addCss(cssList, el) { + const css = styles[el.tag] + css && cssList.indexOf(css) === -1 && cssList.push(css) + if (el.children) { + el.children.forEach(el2 => addCss(cssList, el2)) + } +} + +export function makeUpCss(conf) { + const cssList = [] + conf.fields.forEach(el => addCss(cssList, el)) + return cssList.join('\n') +} diff --git a/src/utils/generator/drawingDefault.js b/src/utils/generator/drawingDefault.js new file mode 100644 index 0000000..09f133c --- /dev/null +++ b/src/utils/generator/drawingDefault.js @@ -0,0 +1,29 @@ +export default [ + { + layout: 'colFormItem', + tagIcon: 'input', + label: '手机号', + vModel: 'mobile', + formId: 6, + tag: 'el-input', + placeholder: '请输入手机号', + defaultValue: '', + span: 24, + style: { width: '100%' }, + clearable: true, + prepend: '', + append: '', + 'prefix-icon': 'el-icon-mobile', + 'suffix-icon': '', + maxlength: 11, + 'show-word-limit': true, + readonly: false, + disabled: false, + required: true, + changeTag: true, + regList: [{ + pattern: '/^1(3|4|5|7|8|9)\\d{9}$/', + message: '手机号格式错误' + }] + } +] diff --git a/src/utils/generator/html.js b/src/utils/generator/html.js new file mode 100644 index 0000000..9bcc536 --- /dev/null +++ b/src/utils/generator/html.js @@ -0,0 +1,359 @@ +/* eslint-disable max-len */ +import { trigger } from './config' + +let confGlobal +let someSpanIsNot24 + +export function dialogWrapper(str) { + return ` + ${str} +
+ 取消 + 确定 +
+
` +} + +export function vueTemplate(str) { + return `` +} + +export function vueScript(str) { + return `` +} + +export function cssStyle(cssStr) { + return `` +} + +function buildFormTemplate(conf, child, type) { + let labelPosition = '' + if (conf.labelPosition !== 'right') { + labelPosition = `label-position="${conf.labelPosition}"` + } + const disabled = conf.disabled ? `:disabled="${conf.disabled}"` : '' + let str = ` + ${child} + ${buildFromBtns(conf, type)} + ` + if (someSpanIsNot24) { + str = ` + ${str} + ` + } + return str +} + +function buildFromBtns(conf, type) { + let str = '' + if (conf.formBtns && type === 'file') { + str = ` + 提交 + 重置 + ` + if (someSpanIsNot24) { + str = ` + ${str} + ` + } + } + return str +} + +// span不为24的用el-col包裹 +function colWrapper(element, str) { + if (someSpanIsNot24 || element.span !== 24) { + return ` + ${str} + ` + } + return str +} + +const layouts = { + colFormItem(element) { + let labelWidth = '' + if (element.labelWidth && element.labelWidth !== confGlobal.labelWidth) { + labelWidth = `label-width="${element.labelWidth}px"` + } + const required = !trigger[element.tag] && element.required ? 'required' : '' + const tagDom = tags[element.tag] ? tags[element.tag](element) : null + let str = ` + ${tagDom} + ` + str = colWrapper(element, str) + return str + }, + rowFormItem(element) { + const type = element.type === 'default' ? '' : `type="${element.type}"` + const justify = element.type === 'default' ? '' : `justify="${element.justify}"` + const align = element.type === 'default' ? '' : `align="${element.align}"` + const gutter = element.gutter ? `gutter="${element.gutter}"` : '' + const children = element.children.map(el => layouts[el.layout](el)) + let str = ` + ${children.join('\n')} + ` + str = colWrapper(element, str) + return str + } +} + +const tags = { + 'el-button': el => { + const { + tag, disabled + } = attrBuilder(el) + const type = el.type ? `type="${el.type}"` : '' + const icon = el.icon ? `icon="${el.icon}"` : '' + const size = el.size ? `size="${el.size}"` : '' + let child = buildElButtonChild(el) + + if (child) child = `\n${child}\n` // 换行 + return `<${el.tag} ${type} ${icon} ${size} ${disabled}>${child}` + }, + 'el-input': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const maxlength = el.maxlength ? `:maxlength="${el.maxlength}"` : '' + const showWordLimit = el['show-word-limit'] ? 'show-word-limit' : '' + const readonly = el.readonly ? 'readonly' : '' + const prefixIcon = el['prefix-icon'] ? `prefix-icon='${el['prefix-icon']}'` : '' + const suffixIcon = el['suffix-icon'] ? `suffix-icon='${el['suffix-icon']}'` : '' + const showPassword = el['show-password'] ? 'show-password' : '' + const type = el.type ? `type="${el.type}"` : '' + const autosize = el.autosize && el.autosize.minRows + ? `:autosize="{minRows: ${el.autosize.minRows}, maxRows: ${el.autosize.maxRows}}"` + : '' + let child = buildElInputChild(el) + + if (child) child = `\n${child}\n` // 换行 + return `<${el.tag} ${vModel} ${type} ${placeholder} ${maxlength} ${showWordLimit} ${readonly} ${disabled} ${clearable} ${prefixIcon} ${suffixIcon} ${showPassword} ${autosize} ${width}>${child}` + }, + 'el-input-number': el => { + const { disabled, vModel, placeholder } = attrBuilder(el) + const controlsPosition = el['controls-position'] ? `controls-position=${el['controls-position']}` : '' + const min = el.min ? `:min='${el.min}'` : '' + const max = el.max ? `:max='${el.max}'` : '' + const step = el.step ? `:step='${el.step}'` : '' + const stepStrictly = el['step-strictly'] ? 'step-strictly' : '' + const precision = el.precision ? `:precision='${el.precision}'` : '' + + return `<${el.tag} ${vModel} ${placeholder} ${step} ${stepStrictly} ${precision} ${controlsPosition} ${min} ${max} ${disabled}>` + }, + 'el-select': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const filterable = el.filterable ? 'filterable' : '' + const multiple = el.multiple ? 'multiple' : '' + let child = buildElSelectChild(el) + + if (child) child = `\n${child}\n` // 换行 + return `<${el.tag} ${vModel} ${placeholder} ${disabled} ${multiple} ${filterable} ${clearable} ${width}>${child}` + }, + 'el-radio-group': el => { + const { disabled, vModel } = attrBuilder(el) + const size = `size="${el.size}"` + let child = buildElRadioGroupChild(el) + + if (child) child = `\n${child}\n` // 换行 + return `<${el.tag} ${vModel} ${size} ${disabled}>${child}` + }, + 'el-checkbox-group': el => { + const { disabled, vModel } = attrBuilder(el) + const size = `size="${el.size}"` + const min = el.min ? `:min="${el.min}"` : '' + const max = el.max ? `:max="${el.max}"` : '' + let child = buildElCheckboxGroupChild(el) + + if (child) child = `\n${child}\n` // 换行 + return `<${el.tag} ${vModel} ${min} ${max} ${size} ${disabled}>${child}` + }, + 'el-switch': el => { + const { disabled, vModel } = attrBuilder(el) + const activeText = el['active-text'] ? `active-text="${el['active-text']}"` : '' + const inactiveText = el['inactive-text'] ? `inactive-text="${el['inactive-text']}"` : '' + const activeColor = el['active-color'] ? `active-color="${el['active-color']}"` : '' + const inactiveColor = el['inactive-color'] ? `inactive-color="${el['inactive-color']}"` : '' + const activeValue = el['active-value'] !== true ? `:active-value='${JSON.stringify(el['active-value'])}'` : '' + const inactiveValue = el['inactive-value'] !== false ? `:inactive-value='${JSON.stringify(el['inactive-value'])}'` : '' + + return `<${el.tag} ${vModel} ${activeText} ${inactiveText} ${activeColor} ${inactiveColor} ${activeValue} ${inactiveValue} ${disabled}>` + }, + 'el-cascader': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const options = el.options ? `:options="${el.vModel}Options"` : '' + const props = el.props ? `:props="${el.vModel}Props"` : '' + const showAllLevels = el['show-all-levels'] ? '' : ':show-all-levels="false"' + const filterable = el.filterable ? 'filterable' : '' + const separator = el.separator === '/' ? '' : `separator="${el.separator}"` + + return `<${el.tag} ${vModel} ${options} ${props} ${width} ${showAllLevels} ${placeholder} ${separator} ${filterable} ${clearable} ${disabled}>` + }, + 'el-slider': el => { + const { disabled, vModel } = attrBuilder(el) + const min = el.min ? `:min='${el.min}'` : '' + const max = el.max ? `:max='${el.max}'` : '' + const step = el.step ? `:step='${el.step}'` : '' + const range = el.range ? 'range' : '' + const showStops = el['show-stops'] ? `:show-stops="${el['show-stops']}"` : '' + + return `<${el.tag} ${min} ${max} ${step} ${vModel} ${range} ${showStops} ${disabled}>` + }, + 'el-time-picker': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' + const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' + const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' + const isRange = el['is-range'] ? 'is-range' : '' + const format = el.format ? `format="${el.format}"` : '' + const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' + const pickerOptions = el['picker-options'] ? `:picker-options='${JSON.stringify(el['picker-options'])}'` : '' + + return `<${el.tag} ${vModel} ${isRange} ${format} ${valueFormat} ${pickerOptions} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${disabled}>` + }, + 'el-date-picker': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' + const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' + const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' + const format = el.format ? `format="${el.format}"` : '' + const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' + const type = el.type === 'date' ? '' : `type="${el.type}"` + const readonly = el.readonly ? 'readonly' : '' + + return `<${el.tag} ${type} ${vModel} ${format} ${valueFormat} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${readonly} ${disabled}>` + }, + 'el-rate': el => { + const { disabled, vModel } = attrBuilder(el) + const max = el.max ? `:max='${el.max}'` : '' + const allowHalf = el['allow-half'] ? 'allow-half' : '' + const showText = el['show-text'] ? 'show-text' : '' + const showScore = el['show-score'] ? 'show-score' : '' + + return `<${el.tag} ${vModel} ${allowHalf} ${showText} ${showScore} ${disabled}>` + }, + 'el-color-picker': el => { + const { disabled, vModel } = attrBuilder(el) + const size = `size="${el.size}"` + const showAlpha = el['show-alpha'] ? 'show-alpha' : '' + const colorFormat = el['color-format'] ? `color-format="${el['color-format']}"` : '' + + return `<${el.tag} ${vModel} ${size} ${showAlpha} ${colorFormat} ${disabled}>` + }, + 'el-upload': el => { + const disabled = el.disabled ? ':disabled=\'true\'' : '' + const action = el.action ? `:action="${el.vModel}Action"` : '' + const multiple = el.multiple ? 'multiple' : '' + const listType = el['list-type'] !== 'text' ? `list-type="${el['list-type']}"` : '' + const accept = el.accept ? `accept="${el.accept}"` : '' + const name = el.name !== 'file' ? `name="${el.name}"` : '' + const autoUpload = el['auto-upload'] === false ? ':auto-upload="false"' : '' + const beforeUpload = `:before-upload="${el.vModel}BeforeUpload"` + const fileList = `:file-list="${el.vModel}fileList"` + const ref = `ref="${el.vModel}"` + let child = buildElUploadChild(el) + + if (child) child = `\n${child}\n` // 换行 + return `<${el.tag} ${ref} ${fileList} ${action} ${autoUpload} ${multiple} ${beforeUpload} ${listType} ${accept} ${name} ${disabled}>${child}` + } +} + +function attrBuilder(el) { + return { + vModel: `v-model="${confGlobal.formModel}.${el.vModel}"`, + clearable: el.clearable ? 'clearable' : '', + placeholder: el.placeholder ? `placeholder="${el.placeholder}"` : '', + width: el.style && el.style.width ? ':style="{width: \'100%\'}"' : '', + disabled: el.disabled ? ':disabled=\'true\'' : '' + } +} + +// el-buttin 子级 +function buildElButtonChild(conf) { + const children = [] + if (conf.default) { + children.push(conf.default) + } + return children.join('\n') +} + +// el-input innerHTML +function buildElInputChild(conf) { + const children = [] + if (conf.prepend) { + children.push(``) + } + if (conf.append) { + children.push(``) + } + return children.join('\n') +} + +function buildElSelectChild(conf) { + const children = [] + if (conf.options && conf.options.length) { + children.push(``) + } + return children.join('\n') +} + +function buildElRadioGroupChild(conf) { + const children = [] + if (conf.options && conf.options.length) { + const tag = conf.optionType === 'button' ? 'el-radio-button' : 'el-radio' + const border = conf.border ? 'border' : '' + children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}`) + } + return children.join('\n') +} + +function buildElCheckboxGroupChild(conf) { + const children = [] + if (conf.options && conf.options.length) { + const tag = conf.optionType === 'button' ? 'el-checkbox-button' : 'el-checkbox' + const border = conf.border ? 'border' : '' + children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}`) + } + return children.join('\n') +} + +function buildElUploadChild(conf) { + const list = [] + if (conf['list-type'] === 'picture-card') list.push('') + else list.push(`${conf.buttonText}`) + if (conf.showTip) list.push(`
只能上传不超过 ${conf.fileSize}${conf.sizeUnit} 的${conf.accept}文件
`) + return list.join('\n') +} + +export function makeUpHtml(conf, type) { + const htmlList = [] + confGlobal = conf + someSpanIsNot24 = conf.fields.some(item => item.span !== 24) + conf.fields.forEach(el => { + htmlList.push(layouts[el.layout](el)) + }) + const htmlStr = htmlList.join('\n') + + let temp = buildFormTemplate(conf, htmlStr, type) + if (type === 'dialog') { + temp = dialogWrapper(temp) + } + confGlobal = null + return temp +} diff --git a/src/utils/generator/icon.json b/src/utils/generator/icon.json new file mode 100644 index 0000000..2d9999a --- /dev/null +++ b/src/utils/generator/icon.json @@ -0,0 +1 @@ +["platform-eleme","eleme","delete-solid","delete","s-tools","setting","user-solid","user","phone","phone-outline","more","more-outline","star-on","star-off","s-goods","goods","warning","warning-outline","question","info","remove","circle-plus","success","error","zoom-in","zoom-out","remove-outline","circle-plus-outline","circle-check","circle-close","s-help","help","minus","plus","check","close","picture","picture-outline","picture-outline-round","upload","upload2","download","camera-solid","camera","video-camera-solid","video-camera","message-solid","bell","s-cooperation","s-order","s-platform","s-fold","s-unfold","s-operation","s-promotion","s-home","s-release","s-ticket","s-management","s-open","s-shop","s-marketing","s-flag","s-comment","s-finance","s-claim","s-custom","s-opportunity","s-data","s-check","s-grid","menu","share","d-caret","caret-left","caret-right","caret-bottom","caret-top","bottom-left","bottom-right","back","right","bottom","top","top-left","top-right","arrow-left","arrow-right","arrow-down","arrow-up","d-arrow-left","d-arrow-right","video-pause","video-play","refresh","refresh-right","refresh-left","finished","sort","sort-up","sort-down","rank","loading","view","c-scale-to-original","date","edit","edit-outline","folder","folder-opened","folder-add","folder-remove","folder-delete","folder-checked","tickets","document-remove","document-delete","document-copy","document-checked","document","document-add","printer","paperclip","takeaway-box","search","monitor","attract","mobile","scissors","umbrella","headset","brush","mouse","coordinate","magic-stick","reading","data-line","data-board","pie-chart","data-analysis","collection-tag","film","suitcase","suitcase-1","receiving","collection","files","notebook-1","notebook-2","toilet-paper","office-building","school","table-lamp","house","no-smoking","smoking","shopping-cart-full","shopping-cart-1","shopping-cart-2","shopping-bag-1","shopping-bag-2","sold-out","sell","present","box","bank-card","money","coin","wallet","discount","price-tag","news","guide","male","female","thumb","cpu","link","connection","open","turn-off","set-up","chat-round","chat-line-round","chat-square","chat-dot-round","chat-dot-square","chat-line-square","message","postcard","position","turn-off-microphone","microphone","close-notification","bangzhu","time","odometer","crop","aim","switch-button","full-screen","copy-document","mic","stopwatch","medal-1","medal","trophy","trophy-1","first-aid-kit","discover","place","location","location-outline","location-information","add-location","delete-location","map-location","alarm-clock","timer","watch-1","watch","lock","unlock","key","service","mobile-phone","bicycle","truck","ship","basketball","football","soccer","baseball","wind-power","light-rain","lightning","heavy-rain","sunrise","sunrise-1","sunset","sunny","cloudy","partly-cloudy","cloudy-and-sunny","moon","moon-night","dish","dish-1","food","chicken","fork-spoon","knife-fork","burger","tableware","sugar","dessert","ice-cream","hot-water","water-cup","coffee-cup","cold-drink","goblet","goblet-full","goblet-square","goblet-square-full","refrigerator","grape","watermelon","cherry","apple","pear","orange","coffee","ice-tea","ice-drink","milk-tea","potato-strips","lollipop","ice-cream-square","ice-cream-round"] \ No newline at end of file diff --git a/src/utils/generator/js.js b/src/utils/generator/js.js new file mode 100644 index 0000000..ee8668d --- /dev/null +++ b/src/utils/generator/js.js @@ -0,0 +1,235 @@ +import { exportDefault, titleCase } from '@/utils/index' +import { trigger } from './config' + +const units = { + KB: '1024', + MB: '1024 / 1024', + GB: '1024 / 1024 / 1024' +} +let confGlobal +const inheritAttrs = { + file: '', + dialog: 'inheritAttrs: false,' +} + + +export function makeUpJs(conf, type) { + confGlobal = conf = JSON.parse(JSON.stringify(conf)) + const dataList = [] + const ruleList = [] + const optionsList = [] + const propsList = [] + const methodList = mixinMethod(type) + const uploadVarList = [] + + conf.fields.forEach(el => { + buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) + }) + + const script = buildexport( + conf, + type, + dataList.join('\n'), + ruleList.join('\n'), + optionsList.join('\n'), + uploadVarList.join('\n'), + propsList.join('\n'), + methodList.join('\n') + ) + confGlobal = null + return script +} + +function buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) { + buildData(el, dataList) + buildRules(el, ruleList) + + if (el.options && el.options.length) { + buildOptions(el, optionsList) + if (el.dataType === 'dynamic') { + const model = `${el.vModel}Options` + const options = titleCase(model) + buildOptionMethod(`get${options}`, model, methodList) + } + } + + if (el.props && el.props.props) { + buildProps(el, propsList) + } + + if (el.action && el.tag === 'el-upload') { + uploadVarList.push( + `${el.vModel}Action: '${el.action}', + ${el.vModel}fileList: [],` + ) + methodList.push(buildBeforeUpload(el)) + if (!el['auto-upload']) { + methodList.push(buildSubmitUpload(el)) + } + } + + if (el.children) { + el.children.forEach(el2 => { + buildAttributes(el2, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) + }) + } +} + +function mixinMethod(type) { + const list = []; const + minxins = { + file: confGlobal.formBtns ? { + submitForm: `submitForm() { + this.$refs['${confGlobal.formRef}'].validate(valid => { + if(!valid) return + // TODO 提交表单 + }) + },`, + resetForm: `resetForm() { + this.$refs['${confGlobal.formRef}'].resetFields() + },` + } : null, + dialog: { + onOpen: 'onOpen() {},', + onClose: `onClose() { + this.$refs['${confGlobal.formRef}'].resetFields() + },`, + close: `close() { + this.$emit('update:visible', false) + },`, + handleConfirm: `handleConfirm() { + this.$refs['${confGlobal.formRef}'].validate(valid => { + if(!valid) return + this.close() + }) + },` + } + } + + const methods = minxins[type] + if (methods) { + Object.keys(methods).forEach(key => { + list.push(methods[key]) + }) + } + + return list +} + +function buildData(conf, dataList) { + if (conf.vModel === undefined) return + let defaultValue + if (typeof (conf.defaultValue) === 'string' && !conf.multiple) { + defaultValue = `'${conf.defaultValue}'` + } else { + defaultValue = `${JSON.stringify(conf.defaultValue)}` + } + dataList.push(`${conf.vModel}: ${defaultValue},`) +} + +function buildRules(conf, ruleList) { + if (conf.vModel === undefined) return + const rules = [] + if (trigger[conf.tag]) { + if (conf.required) { + const type = Array.isArray(conf.defaultValue) ? 'type: \'array\',' : '' + let message = Array.isArray(conf.defaultValue) ? `请至少选择一个${conf.vModel}` : conf.placeholder + if (message === undefined) message = `${conf.label}不能为空` + rules.push(`{ required: true, ${type} message: '${message}', trigger: '${trigger[conf.tag]}' }`) + } + if (conf.regList && Array.isArray(conf.regList)) { + conf.regList.forEach(item => { + if (item.pattern) { + rules.push(`{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${trigger[conf.tag]}' }`) + } + }) + } + ruleList.push(`${conf.vModel}: [${rules.join(',')}],`) + } +} + +function buildOptions(conf, optionsList) { + if (conf.vModel === undefined) return + if (conf.dataType === 'dynamic') { conf.options = [] } + const str = `${conf.vModel}Options: ${JSON.stringify(conf.options)},` + optionsList.push(str) +} + +function buildProps(conf, propsList) { + if (conf.dataType === 'dynamic') { + conf.valueKey !== 'value' && (conf.props.props.value = conf.valueKey) + conf.labelKey !== 'label' && (conf.props.props.label = conf.labelKey) + conf.childrenKey !== 'children' && (conf.props.props.children = conf.childrenKey) + } + const str = `${conf.vModel}Props: ${JSON.stringify(conf.props.props)},` + propsList.push(str) +} + +function buildBeforeUpload(conf) { + const unitNum = units[conf.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const + returnList = [] + if (conf.fileSize) { + rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${conf.fileSize} + if(!isRightSize){ + this.$message.error('文件大小超过 ${conf.fileSize}${conf.sizeUnit}') + }` + returnList.push('isRightSize') + } + if (conf.accept) { + acceptCode = `let isAccept = new RegExp('${conf.accept}').test(file.type) + if(!isAccept){ + this.$message.error('应该选择${conf.accept}类型的文件') + }` + returnList.push('isAccept') + } + const str = `${conf.vModel}BeforeUpload(file) { + ${rightSizeCode} + ${acceptCode} + return ${returnList.join('&&')} + },` + return returnList.length ? str : '' +} + +function buildSubmitUpload(conf) { + const str = `submitUpload() { + this.$refs['${conf.vModel}'].submit() + },` + return str +} + +function buildOptionMethod(methodName, model, methodList) { + const str = `${methodName}() { + // TODO 发起请求获取数据 + this.${model} + },` + methodList.push(str) +} + +function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods) { + const str = `${exportDefault}{ + ${inheritAttrs[type]} + components: {}, + props: [], + data () { + return { + ${conf.formModel}: { + ${data} + }, + ${conf.formRules}: { + ${rules} + }, + ${uploadVar} + ${selectOptions} + ${props} + } + }, + computed: {}, + watch: {}, + created () {}, + mounted () {}, + methods: { + ${methods} + } +}` + return str +} diff --git a/src/utils/generator/render.js b/src/utils/generator/render.js new file mode 100644 index 0000000..e8640f0 --- /dev/null +++ b/src/utils/generator/render.js @@ -0,0 +1,126 @@ +import { makeMap } from '@/utils/index' + +// 参考https://github.com/vuejs/vue/blob/v2.6.10/src/platforms/web/server/util.js +const isAttr = makeMap( + 'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' + + 'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' + + 'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,' + + 'name,contenteditable,contextmenu,controls,coords,data,datetime,default,' + + 'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,' + + 'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' + + 'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' + + 'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' + + 'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' + + 'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' + + 'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' + + 'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' + + 'target,title,type,usemap,value,width,wrap' +) + +function vModel(self, dataObject, defaultValue) { + dataObject.props.value = defaultValue + + dataObject.on.input = val => { + self.$emit('input', val) + } +} + +const componentChild = { + 'el-button': { + default(h, conf, key) { + return conf[key] + }, + }, + 'el-input': { + prepend(h, conf, key) { + return + }, + append(h, conf, key) { + return + } + }, + 'el-select': { + options(h, conf, key) { + const list = [] + conf.options.forEach(item => { + list.push() + }) + return list + } + }, + 'el-radio-group': { + options(h, conf, key) { + const list = [] + conf.options.forEach(item => { + if (conf.optionType === 'button') list.push({item.label}) + else list.push({item.label}) + }) + return list + } + }, + 'el-checkbox-group': { + options(h, conf, key) { + const list = [] + conf.options.forEach(item => { + if (conf.optionType === 'button') { + list.push({item.label}) + } else { + list.push({item.label}) + } + }) + return list + } + }, + 'el-upload': { + 'list-type': (h, conf, key) => { + const list = [] + if (conf['list-type'] === 'picture-card') { + list.push() + } else { + list.push({conf.buttonText}) + } + if (conf.showTip) { + list.push(
只能上传不超过 {conf.fileSize}{conf.sizeUnit} 的{conf.accept}文件
) + } + return list + } + } +} + +export default { + render(h) { + const dataObject = { + attrs: {}, + props: {}, + on: {}, + style: {} + } + const confClone = JSON.parse(JSON.stringify(this.conf)) + const children = [] + + const childObjs = componentChild[confClone.tag] + if (childObjs) { + Object.keys(childObjs).forEach(key => { + const childFunc = childObjs[key] + if (confClone[key]) { + children.push(childFunc(h, confClone, key)) + } + }) + } + + Object.keys(confClone).forEach(key => { + const val = confClone[key] + if (key === 'vModel') { + vModel(this, dataObject, confClone.defaultValue) + } else if (dataObject[key]) { + dataObject[key] = val + } else if (!isAttr(key)) { + dataObject.props[key] = val + } else { + dataObject.attrs[key] = val + } + }) + return h(this.conf.tag, dataObject, children) + }, + props: ['conf'] +} diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..df5db12 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,390 @@ +import { parseTime } from './ruoyi' + +/** + * 表格时间格式化 + */ +export function formatDate(cellValue) { + if (cellValue == null || cellValue == "") return ""; + var date = new Date(cellValue) + var year = date.getFullYear() + var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() + return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function getQueryObject(url) { + url = url == null ? window.location.href : url + const search = url.substring(url.lastIndexOf('?') + 1) + const obj = {} + const reg = /([^?&=]+)=([^?&=]*)/g + search.replace(reg, (rs, $1, $2) => { + const name = decodeURIComponent($1) + let val = decodeURIComponent($2) + val = String(val) + obj[name] = val + return rs + }) + return obj +} + +/** + * @param {string} input value + * @returns {number} output value + */ +export function byteLength(str) { + // returns the byte length of an utf8 string + let s = str.length + for (var i = str.length - 1; i >= 0; i--) { + const code = str.charCodeAt(i) + if (code > 0x7f && code <= 0x7ff) s++ + else if (code > 0x7ff && code <= 0xffff) s += 2 + if (code >= 0xDC00 && code <= 0xDFFF) i-- + } + return s +} + +/** + * @param {Array} actual + * @returns {Array} + */ +export function cleanArray(actual) { + const newArray = [] + for (let i = 0; i < actual.length; i++) { + if (actual[i]) { + newArray.push(actual[i]) + } + } + return newArray +} + +/** + * @param {Object} json + * @returns {Array} + */ +export function param(json) { + if (!json) return '' + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +/** + * @param {string} val + * @returns {string} + */ +export function html2Text(val) { + const div = document.createElement('div') + div.innerHTML = val + return div.textContent || div.innerText +} + +/** + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ +export function objectMerge(target, source) { + if (typeof target !== 'object') { + target = {} + } + if (Array.isArray(source)) { + return source.slice() + } + Object.keys(source).forEach(property => { + const sourceProperty = source[property] + if (typeof sourceProperty === 'object') { + target[property] = objectMerge(target[property], sourceProperty) + } else { + target[property] = sourceProperty + } + }) + return target +} + +/** + * @param {HTMLElement} element + * @param {string} className + */ +export function toggleClass(element, className) { + if (!element || !className) { + return + } + let classString = element.className + const nameIndex = classString.indexOf(className) + if (nameIndex === -1) { + classString += '' + className + } else { + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) + } + element.className = classString +} + +/** + * @param {string} type + * @returns {Date} + */ +export function getTime(type) { + if (type === 'start') { + return new Date().getTime() - 3600 * 1000 * 24 * 90 + } else { + return new Date(new Date().toDateString()) + } +} + +/** + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function() { + // 据上一次触发时间间隔 + const last = +new Date() - timestamp + + // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function(...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 如果延时不存在,重新设定延时 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +/** + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ +export function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +/** + * @param {Array} arr + * @returns {Array} + */ +export function uniqueArr(arr) { + return Array.from(new Set(arr)) +} + +/** + * @returns {string} + */ +export function createUniqueString() { + const timestamp = +new Date() + '' + const randomNum = parseInt((1 + Math.random()) * 65536) + '' + return (+(randomNum + timestamp)).toString(32) +} + +/** + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele, cls) { + return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) +} + +/** + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function addClass(ele, cls) { + if (!hasClass(ele, cls)) ele.className += ' ' + cls +} + +/** + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function removeClass(ele, cls) { + if (hasClass(ele, cls)) { + const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') + ele.className = ele.className.replace(reg, ' ') + } +} + +export function makeMap(str, expectsLowerCase) { + const map = Object.create(null) + const list = str.split(',') + for (let i = 0; i < list.length; i++) { + map[list[i]] = true + } + return expectsLowerCase + ? val => map[val.toLowerCase()] + : val => map[val] +} + +export const exportDefault = 'export default ' + +export const beautifierConf = { + html: { + indent_size: '2', + indent_char: ' ', + max_preserve_newlines: '-1', + preserve_newlines: false, + keep_array_indentation: false, + break_chained_methods: false, + indent_scripts: 'separate', + brace_style: 'end-expand', + space_before_conditional: true, + unescape_strings: false, + jslint_happy: false, + end_with_newline: true, + wrap_line_length: '110', + indent_inner_html: true, + comma_first: false, + e4x: true, + indent_empty_lines: true + }, + js: { + indent_size: '2', + indent_char: ' ', + max_preserve_newlines: '-1', + preserve_newlines: false, + keep_array_indentation: false, + break_chained_methods: false, + indent_scripts: 'normal', + brace_style: 'end-expand', + space_before_conditional: true, + unescape_strings: false, + jslint_happy: true, + end_with_newline: true, + wrap_line_length: '110', + indent_inner_html: true, + comma_first: false, + e4x: true, + indent_empty_lines: true + } +} + +// 首字母大小 +export function titleCase(str) { + return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()) +} + +// 下划转驼峰 +export function camelCase(str) { + return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase()) +} + +export function isNumberStr(str) { + return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) +} + diff --git a/src/utils/jsencrypt.js b/src/utils/jsencrypt.js new file mode 100644 index 0000000..78d9523 --- /dev/null +++ b/src/utils/jsencrypt.js @@ -0,0 +1,30 @@ +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' + +// 密钥对生成 http://web.chacuo.net/netrsakeypair + +const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' + +const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + + 'UP8iWi1Qw0Y=' + +// 加密 +export function encrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(txt) // 对数据进行加密 +} + +// 解密 +export function decrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 设置私钥 + return encryptor.decrypt(txt) // 对数据进行解密 +} + diff --git a/src/utils/permission.js b/src/utils/permission.js new file mode 100644 index 0000000..189a716 --- /dev/null +++ b/src/utils/permission.js @@ -0,0 +1,47 @@ +import store from '@/store' + +/** + * 字符权限校验 + * @param {Array} value 校验值 + * @returns {Boolean} + */ +export function checkPermi(value) { + if (value && value instanceof Array && value.length > 0) { + const permissions = store.getters && store.getters.permissions + const permissionDatas = value + const all_permission = "*:*:*"; + + const hasPermission = permissions.some(permission => { + return all_permission === permission || permissionDatas.includes(permission) + }) + + return hasPermission; + + } else { + console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`) + return false + } +} + +/** + * 角色权限校验 + * @param {Array} value 校验值 + * @returns {Boolean} + */ +export function checkRole(value) { + if (value && value instanceof Array && value.length > 0) { + const roles = store.getters && store.getters.roles + const permissionRoles = value + const super_admin = "admin"; + + const hasRole = roles.some(role => { + return super_admin === role || permissionRoles.includes(role) + }) + + return hasRole; + + } else { + console.error(`need roles! Like checkRole="['admin','editor']"`) + return false + } +} \ No newline at end of file diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..ffb0d21 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,152 @@ +import axios from 'axios' +import { Notification, MessageBox, Message, Loading } from 'element-ui' +import store from '@/store' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { tansParams, blobValidate } from "@/utils/ruoyi"; +import cache from '@/plugins/cache' +import { saveAs } from 'file-saver' + +let downloadLoadingInstance; +// 是否显示重新登录 +export let isRelogin = { show: false }; + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 10000 +}) + +// request拦截器 +service.interceptors.request.use(config => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + if (getToken() && !isToken) { + config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj = { + url: config.url, + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, + time: new Date().getTime() + } + const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小 + const limitSize = 5 * 1024 * 1024; // 限制存放数据5M + if (requestSize >= limitSize) { + console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。') + return config; + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '数据正在处理,请勿重复提交'; + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config +}, error => { + console.log(error) + Promise.reject(error) +}) + +// 响应拦截器 +service.interceptors.response.use(res => { + // 未设置状态码则默认成功状态 + const code = res.data.code || 200; + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 二进制数据则直接返回 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + return res.data + } + if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true; + MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { + isRelogin.show = false; + store.dispatch('LogOut').then(() => { + location.href = '/index'; + }) + }).catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + Message({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === 601) { + Message({ message: msg, type: 'warning' }) + return Promise.reject('error') + } else if (code !== 200) { + Notification.error({ title: msg }) + return Promise.reject('error') + } else { + return res.data + } + }, + error => { + console.log('err' + error) + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + Message({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + } +) + +// 通用下载方法 +export function download(url, params, filename, config) { + downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) + return service.post(url, params, { + transformRequest: [(params) => { return tansParams(params) }], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config + }).then(async (data) => { + const isBlob = blobValidate(data); + if (isBlob) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + } + downloadLoadingInstance.close(); + }).catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close(); + }) +} + +export default service diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js new file mode 100644 index 0000000..44bf9c4 --- /dev/null +++ b/src/utils/ruoyi.js @@ -0,0 +1,233 @@ + + +/** + * 通用js方法封装处理 + * Copyright (c) 2019 ruoyi + */ + +// 日期格式化 +export function parseTime(time, pattern) { + if (arguments.length === 0 || !time) { + return null + } + const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} + +// 表单重置 +export function resetForm(refName) { + if (this.$refs[refName]) { + this.$refs[refName].resetFields(); + } +} + +// 添加日期范围 +export function addDateRange(params, dateRange, propName) { + let search = params; + search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; + dateRange = Array.isArray(dateRange) ? dateRange : []; + if (typeof (propName) === 'undefined') { + search.params['beginTime'] = dateRange[0]; + search.params['endTime'] = dateRange[1]; + } else { + search.params['begin' + propName] = dateRange[0]; + search.params['end' + propName] = dateRange[1]; + } + return search; +} + +// 回显数据字典 +export function selectDictLabel(datas, value) { + if (value === undefined) { + return ""; + } + var actions = []; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + value)) { + actions.push(datas[key].label); + return true; + } + }) + if (actions.length === 0) { + actions.push(value); + } + return actions.join(''); +} + +// 回显数据字典(字符串、数组) +export function selectDictLabels(datas, value, separator) { + if (value === undefined || value.length ===0) { + return ""; + } + if (Array.isArray(value)) { + value = value.join(","); + } + var actions = []; + var currentSeparator = undefined === separator ? "," : separator; + var temp = value.split(currentSeparator); + Object.keys(value.split(currentSeparator)).some((val) => { + var match = false; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + temp[val])) { + actions.push(datas[key].label + currentSeparator); + match = true; + } + }) + if (!match) { + actions.push(temp[val] + currentSeparator); + } + }) + return actions.join('').substring(0, actions.join('').length - 1); +} + +// 字符串格式化(%s ) +export function sprintf(str) { + var args = arguments, flag = true, i = 1; + str = str.replace(/%s/g, function () { + var arg = args[i++]; + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + return arg; + }); + return flag ? str : ''; +} + +// 转换字符串,undefined,null等转化为"" +export function parseStrEmpty(str) { + if (!str || str == "undefined" || str == "null") { + return ""; + } + return str; +} + +// 数据合并 +export function mergeRecursive(source, target) { + for (var p in target) { + try { + if (target[p].constructor == Object) { + source[p] = mergeRecursive(source[p], target[p]); + } else { + source[p] = target[p]; + } + } catch (e) { + source[p] = target[p]; + } + } + return source; +}; + +/** + * 构造树型结构数据 + * @param {*} data 数据源 + * @param {*} id id字段 默认 'id' + * @param {*} parentId 父节点字段 默认 'parentId' + * @param {*} children 孩子节点字段 默认 'children' + */ +export function handleTree(data, id, parentId, children) { + let config = { + id: id || 'id', + parentId: parentId || 'parentId', + childrenList: children || 'children' + }; + + var childrenListMap = {}; + var nodeIds = {}; + var tree = []; + + for (let d of data) { + let parentId = d[config.parentId]; + if (childrenListMap[parentId] == null) { + childrenListMap[parentId] = []; + } + nodeIds[d[config.id]] = d; + childrenListMap[parentId].push(d); + } + + for (let d of data) { + let parentId = d[config.parentId]; + if (nodeIds[parentId] == null) { + tree.push(d); + } + } + + for (let t of tree) { + adaptToChildrenList(t); + } + + function adaptToChildrenList(o) { + if (childrenListMap[o[config.id]] !== null) { + o[config.childrenList] = childrenListMap[o[config.id]]; + } + if (o[config.childrenList]) { + for (let c of o[config.childrenList]) { + adaptToChildrenList(c); + } + } + } + return tree; +} + +/** +* 参数处理 +* @param {*} params 参数 +*/ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName]; + var part = encodeURIComponent(propName) + "="; + if (value !== null && value !== "" && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']'; + var subPart = encodeURIComponent(params) + "="; + result += subPart + encodeURIComponent(value[key]) + "&"; + } + } + } else { + result += part + encodeURIComponent(value) + "&"; + } + } + } + return result +} + +// 验证是否为blob格式 +export function blobValidate(data) { + return data.type !== 'application/json' +} diff --git a/src/utils/scroll-to.js b/src/utils/scroll-to.js new file mode 100644 index 0000000..c5d8e04 --- /dev/null +++ b/src/utils/scroll-to.js @@ -0,0 +1,58 @@ +Math.easeInOutQuad = function(t, b, c, d) { + t /= d / 2 + if (t < 1) { + return c / 2 * t * t + b + } + t-- + return -c / 2 * (t * (t - 2) - 1) + b +} + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +var requestAnimFrame = (function() { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } +})() + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +function move(amount) { + document.documentElement.scrollTop = amount + document.body.parentNode.scrollTop = amount + document.body.scrollTop = amount +} + +function position() { + return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop +} + +/** + * @param {number} to + * @param {number} duration + * @param {Function} callback + */ +export function scrollTo(to, duration, callback) { + const start = position() + const change = to - start + const increment = 20 + let currentTime = 0 + duration = (typeof (duration) === 'undefined') ? 500 : duration + var animateScroll = function() { + // increment the time + currentTime += increment + // find the value with the quadratic in-out easing function + var val = Math.easeInOutQuad(currentTime, start, change, duration) + // move the document.body + move(val) + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll) + } else { + if (callback && typeof (callback) === 'function') { + // the animation is done so lets callback + callback() + } + } + } + animateScroll() +} diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..57a568e --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,80 @@ +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} + +/** + * @param {string} url + * @returns {Boolean} + */ +export function validURL(url) { + const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validLowerCase(str) { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUpperCase(str) { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validAlphabets(str) { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + +/** + * @param {string} email + * @returns {Boolean} + */ +export function validEmail(email) { + const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + return reg.test(email) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function isString(str) { + return typeof str === 'string' || str instanceof String; +} + +/** + * @param {Array} arg + * @returns {Boolean} + */ +export function isArray(arg) { + if (typeof Array.isArray === 'undefined') { + return Object.prototype.toString.call(arg) === '[object Array]' + } + return Array.isArray(arg) +} diff --git a/src/views/dashboard/Announcement.vue b/src/views/dashboard/Announcement.vue new file mode 100644 index 0000000..46eb25e --- /dev/null +++ b/src/views/dashboard/Announcement.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/views/dashboard/BarChart.vue b/src/views/dashboard/BarChart.vue new file mode 100644 index 0000000..adf2829 --- /dev/null +++ b/src/views/dashboard/BarChart.vue @@ -0,0 +1,157 @@ + + + diff --git a/src/views/dashboard/FunnelChart.vue b/src/views/dashboard/FunnelChart.vue new file mode 100644 index 0000000..bebac25 --- /dev/null +++ b/src/views/dashboard/FunnelChart.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/views/dashboard/LineChart.vue b/src/views/dashboard/LineChart.vue new file mode 100644 index 0000000..591b5b0 --- /dev/null +++ b/src/views/dashboard/LineChart.vue @@ -0,0 +1,247 @@ + + + diff --git a/src/views/dashboard/PanelGroup.vue b/src/views/dashboard/PanelGroup.vue new file mode 100644 index 0000000..6e9150e --- /dev/null +++ b/src/views/dashboard/PanelGroup.vue @@ -0,0 +1,296 @@ + + + + + diff --git a/src/views/dashboard/PanelGroupProcess.vue b/src/views/dashboard/PanelGroupProcess.vue new file mode 100644 index 0000000..95d2379 --- /dev/null +++ b/src/views/dashboard/PanelGroupProcess.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/src/views/dashboard/PieChart.vue b/src/views/dashboard/PieChart.vue new file mode 100644 index 0000000..e0b3dcd --- /dev/null +++ b/src/views/dashboard/PieChart.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/dashboard/RaddarChart.vue b/src/views/dashboard/RaddarChart.vue new file mode 100644 index 0000000..35782c2 --- /dev/null +++ b/src/views/dashboard/RaddarChart.vue @@ -0,0 +1,116 @@ + + + diff --git a/src/views/dashboard/mixins/resize.js b/src/views/dashboard/mixins/resize.js new file mode 100644 index 0000000..b1e76e9 --- /dev/null +++ b/src/views/dashboard/mixins/resize.js @@ -0,0 +1,56 @@ +import { debounce } from '@/utils' + +export default { + data() { + return { + $_sidebarElm: null, + $_resizeHandler: null + } + }, + mounted() { + this.initListener() + }, + activated() { + if (!this.$_resizeHandler) { + // avoid duplication init + this.initListener() + } + + // when keep-alive chart activated, auto resize + this.resize() + }, + beforeDestroy() { + this.destroyListener() + }, + deactivated() { + this.destroyListener() + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_sidebarResizeHandler(e) { + if (e.propertyName === 'width') { + this.$_resizeHandler() + } + }, + initListener() { + this.$_resizeHandler = debounce(() => { + this.resize() + }, 100) + window.addEventListener('resize', this.$_resizeHandler) + + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] + this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) + }, + destroyListener() { + window.removeEventListener('resize', this.$_resizeHandler) + this.$_resizeHandler = null + + this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) + }, + resize() { + const { chart } = this + chart && chart.resize() + } + } +} diff --git a/src/views/error/401.vue b/src/views/error/401.vue new file mode 100644 index 0000000..448b6ec --- /dev/null +++ b/src/views/error/401.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/error/404.vue b/src/views/error/404.vue new file mode 100644 index 0000000..96f075c --- /dev/null +++ b/src/views/error/404.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..bf7c3ce --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/src/views/index_v1.vue b/src/views/index_v1.vue new file mode 100644 index 0000000..d2d2ec6 --- /dev/null +++ b/src/views/index_v1.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/views/login.vue b/src/views/login.vue new file mode 100644 index 0000000..13ccbb3 --- /dev/null +++ b/src/views/login.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/src/views/monitor/cache/index.vue b/src/views/monitor/cache/index.vue new file mode 100644 index 0000000..8d2f378 --- /dev/null +++ b/src/views/monitor/cache/index.vue @@ -0,0 +1,148 @@ + + + diff --git a/src/views/monitor/cache/list.vue b/src/views/monitor/cache/list.vue new file mode 100644 index 0000000..29a7c74 --- /dev/null +++ b/src/views/monitor/cache/list.vue @@ -0,0 +1,241 @@ + + + diff --git a/src/views/monitor/druid/index.vue b/src/views/monitor/druid/index.vue new file mode 100644 index 0000000..c6ad585 --- /dev/null +++ b/src/views/monitor/druid/index.vue @@ -0,0 +1,15 @@ + + diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue new file mode 100644 index 0000000..892c727 --- /dev/null +++ b/src/views/monitor/job/index.vue @@ -0,0 +1,513 @@ + + + diff --git a/src/views/monitor/job/log.vue b/src/views/monitor/job/log.vue new file mode 100644 index 0000000..60bee1d --- /dev/null +++ b/src/views/monitor/job/log.vue @@ -0,0 +1,295 @@ + + + diff --git a/src/views/monitor/logininfor/index.vue b/src/views/monitor/logininfor/index.vue new file mode 100644 index 0000000..d6af834 --- /dev/null +++ b/src/views/monitor/logininfor/index.vue @@ -0,0 +1,246 @@ + + + + diff --git a/src/views/monitor/online/index.vue b/src/views/monitor/online/index.vue new file mode 100644 index 0000000..ad613c9 --- /dev/null +++ b/src/views/monitor/online/index.vue @@ -0,0 +1,122 @@ + + + + diff --git a/src/views/monitor/operlog/index.vue b/src/views/monitor/operlog/index.vue new file mode 100644 index 0000000..4a1828f --- /dev/null +++ b/src/views/monitor/operlog/index.vue @@ -0,0 +1,323 @@ + + + + diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue new file mode 100644 index 0000000..15ffc9a --- /dev/null +++ b/src/views/monitor/server/index.vue @@ -0,0 +1,207 @@ + + + diff --git a/src/views/recruit/apply/index.vue b/src/views/recruit/apply/index.vue new file mode 100644 index 0000000..7f75b2d --- /dev/null +++ b/src/views/recruit/apply/index.vue @@ -0,0 +1,1049 @@ + + + + + diff --git a/src/views/recruit/approved/index.vue b/src/views/recruit/approved/index.vue new file mode 100644 index 0000000..7a1c315 --- /dev/null +++ b/src/views/recruit/approved/index.vue @@ -0,0 +1,520 @@ + + + + + diff --git a/src/views/recruit/entry/index.vue b/src/views/recruit/entry/index.vue new file mode 100644 index 0000000..124412d --- /dev/null +++ b/src/views/recruit/entry/index.vue @@ -0,0 +1,876 @@ + + + + + diff --git a/src/views/recruit/follow/index.vue b/src/views/recruit/follow/index.vue new file mode 100644 index 0000000..6abfb37 --- /dev/null +++ b/src/views/recruit/follow/index.vue @@ -0,0 +1,456 @@ + + + + + diff --git a/src/views/recruit/follow/index_old.vue b/src/views/recruit/follow/index_old.vue new file mode 100644 index 0000000..4116774 --- /dev/null +++ b/src/views/recruit/follow/index_old.vue @@ -0,0 +1,546 @@ + + + + + diff --git a/src/views/recruit/grade/index.vue b/src/views/recruit/grade/index.vue new file mode 100644 index 0000000..f7c271a --- /dev/null +++ b/src/views/recruit/grade/index.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/src/views/recruit/interview/index.vue b/src/views/recruit/interview/index.vue new file mode 100644 index 0000000..c5d78f8 --- /dev/null +++ b/src/views/recruit/interview/index.vue @@ -0,0 +1,1180 @@ + + + + + diff --git a/src/views/recruit/jd/index.vue b/src/views/recruit/jd/index.vue new file mode 100644 index 0000000..f4b36e3 --- /dev/null +++ b/src/views/recruit/jd/index.vue @@ -0,0 +1,504 @@ + + + + + diff --git a/src/views/recruit/mypost/index.vue b/src/views/recruit/mypost/index.vue new file mode 100644 index 0000000..88895c9 --- /dev/null +++ b/src/views/recruit/mypost/index.vue @@ -0,0 +1,581 @@ + + + + + diff --git a/src/views/recruit/pending/index.vue b/src/views/recruit/pending/index.vue new file mode 100644 index 0000000..3046118 --- /dev/null +++ b/src/views/recruit/pending/index.vue @@ -0,0 +1,994 @@ + + + + + diff --git a/src/views/recruit/postsea/index.vue b/src/views/recruit/postsea/index.vue new file mode 100644 index 0000000..7af463b --- /dev/null +++ b/src/views/recruit/postsea/index.vue @@ -0,0 +1,331 @@ + + + + + diff --git a/src/views/recruit/process/index copy.vue b/src/views/recruit/process/index copy.vue new file mode 100644 index 0000000..66fc19e --- /dev/null +++ b/src/views/recruit/process/index copy.vue @@ -0,0 +1,957 @@ + + + + + diff --git a/src/views/recruit/process/index.vue b/src/views/recruit/process/index.vue new file mode 100644 index 0000000..6a06211 --- /dev/null +++ b/src/views/recruit/process/index.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/views/recruit/resume/index.vue b/src/views/recruit/resume/index.vue new file mode 100644 index 0000000..28ee823 --- /dev/null +++ b/src/views/recruit/resume/index.vue @@ -0,0 +1,581 @@ + + + + + diff --git a/src/views/recruit/structure/index.vue b/src/views/recruit/structure/index.vue new file mode 100644 index 0000000..fcf303f --- /dev/null +++ b/src/views/recruit/structure/index.vue @@ -0,0 +1,535 @@ + + + + + diff --git a/src/views/recruit/structure/index2.vue b/src/views/recruit/structure/index2.vue new file mode 100644 index 0000000..2b5d53d --- /dev/null +++ b/src/views/recruit/structure/index2.vue @@ -0,0 +1,355 @@ + + + diff --git a/src/views/recruit/structureMapNew/index.vue b/src/views/recruit/structureMapNew/index.vue new file mode 100644 index 0000000..1e6f34f --- /dev/null +++ b/src/views/recruit/structureMapNew/index.vue @@ -0,0 +1,150 @@ + + + + diff --git a/src/views/redirect.vue b/src/views/redirect.vue new file mode 100644 index 0000000..db4c1d6 --- /dev/null +++ b/src/views/redirect.vue @@ -0,0 +1,12 @@ + diff --git a/src/views/register.vue b/src/views/register.vue new file mode 100644 index 0000000..9dd228d --- /dev/null +++ b/src/views/register.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue new file mode 100644 index 0000000..3ab81fc --- /dev/null +++ b/src/views/system/config/index.vue @@ -0,0 +1,343 @@ + + + diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue new file mode 100644 index 0000000..e502b4e --- /dev/null +++ b/src/views/system/dept/index.vue @@ -0,0 +1,340 @@ + + + diff --git a/src/views/system/dict/data.vue b/src/views/system/dict/data.vue new file mode 100644 index 0000000..3befe4a --- /dev/null +++ b/src/views/system/dict/data.vue @@ -0,0 +1,402 @@ + + + \ No newline at end of file diff --git a/src/views/system/dict/index.vue b/src/views/system/dict/index.vue new file mode 100644 index 0000000..6ca5457 --- /dev/null +++ b/src/views/system/dict/index.vue @@ -0,0 +1,347 @@ + + + \ No newline at end of file diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue new file mode 100644 index 0000000..c703fa0 --- /dev/null +++ b/src/views/system/menu/index.vue @@ -0,0 +1,452 @@ + + + diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue new file mode 100644 index 0000000..7982b54 --- /dev/null +++ b/src/views/system/notice/index.vue @@ -0,0 +1,312 @@ + + + diff --git a/src/views/system/post/index.vue b/src/views/system/post/index.vue new file mode 100644 index 0000000..444bf63 --- /dev/null +++ b/src/views/system/post/index.vue @@ -0,0 +1,309 @@ + + + diff --git a/src/views/system/role/authUser.vue b/src/views/system/role/authUser.vue new file mode 100644 index 0000000..147aa33 --- /dev/null +++ b/src/views/system/role/authUser.vue @@ -0,0 +1,199 @@ + + + \ No newline at end of file diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue new file mode 100644 index 0000000..fb3b5ef --- /dev/null +++ b/src/views/system/role/index.vue @@ -0,0 +1,605 @@ + + + \ No newline at end of file diff --git a/src/views/system/role/selectUser.vue b/src/views/system/role/selectUser.vue new file mode 100644 index 0000000..b2b072f --- /dev/null +++ b/src/views/system/role/selectUser.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/views/system/user/authRole.vue b/src/views/system/user/authRole.vue new file mode 100644 index 0000000..943710e --- /dev/null +++ b/src/views/system/user/authRole.vue @@ -0,0 +1,117 @@ + + + \ No newline at end of file diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue new file mode 100644 index 0000000..d6941bd --- /dev/null +++ b/src/views/system/user/index.vue @@ -0,0 +1,685 @@ + + + \ No newline at end of file diff --git a/src/views/system/user/profile/index.vue b/src/views/system/user/profile/index.vue new file mode 100644 index 0000000..529c564 --- /dev/null +++ b/src/views/system/user/profile/index.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/views/system/user/profile/resetPwd.vue b/src/views/system/user/profile/resetPwd.vue new file mode 100644 index 0000000..f329e6e --- /dev/null +++ b/src/views/system/user/profile/resetPwd.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/views/system/user/profile/userAvatar.vue b/src/views/system/user/profile/userAvatar.vue new file mode 100644 index 0000000..cbf3ca1 --- /dev/null +++ b/src/views/system/user/profile/userAvatar.vue @@ -0,0 +1,184 @@ + + + + diff --git a/src/views/system/user/profile/userInfo.vue b/src/views/system/user/profile/userInfo.vue new file mode 100644 index 0000000..c970dc9 --- /dev/null +++ b/src/views/system/user/profile/userInfo.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/views/tool/build/CodeTypeDialog.vue b/src/views/tool/build/CodeTypeDialog.vue new file mode 100644 index 0000000..b5c2e2e --- /dev/null +++ b/src/views/tool/build/CodeTypeDialog.vue @@ -0,0 +1,106 @@ + + diff --git a/src/views/tool/build/DraggableItem.vue b/src/views/tool/build/DraggableItem.vue new file mode 100644 index 0000000..e881778 --- /dev/null +++ b/src/views/tool/build/DraggableItem.vue @@ -0,0 +1,100 @@ + diff --git a/src/views/tool/build/IconsDialog.vue b/src/views/tool/build/IconsDialog.vue new file mode 100644 index 0000000..958be50 --- /dev/null +++ b/src/views/tool/build/IconsDialog.vue @@ -0,0 +1,123 @@ + + + diff --git a/src/views/tool/build/RightPanel.vue b/src/views/tool/build/RightPanel.vue new file mode 100644 index 0000000..c2760eb --- /dev/null +++ b/src/views/tool/build/RightPanel.vue @@ -0,0 +1,946 @@ + + + + + diff --git a/src/views/tool/build/TreeNodeDialog.vue b/src/views/tool/build/TreeNodeDialog.vue new file mode 100644 index 0000000..fa7f0b2 --- /dev/null +++ b/src/views/tool/build/TreeNodeDialog.vue @@ -0,0 +1,149 @@ + + diff --git a/src/views/tool/build/index.vue b/src/views/tool/build/index.vue new file mode 100644 index 0000000..2bd298b --- /dev/null +++ b/src/views/tool/build/index.vue @@ -0,0 +1,768 @@ + + + + + diff --git a/src/views/tool/gen/basicInfoForm.vue b/src/views/tool/gen/basicInfoForm.vue new file mode 100644 index 0000000..7029529 --- /dev/null +++ b/src/views/tool/gen/basicInfoForm.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/views/tool/gen/createTable.vue b/src/views/tool/gen/createTable.vue new file mode 100644 index 0000000..f914b5d --- /dev/null +++ b/src/views/tool/gen/createTable.vue @@ -0,0 +1,45 @@ + + + diff --git a/src/views/tool/gen/editTable.vue b/src/views/tool/gen/editTable.vue new file mode 100644 index 0000000..951497a --- /dev/null +++ b/src/views/tool/gen/editTable.vue @@ -0,0 +1,234 @@ + + + diff --git a/src/views/tool/gen/genInfoForm.vue b/src/views/tool/gen/genInfoForm.vue new file mode 100644 index 0000000..98daf6d --- /dev/null +++ b/src/views/tool/gen/genInfoForm.vue @@ -0,0 +1,312 @@ + + + diff --git a/src/views/tool/gen/importTable.vue b/src/views/tool/gen/importTable.vue new file mode 100644 index 0000000..3ea9532 --- /dev/null +++ b/src/views/tool/gen/importTable.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/views/tool/gen/index.vue b/src/views/tool/gen/index.vue new file mode 100644 index 0000000..9237c30 --- /dev/null +++ b/src/views/tool/gen/index.vue @@ -0,0 +1,354 @@ + + + diff --git a/src/views/tool/swagger/index.vue b/src/views/tool/swagger/index.vue new file mode 100644 index 0000000..a63e381 --- /dev/null +++ b/src/views/tool/swagger/index.vue @@ -0,0 +1,15 @@ + + diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..3e83d23 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,132 @@ +'use strict' +const path = require('path') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +const CompressionPlugin = require('compression-webpack-plugin') + +const name = process.env.VUE_APP_TITLE || 'ZeroErrOA系统' // 网页标题 + +const port = process.env.port || process.env.npm_config_port || 80 // 端口 + +// vue.config.js 配置说明 +//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions +// 这里只列一部分,具体配置参考文档 +module.exports = { + // 部署生产环境和开发环境下的URL。 + // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 + // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 + publicPath: process.env.NODE_ENV === "production" ? "/" : "/", + // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) + outputDir: 'dist', + // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) + assetsDir: 'static', + // 是否开启eslint保存检测,有效值:ture | false | 'error' + lintOnSave: process.env.NODE_ENV === 'development', + // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 + productionSourceMap: false, + // webpack-dev-server 相关配置 + devServer: { + host: '0.0.0.0', + port: port, + open: true, + proxy: { + // detail: https://cli.vuejs.org/config/#devserver-proxy + [process.env.VUE_APP_BASE_API]: { + target: `http://192.168.1.148:8080`, + //target: `http://192.168.1.189:8080`, + changeOrigin: true, + pathRewrite: { + ['^' + process.env.VUE_APP_BASE_API]: '' + } + } + }, + disableHostCheck: true + }, + css: { + loaderOptions: { + sass: { + sassOptions: { outputStyle: "expanded" } + } + } + }, + configureWebpack: { + name: name, + resolve: { + alias: { + '@': resolve('src') + } + }, + plugins: [ + // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 + new CompressionPlugin({ + cache: false, // 不启用文件缓存 + test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式 + filename: '[path][base].gz[query]', // 压缩后的文件名 + algorithm: 'gzip', // 使用gzip压缩 + minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩 + deleteOriginalAssets: false // 压缩后删除原文件 + }) + ], + }, + chainWebpack(config) { + config.plugins.delete('preload') // TODO: need test + config.plugins.delete('prefetch') // TODO: need test + + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/assets/icons')) + .end() + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/assets/icons')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]' + }) + .end() + + config.when(process.env.NODE_ENV !== 'development', config => { + config + .plugin('ScriptExtHtmlWebpackPlugin') + .after('html') + .use('script-ext-html-webpack-plugin', [{ + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/ + }]) + .end() + + config.optimization.splitChunks({ + chunks: 'all', + cacheGroups: { + libs: { + name: 'chunk-libs', + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: 'initial' // only package third parties that are initially dependent + }, + elementUI: { + name: 'chunk-elementUI', // split elementUI into a single package + test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm + priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app + }, + commons: { + name: 'chunk-commons', + test: resolve('src/components'), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true + } + } + }) + config.optimization.runtimeChunk('single') + }) + } +} + \ No newline at end of file