Compare commits
322 Commits
6946744ab9
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| b022ec75b8 | |||
| 921c15ffad | |||
| 72bab28b5d | |||
| ac4ebd1d22 | |||
| b2471c3cc7 | |||
| fe7f7eafce | |||
| 731f078348 | |||
| b89584a3dc | |||
| c272ee79d8 | |||
| 27b58d20d1 | |||
| d122e52c82 | |||
| c1099ddce7 | |||
| f21da8b1e9 | |||
| 7cc0dd30f1 | |||
| 6d101a018f | |||
| 3039300518 | |||
| 049b6dcbd5 | |||
| e9d6b0245a | |||
| 97927b40eb | |||
| aeab0d83ae | |||
| d2645a9cbb | |||
| 51f5bc58c7 | |||
| a6b36241aa | |||
| 2a9bb7f2b6 | |||
| 0c20a18a9a | |||
| 04afa03d0d | |||
| d20ba860ba | |||
| 51918d25e9 | |||
| 8a75a34242 | |||
| a32af2fc37 | |||
| 4d94a3cd9d | |||
| 9f70795911 | |||
| 46dd386919 | |||
| 79f00f30d8 | |||
| 4d4076227f | |||
| 690c2aa267 | |||
| aa34361bf3 | |||
| 2190d2f2d1 | |||
| e388da627e | |||
| 897b5a39f0 | |||
| f9cf7e9f86 | |||
| bcabc2a240 | |||
| fa28351ac2 | |||
| 9b5f4d6a41 | |||
| ef4cdb26d1 | |||
| e17f0bf42a | |||
| ed45239b46 | |||
| 628ca483e7 | |||
| 6c33e68fcf | |||
| 6dccf48160 | |||
| 9423184d37 | |||
| f7bf5ee62d | |||
| 5220813624 | |||
| 083693c7e8 | |||
| e532d4d915 | |||
| 117ab924d5 | |||
| 03554cf953 | |||
| ca010277b4 | |||
| d700b504a6 | |||
| 5ff9e7a637 | |||
| b78427a7e8 | |||
| beaf4a5d66 | |||
| 2ecb66c4c9 | |||
| 7c1dfaf120 | |||
| 66a81af2a0 | |||
| d77ba7011c | |||
| daf00281cd | |||
| 8c0e193fca | |||
| 9e894305fb | |||
| d78858274b | |||
| 4119a2e4a8 | |||
| f432870d17 | |||
| 0e95d9d2b1 | |||
| dfb200f86d | |||
| 0554cb5df1 | |||
| b03c9c4efe | |||
| a32e20785f | |||
| 159ab8a4e8 | |||
| 6311f7975b | |||
| 782bc06176 | |||
| 9025bc13b8 | |||
| ed0509b1e7 | |||
| 0e1c247f0e | |||
| bdc5463b6d | |||
| d47c0ad6a8 | |||
| 0964289f2d | |||
| e86150f84d | |||
| a062c7d715 | |||
| bfd6a4c89b | |||
| 6562d0058b | |||
| 4e503ef7b2 | |||
| 5ede05913e | |||
| 46f6d912a7 | |||
| fa0a27f5ac | |||
| 7a36860021 | |||
| 29dfe67007 | |||
| 982b82e95b | |||
| 474dcab396 | |||
| 76102f032b | |||
| b8f798ee5d | |||
| 324c978584 | |||
| 422df06095 | |||
| e82060a8c8 | |||
| 2531c69d29 | |||
| dd29c5918b | |||
| 22d1852fd2 | |||
| 621579f39f | |||
| e497d8e62f | |||
| b23820e873 | |||
| 7ca532da8f | |||
| 872bc3260c | |||
| b29e7d8634 | |||
| 367a3da5cb | |||
| 555bf95abe | |||
| aa1fdf5e9e | |||
| c920577d45 | |||
| 5d13f7cd01 | |||
| 1437989d5b | |||
| 859d52bf96 | |||
| 1cd87d2695 | |||
| b126b43e2c | |||
| 7d1ab61705 | |||
| 1b5d1178f6 | |||
| 112463fcd3 | |||
| a46ffdb7db | |||
| 1595605817 | |||
| 12e384ab19 | |||
| 29b541730b | |||
| 45e4096366 | |||
| 2037ee81f1 | |||
| ecb421482d | |||
| 89a3434177 | |||
| 611c676fbe | |||
| 7b1ddeae8a | |||
| 38ef48f656 | |||
| aaa6256735 | |||
| 6ae545a06b | |||
| 74f3c04146 | |||
| 5992502f2f | |||
| b314c75574 | |||
| ddec208f0d | |||
| a061b8e64d | |||
| b8e13ce4ef | |||
| 9e3609b8ad | |||
| 93f5be29ce | |||
| b3e0f97f71 | |||
| 719f02bdad | |||
| fd9e208fa3 | |||
| 9776d76d1a | |||
| 97c9525c2d | |||
| af7ec6f43d | |||
| 1d5e31a2df | |||
| 497e040c81 | |||
| eec2f8ccef | |||
| 51efb477d8 | |||
| 6f66108a8e | |||
| 17edc7208d | |||
| e2ee494bba | |||
| e1a1083c21 | |||
| 866d3a20ac | |||
| 1405264cb2 | |||
| 09519ab4ac | |||
| 1c20bcd1ab | |||
| 6f78e86d1c | |||
| bf4b7107a4 | |||
| e95abccf5d | |||
| 73a46a2d0c | |||
| 933626f24f | |||
| 5f44984aa3 | |||
| 7505bf4b3f | |||
| 03b721d92f | |||
| 6db63cd8b1 | |||
| 78a9300644 | |||
| bf19a9daa8 | |||
| 9a7fedcd74 | |||
| f7c8bd1c95 | |||
| 02249c402e | |||
| 056d239041 | |||
| 8efbd43abd | |||
| 886176ed7e | |||
| f96d10d2e8 | |||
| 26a225298a | |||
| cf5e435992 | |||
| b35d05a9c5 | |||
| 51dc466d8e | |||
| 1216ba98c9 | |||
| ddc06b876a | |||
| 5ec5913759 | |||
| bb0d68c41d | |||
| 717bfb67c5 | |||
| daf03e1ef0 | |||
| 7d534de54f | |||
| 161b2c880f | |||
| 894e376c9e | |||
| 198ac91696 | |||
| de3f1abb09 | |||
| 2f3ad08813 | |||
| 048e97e331 | |||
| c86733c929 | |||
| a6a872b478 | |||
| 34357b1f38 | |||
| 5bd76e99d4 | |||
| 5b4c1247dd | |||
| 5f86d378ef | |||
| 60e836163e | |||
| 22514b6509 | |||
| 591e8b9ebb | |||
| e3dfc08cc7 | |||
| fcb7d0bdfe | |||
| 084d1b2915 | |||
| 29bd21094a | |||
| 253471f3f9 | |||
| 2d9cd7c2f6 | |||
| e38413cb2e | |||
| a987aa9264 | |||
| cbff94a223 | |||
| 9ae817dc41 | |||
| c620dc8b6d | |||
| 8699559436 | |||
| 619b9cca7a | |||
| cb5a896fcd | |||
| ee73380faa | |||
| c3ffccfbf3 | |||
| 9bba22a720 | |||
| d4f2f01d20 | |||
| e120f836b2 | |||
| 89399cab67 | |||
| f659913b2f | |||
| b38c1121e6 | |||
| 0f325e06b5 | |||
| f121516bd9 | |||
| 3ef6651345 | |||
| a6ed4d9989 | |||
| 4a560bd4e4 | |||
| 1aa0d15ee8 | |||
| 9df2b5a8e5 | |||
| 4ba0803622 | |||
| a4c21b83e9 | |||
| a2764fd3eb | |||
| 179901759f | |||
| 584581e720 | |||
| d9f1b5293f | |||
| b0bd66da91 | |||
| ac3b9cd740 | |||
| 1d09c88bec | |||
| 39032ebe63 | |||
| c1de614cb2 | |||
| ad369e7789 | |||
| f80a58fa75 | |||
| 913e5e5dfd | |||
| a2c9c14092 | |||
| 636a3a7c47 | |||
| 9232a9f10f | |||
| fac41d4711 | |||
| d83732f07c | |||
| c8a05e3001 | |||
| 9e9733cf52 | |||
| f22dd4f0ce | |||
| 210196437e | |||
| 989f8de19a | |||
| cb12f1db70 | |||
| 0c9627617c | |||
| beaa59c1d3 | |||
| 8bf2792fd7 | |||
| 3bb50077db | |||
| b932a7dba8 | |||
| 3d4a42b9fb | |||
| 61e8d45212 | |||
| 0b0655174a | |||
| 50ac577297 | |||
| 20bead7ddf | |||
| 9aee2b4cde | |||
| 765ab7bc8d | |||
| db46521c8b | |||
| d709183561 | |||
| 6101d94d82 | |||
| d5af1602f9 | |||
| 8bdce0adbf | |||
| e8a4b53a0e | |||
| 97bb899093 | |||
| e00cc59eed | |||
| 0aa812c283 | |||
| ce4000f477 | |||
| 4c3eeea256 | |||
| 8b6967bf32 | |||
| 9aa3faf452 | |||
| bb0e0b5dc9 | |||
| f3a999c6aa | |||
| 1e691f9697 | |||
| bed3ab5ed8 | |||
| 07dea1bf0c | |||
| da663fb635 | |||
| 9c84af78f2 | |||
| 81d4038302 | |||
| 1af2677c05 | |||
| cca2e620b5 | |||
| e0ce344d09 | |||
| 85d4289ba7 | |||
| 4e55105c9e | |||
| 36698468f4 | |||
| 7084b3ee6a | |||
| b20abce3d4 | |||
| fe0eb8eca2 | |||
| 74c69956f9 | |||
| 5ccb68a98b | |||
| 1a944c2ba6 | |||
| dc8f1be4c3 | |||
| bc2959b93c | |||
| 72e2539134 | |||
| 16dc95de06 | |||
| 20a0ebfbef | |||
| 1b015be9bf | |||
| 29a2e60ee1 | |||
| e99b05acc2 | |||
| ac4e02e8c5 | |||
| 1b043fa2d6 | |||
| 2c146c026a | |||
| 47f9491941 | |||
| eac1112f9b | |||
| 9dda17ccb8 | |||
| 52702f0b35 | |||
| 0cc8ef0fc3 |
@@ -5,7 +5,117 @@
|
||||
"mcp__zai-mcp-server__extract_text_from_screenshot",
|
||||
"Bash(pandoc:*)",
|
||||
"mcp__zread__read_file",
|
||||
"mcp__zread__search_doc"
|
||||
"mcp__zread__search_doc",
|
||||
"Bash(cmd:*)",
|
||||
"Bash(curl:*)",
|
||||
"Bash(mvn clean install:*)",
|
||||
"Bash(powershell:*)",
|
||||
"Skill(document-skills:mcp-builder)",
|
||||
"Bash(ping:*)",
|
||||
"Bash(git commit:*)",
|
||||
"Bash(taskkill:*)",
|
||||
"Bash(cd:*)",
|
||||
"mcp__database-server__read_query",
|
||||
"mcp__database-server__list_tables",
|
||||
"mcp__database-server__describe_table",
|
||||
"mcp__database-server__list_insights",
|
||||
"mcp__database-server__alter_table",
|
||||
"mcp__database-server__write_query",
|
||||
"Bash(mvn dependency:tree:*)",
|
||||
"Bash(javac:*)",
|
||||
"Bash(unzip:*)",
|
||||
"Bash(chcp:*)",
|
||||
"Skill(superpowers:brainstorming)",
|
||||
"Bash(pip install:*)",
|
||||
"Skill(superpowers:using-superpowers)",
|
||||
"Bash(tree:*)",
|
||||
"Skill(docx)",
|
||||
"Bash(bash:*)",
|
||||
"mcp__zai-mcp-server__analyze_image",
|
||||
"Skill(frontend-design:frontend-design)",
|
||||
"mcp__web-reader__webReader",
|
||||
"mcp__fetch__imageFetch",
|
||||
"Skill(frontend-design)",
|
||||
"Bash(find:*)",
|
||||
"Bash(mvn clean:*)",
|
||||
"Bash(mvn install:*)",
|
||||
"Bash(git mv:*)",
|
||||
"Bash(powershell.exe:*)",
|
||||
"Bash(git rm:*)",
|
||||
"Bash(git add:*)",
|
||||
"Skill(document-skills:frontend-design)",
|
||||
"Bash(test:*)",
|
||||
"mcp__chrome-devtools__list_pages",
|
||||
"mcp__chrome-devtools__navigate_page",
|
||||
"mcp__chrome-devtools__take_snapshot",
|
||||
"mcp__chrome-devtools__take_screenshot",
|
||||
"mcp__zai-mcp-server__ui_to_artifact",
|
||||
"mcp__chrome-devtools__click",
|
||||
"Skill(backend-restart)",
|
||||
"Bash(tasklist:*)",
|
||||
"Bash(wmic:*)",
|
||||
"Bash(mvn spring-boot:run:*)",
|
||||
"Bash(timeout:*)",
|
||||
"mcp__chrome-devtools__wait_for",
|
||||
"Bash(start cmd /k \"mvn spring-boot:run -pl ruoyi-admin\")",
|
||||
"mcp__mysql__list_tables",
|
||||
"mcp__mysql__describe_table",
|
||||
"mcp__mysql__query",
|
||||
"Bash(grep:*)",
|
||||
"mcp__mysql__connect_db",
|
||||
"Skill(superpowers:writing-plans)",
|
||||
"Skill(superpowers:subagent-driven-development)",
|
||||
"Bash(chmod:*)",
|
||||
"Bash(ls:*)",
|
||||
"Bash(test_report.sh \")",
|
||||
"mcp__mysql__show_statement",
|
||||
"Bash(if not exist \"doc\\\\designs\" mkdir docdesigns)",
|
||||
"Bash(if [ ! -d \"D:\\\\ccdi\\\\ccdi\\\\ruoyi-ccdi\\\\src\\\\main\\\\java\\\\com\\\\ruoyi\\\\ccdi\\\\domain\\\\dto\" ])",
|
||||
"Bash(then mkdir -p \"D:\\\\ccdi\\\\ccdi\\\\ruoyi-ccdi\\\\src\\\\main\\\\java\\\\com\\\\ruoyi\\\\ccdi\\\\domain\\\\dto\")",
|
||||
"Bash(fi)",
|
||||
"Bash(cat:*)",
|
||||
"Skill(superpowers:executing-plans)",
|
||||
"Skill(superpowers:finishing-a-development-branch)",
|
||||
"Skill(superpowers:systematic-debugging)",
|
||||
"mcp__mysql__execute",
|
||||
"Skill(document-skills:xlsx)",
|
||||
"Bash(git reset:*)",
|
||||
"Skill(xlsx)",
|
||||
"mcp__chrome-devtools__evaluate_script",
|
||||
"Skill(superpowers:using-git-worktrees)",
|
||||
"Bash(git -C D:ccdiccdi show 97bb899 --stat)",
|
||||
"Bash(git show:*)",
|
||||
"Bash(git rebase:*)",
|
||||
"Bash(git stash:*)",
|
||||
"Bash(git checkout:*)",
|
||||
"Bash(git check-ignore:*)",
|
||||
"Bash(git worktree add:*)",
|
||||
"Bash(xmllint:*)",
|
||||
"Bash(git worktree remove:*)",
|
||||
"Bash(git branch:*)",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" status)",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" log --oneline -10)",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" ls -la doc/)",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" status --short)",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" add \"doc/plans/2025-02-08-intermediary-import-history-cleanup.md\" \"doc/reports/2026-02-08-intermediary-import-history-cleanup-completion.md\")",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" commit -m \"$\\(cat <<''EOF''\ndocs: 添加中介导入历史清除功能完成报告\n\n- 添加功能设计文档\n- 添加功能完成总结报告\n- 包含代码审查结果和后续优化建议\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||
"Bash(git -C \"D:\\\\ccdi\\\\ccdi\" log --oneline -5)",
|
||||
"Bash([:*)",
|
||||
"Bash([ -d modules ])",
|
||||
"Bash([ -d test-data ])",
|
||||
"Skill(generate-test-data)",
|
||||
"Bash(python3:*)",
|
||||
"Skill(mcp-mysql-correct-db)",
|
||||
"Bash(git diff:*)",
|
||||
"Bash(git pull:*)",
|
||||
"Bash(git merge:*)",
|
||||
"mcp__chrome-devtools-mcp__take_snapshot",
|
||||
"mcp__chrome-devtools-mcp__fill",
|
||||
"mcp__chrome-devtools-mcp__click",
|
||||
"mcp__chrome-devtools-mcp__take_screenshot"
|
||||
]
|
||||
}
|
||||
},
|
||||
"enabledMcpjsonServers": [
|
||||
"mysql"
|
||||
]
|
||||
}
|
||||
|
||||
15
.gitignore
vendored
15
.gitignore
vendored
@@ -18,6 +18,7 @@ target/
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.claude
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
@@ -41,7 +42,21 @@ nbdist/
|
||||
*.log
|
||||
*.xml.versionsBackup
|
||||
*.swp
|
||||
nul
|
||||
|
||||
# Git Worktrees
|
||||
.worktrees/
|
||||
|
||||
test/
|
||||
|
||||
!*/build/*.java
|
||||
!*/build/*.html
|
||||
!*/build/*.xml
|
||||
|
||||
######################################################################
|
||||
# Excel Temporary Files
|
||||
doc/test-data/**/~$*
|
||||
|
||||
######################################################################
|
||||
# Database Configuration
|
||||
db_config.conf
|
||||
|
||||
18
.mcp.json
Normal file
18
.mcp.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"mysql": {
|
||||
"args": [
|
||||
"-y",
|
||||
"@fhuang/mcp-mysql-server"
|
||||
],
|
||||
"command": "npx",
|
||||
"env": {
|
||||
"MYSQL_DATABASE": "ccdi",
|
||||
"MYSQL_HOST": "116.62.17.81",
|
||||
"MYSQL_PASSWORD": "Kfcx@1234",
|
||||
"MYSQL_PORT": "3306",
|
||||
"MYSQL_USER": "root"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
665
CLAUDE.md
665
CLAUDE.md
@@ -2,276 +2,527 @@
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
## 快速参考
|
||||
|
||||
This is a **discipline preliminary check system** built on the **RuoYi (若依) v3.9.1** rapid development framework. It is an enterprise-grade management system using a front-end/back-end separated architecture.
|
||||
**启动项目:**
|
||||
- 后端: `mvn spring-boot:run` 或运行 `ry.bat`
|
||||
- 前端: `cd ruoyi-ui && npm run dev`
|
||||
|
||||
### Technology Stack
|
||||
**访问地址:**
|
||||
- 前端: http://localhost:80
|
||||
- 后端: http://localhost:8080
|
||||
- Swagger: http://localhost:8080/swagger-ui/index.html
|
||||
- Druid 监控: http://localhost:8080/druid/ (ruoyi/123456)
|
||||
|
||||
**Backend:**
|
||||
- Spring Boot 3.5.8
|
||||
- Spring Security + JWT (authentication)
|
||||
- MyBatis 3.0.5 (ORM)
|
||||
- MySQL 8.2.0
|
||||
- Redis (caching)
|
||||
- Quartz 2.5.2 (scheduled tasks)
|
||||
- SpringDoc 2.8.14 (API documentation)
|
||||
- Java 17
|
||||
|
||||
**Frontend:**
|
||||
- Vue 2.6.12
|
||||
- Element UI 2.15.14
|
||||
- Vuex 3.6.0 (state management)
|
||||
- Vue Router 3.4.9
|
||||
- Axios 0.28.1
|
||||
|
||||
## Common Commands
|
||||
|
||||
### Backend (Maven)
|
||||
**测试账号:**
|
||||
- 用户名: `admin`
|
||||
- 密码: `admin123`
|
||||
|
||||
**获取 Token:**
|
||||
```bash
|
||||
# Compile the project
|
||||
mvn clean compile
|
||||
|
||||
# Run the application (development)
|
||||
mvn spring-boot:run
|
||||
|
||||
# Package for deployment
|
||||
mvn clean package
|
||||
|
||||
# Run using startup scripts
|
||||
./ry.bat # Windows
|
||||
./ry.sh start # Linux/Mac
|
||||
POST http://localhost:8080/login/test?username=admin&password=admin123
|
||||
```
|
||||
|
||||
### Frontend (npm)
|
||||
---
|
||||
|
||||
## 项目概述
|
||||
|
||||
**纪检初核系统** - 基于 **若依管理系统 v3.9.1** 构建的企业级前后端分离管理系统,用于员工异常行为风险识别。
|
||||
|
||||
### 技术栈版本
|
||||
|
||||
| 后端技术 | 版本 | 前端技术 | 版本 |
|
||||
|-----------------------------|--------|------------|---------|
|
||||
| Spring Boot | 3.5.8 | Vue.js | 2.6.12 |
|
||||
| Java | 17 | Element UI | 2.15.14 |
|
||||
| MyBatis Spring Boot Starter | 3.0.5 | Vuex | 3.6.0 |
|
||||
| MySQL Connector | 8.2.0 | Vue Router | 3.4.9 |
|
||||
| SpringDoc OpenAPI | 2.8.14 | Axios | 0.28.1 |
|
||||
| EasyExcel | 3.3.4 | ECharts | 5.4.0 |
|
||||
| Quartz | 2.5.2 | Sass | 1.32.13 |
|
||||
|
||||
---
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 后端 (Maven)
|
||||
|
||||
```bash
|
||||
# 编译项目
|
||||
mvn clean compile
|
||||
|
||||
# 运行应用 (开发环境)
|
||||
mvn spring-boot:run
|
||||
|
||||
# 打包部署
|
||||
mvn clean package
|
||||
|
||||
# Windows 启动
|
||||
ry.bat
|
||||
|
||||
# Linux/Mac 启动
|
||||
./ry.sh start
|
||||
```
|
||||
|
||||
### 前端 (npm)
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
# 安装依赖 (推荐使用国内镜像)
|
||||
npm install --registry=https://registry.npmmirror.com
|
||||
|
||||
# Development server (runs on port 80 by default)
|
||||
# 开发服务器 (端口 80)
|
||||
npm run dev
|
||||
|
||||
# Production build
|
||||
# 生产构建
|
||||
npm run build:prod
|
||||
|
||||
# Staging build
|
||||
npm run build:stage
|
||||
|
||||
# Preview production build
|
||||
# 预览生产构建
|
||||
npm run preview
|
||||
```
|
||||
|
||||
### Database Initialization
|
||||
### 数据库初始化
|
||||
|
||||
```bash
|
||||
# Main database schema
|
||||
# 初始化若依框架基础表
|
||||
mysql -u root -p < sql/ry_20250522.sql
|
||||
|
||||
# Quartz scheduler tables
|
||||
# 初始化定时任务表
|
||||
mysql -u root -p < sql/quartz.sql
|
||||
|
||||
# 导入业务表(根据需要执行)
|
||||
mysql -u root -p ccdi < sql/dpc_employee.sql
|
||||
mysql -u root -p ccdi < sql/dpc_intermediary_blacklist.sql
|
||||
# ... 其他业务表脚本
|
||||
```
|
||||
|
||||
## Project Architecture
|
||||
**注意:**
|
||||
- 业务表脚本文件名以 `ccdi_` 或 `dpc_` 开头
|
||||
- 部分脚本包含菜单数据,需要按顺序执行
|
||||
- 数据库需要先创建(数据库名: `ccdi`)
|
||||
|
||||
### Module Structure
|
||||
---
|
||||
|
||||
## 模块架构
|
||||
|
||||
```
|
||||
discipline-prelim-check/
|
||||
├── ruoyi-admin/ # Main application entry point
|
||||
├── ruoyi-framework/ # Core framework (Security, config, filters)
|
||||
├── ruoyi-system/ # System management (Users, Roles, Menus, Depts)
|
||||
├── ruoyi-common/ # Common utilities (annotations, utils, constants)
|
||||
├── ruoyi-quartz/ # Scheduled task management
|
||||
├── ruoyi-generator/ # Code generator (CRUD scaffolding)
|
||||
├── ruoyi-ui/ # Frontend Vue application
|
||||
├── sql/ # Database scripts
|
||||
├── bin/ # Startup scripts
|
||||
└── openspec/ # OpenSpec specification workflow
|
||||
ccdi/
|
||||
├── ruoyi-admin/ # 主应用入口 (Spring Boot 启动类)
|
||||
├── ruoyi-framework/ # 核心框架 (Security, Config, Filters)
|
||||
├── ruoyi-system/ # 系统管理 (Users, Roles, Menus, Depts)
|
||||
├── ruoyi-common/ # 通用工具 (annotations, utils, constants)
|
||||
├── ruoyi-quartz/ # 定时任务
|
||||
├── ruoyi-generator/ # 代码生成器
|
||||
├── ruoyi-info-collection/ # 【核心业务模块】信息采集
|
||||
├── ruoyi-ui/ # 前端 Vue 应用
|
||||
├── sql/ # 数据库脚本
|
||||
├── bin/ # 启动脚本
|
||||
└── doc/ # 项目文档
|
||||
```
|
||||
|
||||
### Backend Architecture: MVC + Modular Design
|
||||
|
||||
The backend follows a standard MVC pattern with modular separation:
|
||||
### 模块依赖关系
|
||||
|
||||
```
|
||||
Controller Layer (ruoyi-admin/web/controller/)
|
||||
├── common/ # Common controllers (captcha, file upload)
|
||||
├── monitor/ # Monitoring controllers (cache, server, logs)
|
||||
├── system/ # System management (users, roles, menus)
|
||||
└── tool/ # Tools (code generator, swagger)
|
||||
|
||||
Service Layer (ruoyi-system/service/)
|
||||
├── ISysUserService.java
|
||||
├── ISysRoleService.java
|
||||
└── ...
|
||||
|
||||
Mapper Layer (ruoyi-system/mapper/)
|
||||
├── SysUserMapper.java
|
||||
├── SysRoleMapper.java
|
||||
└── ...
|
||||
|
||||
Domain Layer (ruoyi-system/domain/)
|
||||
├── SysUser.java # Entity
|
||||
├── vo/ # Value objects
|
||||
└── ...
|
||||
ruoyi-admin (启动模块)
|
||||
├── ruoyi-framework (核心安全配置)
|
||||
├── ruoyi-system (系统核心业务)
|
||||
├── ruoyi-common (共享工具)
|
||||
├── ruoyi-quartz (定时任务)
|
||||
├── ruoyi-generator (代码生成)
|
||||
└── ruoyi-info-collection (信息采集模块)
|
||||
└── 依赖 ruoyi-common
|
||||
```
|
||||
|
||||
### Frontend Architecture: Vue SPA
|
||||
**添加新业务模块:**
|
||||
1. 在根目录 `pom.xml` 的 `<modules>` 中添加新模块
|
||||
2. 在新模块的 `pom.xml` 中添加对 `ruoyi-common` 的依赖
|
||||
3. 在 `ruoyi-admin/pom.xml` 中添加对新模块的依赖
|
||||
4. 在新模块中按照分层规范创建 controller/service/mapper/domain 包
|
||||
|
||||
### ruoyi-info-collection 业务模块 (核心)
|
||||
|
||||
自定义业务模块,包含以下核心功能:
|
||||
|
||||
| 功能 | Controller | 实体类 |
|
||||
|----------|---------------------------------------|-----------------------------|
|
||||
| 员工基础信息 | CcdiBaseStaffController | CcdiBaseStaff |
|
||||
| 中介黑名单 | CcdiIntermediaryController | CcdiBizIntermediary |
|
||||
| 员工家庭关系 | CcdiStaffFmyRelationController | CcdiStaffFmyRelation |
|
||||
| 员工企业关系 | CcdiStaffEnterpriseRelationController | CcdiStaffEnterpriseRelation |
|
||||
| 信贷客户家庭关系 | CcdiCustFmyRelationController | CcdiCustFmyRelation |
|
||||
| 信贷客户企业关系 | CcdiCustEnterpriseRelationController | CcdiCustEnterpriseRelation |
|
||||
| 员工调动记录 | CcdiStaffTransferController | CcdiStaffTransfer |
|
||||
| 员工招聘记录 | CcdiStaffRecruitmentController | CcdiStaffRecruitment |
|
||||
| 采购交易 | CcdiPurchaseTransactionController | CcdiPurchaseTransaction |
|
||||
|
||||
**分层结构:**
|
||||
|
||||
- Controller: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/`
|
||||
- Service: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/`
|
||||
- Mapper: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/`
|
||||
- Domain: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/`
|
||||
- dto/: 数据传输对象
|
||||
- vo/: 视图对象
|
||||
- excel/: Excel导入导出实体
|
||||
- XML映射: `ruoyi-info-collection/src/main/resources/mapper/info/collection/`
|
||||
|
||||
---
|
||||
|
||||
## 后端开发规范
|
||||
|
||||
### 通用规范
|
||||
|
||||
- **新模块命名**: 项目英文名首字母集合 + 主要功能 (如 `ruoyi-info-collection`)
|
||||
- **代码分离**: 新功能代码与若依框架自带代码分离,Controller 放在新模块中
|
||||
- **审计字段**: 实体类不继承 BaseEntity,单独添加审计字段,通过注释实现自动插入
|
||||
|
||||
### Java 代码风格
|
||||
|
||||
```java
|
||||
// 使用 @Data 注解
|
||||
@Data
|
||||
public class CcdiBaseStaff {
|
||||
// 审计字段通过注释实现自动插入
|
||||
/** 创建者 */
|
||||
private String createBy;
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
/** 更新者 */
|
||||
private String updateBy;
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
}
|
||||
|
||||
// 服务层使用 @Resource 注入
|
||||
@Resource
|
||||
private ICcdiBaseStaffService baseStaffService;
|
||||
```
|
||||
|
||||
### 分层规范
|
||||
|
||||
- **Controller**: 所有接口添加 Swagger 注释,分页使用 MyBatis Plus Page
|
||||
- **Service**: 简单 CRUD 用 MyBatis Plus 方法,复杂操作在 XML 写 SQL
|
||||
- **DTO/VO**: 接口传参使用独立 DTO,返回使用独立 VO,不与 entity 混用
|
||||
- **Mapper**: 简单操作继承 BaseMapper,复杂操作在 XML 中定义
|
||||
|
||||
### 禁止事项
|
||||
|
||||
- **禁止使用全限定类名**: 必须使用 `import` 语句导入类,不要在代码中使用 `java.util.List` 这样的全限定名
|
||||
- **禁止使用 `extends ServiceImpl<>`**: Service 接口和实现类分离定义
|
||||
- **禁止 Entity 混用**: DTO、VO、Excel 类必须独立,不与 Entity 混用
|
||||
- **禁止缺少 `@Resource`**: Service 注入必须使用 `@Resource` 注解
|
||||
|
||||
### API 响应格式
|
||||
|
||||
```java
|
||||
// 成功
|
||||
AjaxResult.success("操作成功", data);
|
||||
|
||||
// 错误
|
||||
AjaxResult.error("操作失败");
|
||||
|
||||
// 分页
|
||||
Page<CcdiBaseStaff> page = new Page<>(pageNum, pageSize);
|
||||
IPage<CcdiBaseStaff> result = baseStaffMapper.selectPage(page, queryWrapper);
|
||||
return AjaxResult.success(result);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 前端开发规范
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
ruoyi-ui/src/
|
||||
├── api/ # API request definitions
|
||||
├── assets/ # Static resources (images, styles)
|
||||
├── components/ # Reusable components
|
||||
├── layout/ # Main layout (Sidebar, Navbar, TagsView)
|
||||
├── router/ # Vue Router configuration
|
||||
├── store/ # Vuex state management
|
||||
├── utils/ # Utility functions
|
||||
├── views/ # Page components organized by feature
|
||||
│ ├── dashboard/
|
||||
│ ├── monitor/
|
||||
│ ├── system/
|
||||
│ └── tool/
|
||||
└── permission.js # Permission directives
|
||||
├── api/ # API 请求定义 (与后端 Controller 对应)
|
||||
├── views/ # 页面组件 (按功能模块组织)
|
||||
│ ├── ccdiBaseStaff/
|
||||
│ ├── ccdiIntermediary/
|
||||
│ └── ...
|
||||
├── components/ # 可复用组件 (复杂组件需拆分)
|
||||
├── router/ # 路由配置
|
||||
└── store/ # Vuex 状态管理
|
||||
```
|
||||
|
||||
### Module Dependencies
|
||||
|
||||
```
|
||||
ruoyi-admin (startup module)
|
||||
↓ depends on
|
||||
ruoyi-framework (core security & config)
|
||||
ruoyi-system (system core business)
|
||||
ruoyi-common (shared utilities)
|
||||
ruoyi-quartz (scheduled tasks)
|
||||
ruoyi-generator (code generation)
|
||||
```
|
||||
|
||||
## Key Development Patterns
|
||||
|
||||
### Code Generation Workflow
|
||||
|
||||
RuoYi provides a powerful code generator for rapid CRUD development:
|
||||
|
||||
1. **Create database table** - Design your table schema
|
||||
2. **Import table** - Use System Tools → Code Generation → Import
|
||||
3. **Configure** - Edit table info, generate info (module, function name, etc.)
|
||||
4. **Generate code** - Download the generated zip
|
||||
5. **Copy files** - Extract to appropriate directories:
|
||||
- Backend: `ruoyi-admin/web/controller/`, service, mapper files
|
||||
- Frontend: `ruoyi-ui/src/views/`, `ruoyi-ui/src/api/`
|
||||
|
||||
### Permission System
|
||||
|
||||
The permission system uses **Role-Menu-Button** hierarchy:
|
||||
|
||||
- **Menus**: Define navigation items and route permissions
|
||||
- **Roles**: Assign menu permissions to roles
|
||||
- **Users**: Assign roles to users
|
||||
- **Data Permissions**: Control data scope (all, custom, department, etc.)
|
||||
|
||||
Permission keys in code use format: `system:user:edit`, `system:user:remove`, etc.
|
||||
|
||||
### API Response Format
|
||||
|
||||
All API responses use `AjaxResult` wrapper:
|
||||
|
||||
```java
|
||||
// Success
|
||||
AjaxResult.success("操作成功", data);
|
||||
|
||||
// Error
|
||||
AjaxResult.error("操作失败");
|
||||
|
||||
// Custom
|
||||
AjaxResult.put("key", value);
|
||||
```
|
||||
|
||||
### Frontend API Calls
|
||||
|
||||
API calls are defined in `ruoyi-ui/src/api/`:
|
||||
### API 调用示例
|
||||
|
||||
```javascript
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listUser(query) {
|
||||
export function listStaff(query) {
|
||||
return request({
|
||||
url: '/system/user/list',
|
||||
url: '/ccdi/baseStaff/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
export function addUser(data) {
|
||||
return request({
|
||||
url: '/system/user',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
### 菜单联动
|
||||
|
||||
添加页面和组件后,需要同步修改数据库中的菜单表 (`sys_menu`)。
|
||||
|
||||
---
|
||||
|
||||
## 特殊功能
|
||||
|
||||
### 异步导入
|
||||
|
||||
支持大数据量异步 Excel 导入,通过 taskId 查询导入状态:
|
||||
|
||||
```java
|
||||
@PostMapping("/import")
|
||||
public AjaxResult asyncImport(@RequestParam("file") MultipartFile file) {
|
||||
String taskId = asyncImportService.startImport(file);
|
||||
return AjaxResult.success("导入任务已启动", taskId);
|
||||
}
|
||||
|
||||
@GetMapping("/import/status/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
return AjaxResult.success(asyncImportService.getStatus(taskId));
|
||||
}
|
||||
```
|
||||
|
||||
## OpenSpec Workflow
|
||||
**导入流程:**
|
||||
1. 前端上传 Excel 文件
|
||||
2. 后端异步处理,返回 taskId
|
||||
3. 前端轮询 `/import/status/{taskId}` 获取导入进度
|
||||
4. 导入完成后,可获取成功/失败数据统计
|
||||
|
||||
This project uses **OpenSpec** for specification-driven development. Always reference `openspec/AGENTS.md` when:
|
||||
**导入结果处理:**
|
||||
- 只返回导入失败的数据(含失败原因)
|
||||
- 成功数据不返回,减少响应体积
|
||||
- 支持批量插入,提高性能
|
||||
|
||||
- Planning or proposing new features
|
||||
- Making breaking changes
|
||||
- Modifying architecture
|
||||
- Handling ambiguous requirements
|
||||
### EasyExcel 字典下拉框
|
||||
|
||||
### Key OpenSpec Commands
|
||||
导入模板支持字典下拉框配置,提升数据录入准确性。使用 `DictDropdownWriteHandler` 实现。
|
||||
|
||||
### 权限控制
|
||||
|
||||
基于 Spring Security + JWT 的角色菜单权限系统:
|
||||
|
||||
- 权限格式: `system:user:edit`, `ccdi:staff:list`
|
||||
- 数据权限: 支持全部、自定义、部门等范围
|
||||
|
||||
---
|
||||
|
||||
## 测试与验证
|
||||
|
||||
### 测试账号
|
||||
|
||||
- **用户名**: `admin`
|
||||
- **密码**: `admin123`
|
||||
|
||||
### 登录获取 Token
|
||||
|
||||
```bash
|
||||
# List active changes
|
||||
openspec list
|
||||
|
||||
# List all specifications
|
||||
openspec list --specs
|
||||
|
||||
# View details
|
||||
openspec show [change-id or spec-id]
|
||||
|
||||
# Validate changes
|
||||
openspec validate [change-id] --strict --no-interactive
|
||||
|
||||
# Archive completed changes
|
||||
openspec archive <change-id>
|
||||
# 登录接口
|
||||
POST /login/test?username=admin&password=admin123
|
||||
```
|
||||
|
||||
### When to Create Proposals
|
||||
### API 文档
|
||||
|
||||
**Create proposal for:**
|
||||
- New features or capabilities
|
||||
- Breaking changes (API, schema)
|
||||
- Architecture changes
|
||||
- Performance optimizations that change behavior
|
||||
- **Swagger UI**: `/swagger-ui/index.html`
|
||||
- **API Docs**: `/v3/api-docs`
|
||||
|
||||
**Skip proposal for:**
|
||||
- Bug fixes (restoring intended behavior)
|
||||
- Typos, formatting, comments
|
||||
- Non-breaking dependency updates
|
||||
- Configuration changes
|
||||
### 测试规范
|
||||
|
||||
## Configuration Notes
|
||||
- 不在命令行启动后端进行测试
|
||||
- 生成可执行的测试脚本进行验证
|
||||
- 测试完成后保存接口输出并生成测试用例报告
|
||||
|
||||
- **Default Admin**: `admin/admin123`
|
||||
- **Backend Port**: 8080
|
||||
- **Frontend Dev Port**: 80
|
||||
- **API Base Path**: Configured in `ruoyi-ui/vue.config.js` proxy
|
||||
- **Database Config**: `ruoyi-admin/src/main/resources/application.yml`
|
||||
### 开发调试技巧
|
||||
|
||||
## Important File Locations
|
||||
**使用 Swagger 测试接口:**
|
||||
1. 访问 `/swagger-ui/index.html`
|
||||
2. 点击接口展开详情
|
||||
3. 点击 "Try it out" 进行测试
|
||||
4. 填写参数后点击 "Execute" 执行
|
||||
|
||||
| Purpose | Location |
|
||||
|---------|----------|
|
||||
| Main application entry | [ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java](ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java) |
|
||||
| Security configuration | [ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java](ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java) |
|
||||
| Database config | [ruoyi-admin/src/main/resources/application.yml](ruoyi-admin/src/main/resources/application.yml) |
|
||||
| MyBatis mappers | [ruoyi-system/src/main/resources/mapper/system/](ruoyi-system/src/main/resources/mapper/system/) |
|
||||
| Vue router | [ruoyi-ui/src/router/index.js](ruoyi-ui/src/router/index.js) |
|
||||
| Vuex store | [ruoyi-ui/src/store/](ruoyi-ui/src/store/) |
|
||||
**查看 SQL 执行日志:**
|
||||
- 在 `application.yml` 中设置日志级别: `com.ruoyi: debug`
|
||||
- 使用 Druid 监控台查看慢 SQL
|
||||
|
||||
**前端代理配置:**
|
||||
前端开发服务器通过代理转发请求到后端:
|
||||
- 前端地址: `http://localhost:80`
|
||||
- 后端地址: `http://localhost:8080`
|
||||
- 代理配置文件: `ruoyi-ui/vue.config.js`
|
||||
|
||||
---
|
||||
|
||||
## 配置说明
|
||||
|
||||
| 配置项 | 值 |
|
||||
|---------|-------------------|
|
||||
| 后端端口 | 8080 |
|
||||
| 前端开发端口 | 80 |
|
||||
| 默认管理员 | admin/admin123 |
|
||||
| JWT 有效期 | 30 分钟 |
|
||||
| 文件上传限制 | 单文件 10MB, 总计 20MB |
|
||||
|
||||
### 配置文件位置
|
||||
|
||||
| 配置 | 路径 |
|
||||
|----------|------------------------------------------------------|
|
||||
| 主配置 | `ruoyi-admin/src/main/resources/application.yml` |
|
||||
| 开发环境 | `ruoyi-admin/src/main/resources/application-dev.yml` |
|
||||
| 数据库连接 | `application-dev.yml` |
|
||||
| Redis 配置 | `application-dev.yml` |
|
||||
|
||||
### 数据源配置
|
||||
|
||||
项目使用 Druid 连接池,支持主从分离(默认关闭从库):
|
||||
|
||||
- **数据库连接**: `jdbc:mysql://host:3306/ccdi`
|
||||
- **初始连接数**: 5
|
||||
- **最小连接数**: 10
|
||||
- **最大连接数**: 20
|
||||
- **慢 SQL 记录**: 超过 1000ms 的 SQL 会被记录
|
||||
|
||||
### Redis 配置
|
||||
|
||||
- **默认端口**: 6379
|
||||
- **数据库索引**: 0
|
||||
- **连接超时**: 10s
|
||||
|
||||
### Druid 监控台
|
||||
|
||||
访问地址: `http://localhost:8080/druid/`
|
||||
- 用户名: `ruoyi`
|
||||
- 密码: `123456`
|
||||
|
||||
用于监控 SQL 执行情况、连接池状态等。
|
||||
|
||||
---
|
||||
|
||||
## 重要文件路径
|
||||
|
||||
| 用途 | 路径 |
|
||||
|---------------|--------------------------------------------------------------------------------|
|
||||
| 应用入口 | `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java` |
|
||||
| 安全配置 | `ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java` |
|
||||
| 业务 Controller | `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/` |
|
||||
| 业务 Mapper XML | `ruoyi-info-collection/src/main/resources/mapper/info/collection/` |
|
||||
| Vue 路由 | `ruoyi-ui/src/router/index.js` |
|
||||
| Vuex Store | `ruoyi-ui/src/store/` |
|
||||
| 前端 API | `ruoyi-ui/src/api/` |
|
||||
|
||||
---
|
||||
|
||||
## 数据库规范
|
||||
|
||||
- **新建表名**: 需要加上项目英文名首字母集合前缀 `ccdi_` (如 `ccdi_base_staff`)
|
||||
|
||||
---
|
||||
|
||||
## 文档管理
|
||||
|
||||
- **文档语言**: 使用简体中文编写 .md 文档
|
||||
- **文档目录**: 所有生成的文档放在 `doc/` 目录下,按类型分类
|
||||
- **需求分析**: 在 `doc/` 目录下新建文件夹,以需求内容命名
|
||||
|
||||
### doc 目录结构
|
||||
|
||||
```
|
||||
doc/
|
||||
├── api-docs/ # API 文档
|
||||
├── database/ # 数据库相关
|
||||
├── design/ # 设计文档
|
||||
├── implementation/ # 实施文档
|
||||
├── requirements/ # 需求文档
|
||||
└── test-scripts/ # 测试脚本
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## OpenSpec 工作流
|
||||
|
||||
项目使用 OpenSpec 进行规范驱动开发,参考 `openspec/AGENTS.md`。
|
||||
|
||||
### 何时创建 Proposal
|
||||
|
||||
**需要创建:**
|
||||
|
||||
- 新功能或能力
|
||||
- 破坏性变更 (API, 数据库结构)
|
||||
- 架构变更
|
||||
- 改变行为的性能优化
|
||||
|
||||
**无需创建:**
|
||||
|
||||
- Bug 修复 (恢复预期行为)
|
||||
- 拼写错误、格式、注释
|
||||
- 非破坏性依赖更新
|
||||
- 配置变更
|
||||
|
||||
---
|
||||
|
||||
## 沟通规范
|
||||
|
||||
- 永远使用简体中文进行思考和对话
|
||||
|
||||
---
|
||||
|
||||
## 常见问题排查
|
||||
|
||||
### 数据库连接失败
|
||||
|
||||
**检查项:**
|
||||
1. 确认 MySQL 服务已启动
|
||||
2. 检查 `application-dev.yml` 中的数据库连接配置
|
||||
3. 确认数据库用户名和密码正确
|
||||
4. 检查数据库是否已创建(数据库名: `ccdi`)
|
||||
|
||||
### Redis 连接失败
|
||||
|
||||
**检查项:**
|
||||
1. 确认 Redis 服务已启动
|
||||
2. 检查 `application-dev.yml` 中的 Redis 配置
|
||||
3. 如果 Redis 不需要密码,将 `password` 配置注释掉
|
||||
|
||||
### 前端无法访问后端接口
|
||||
|
||||
**检查项:**
|
||||
1. 确认后端已启动(端口 8080)
|
||||
2. 检查前端代理配置(`ruoyi-ui/vue.config.js`)
|
||||
3. 确认后端接口路径正确(查看 Controller 的 `@RequestMapping`)
|
||||
|
||||
### 导入功能无响应
|
||||
|
||||
**检查项:**
|
||||
1. 检查文件大小是否超过限制(默认 10MB)
|
||||
2. 查看后端日志是否有异常
|
||||
3. 确认 Excel 模板格式正确
|
||||
4. 检查必填字段是否为空
|
||||
|
||||
---
|
||||
|
||||
## MyBatis Plus 分页使用
|
||||
|
||||
```java
|
||||
// Controller 层
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(QueryDTO queryDTO) {
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<VO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<VO> result = service.selectPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
// Service 层
|
||||
Page<VO> selectPage(Page<VO> page, QueryDTO queryDTO);
|
||||
|
||||
// Mapper 层 (使用 XML)
|
||||
<select id="selectPage" resultType="VO">
|
||||
SELECT * FROM table_name
|
||||
<where>
|
||||
<if test="queryDTO.name != null">
|
||||
AND name LIKE CONCAT('%', #{queryDTO.name}, '%')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
```
|
||||
|
||||
451
README.md
451
README.md
@@ -1,95 +1,382 @@
|
||||
<p align="center">
|
||||
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
|
||||
</p>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.9.1</h1>
|
||||
<h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4>
|
||||
<p align="center">
|
||||
<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
|
||||
<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.9.1-brightgreen.svg"></a>
|
||||
<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
|
||||
</p>
|
||||
# 纪检初核系统功能说明书
|
||||
|
||||
## 平台简介
|
||||
文档版本:V1.0
|
||||
|
||||
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
|
||||
最后更新日期:2026年1月16日
|
||||
|
||||
* 前端采用Vue、Element UI。
|
||||
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
|
||||
* 权限认证使用Jwt,支持多终端认证系统。
|
||||
* 支持加载动态权限菜单,多方式轻松权限控制。
|
||||
* 高效率开发,使用代码生成器可以一键生成前后端代码。
|
||||
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
|
||||
* 提供了单应用版本[RuoYi-Vue-fast](https://gitcode.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
|
||||
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
|
||||
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)
|
||||
编写目的:本文档旨在全面排查员工异常行为初核系统的核心功能模块、操作流程及业务价值,为系统开发、测试及用户操作提供明确依据。系统旨在通过自动化数据分析与风险模型,高效识别员工潜在风险行为。
|
||||
|
||||
## 内置功能
|
||||
# 一.项目管理模块
|
||||
|
||||
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
|
||||
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
|
||||
3. 岗位管理:配置系统用户所属担任职务。
|
||||
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
|
||||
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
|
||||
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
|
||||
7. 参数管理:对系统动态配置常用参数。
|
||||
8. 通知公告:系统通知公告信息发布维护。
|
||||
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
|
||||
10. 登录日志:系统登录日志记录查询包含登录异常。
|
||||
11. 在线用户:当前系统中活跃用户状态监控。
|
||||
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
|
||||
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
|
||||
14. 系统接口:根据业务代码自动生成相关的api接口文档。
|
||||
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
|
||||
16. 缓存监控:对系统的缓存信息查询,命令统计等。
|
||||
17. 在线构建器:拖动表单元素生成相应的HTML代码。
|
||||
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
|
||||
本模块为系统首页,用于管理所有历史创建的核查项目。页面主要分为导航与搜索区、项目列表区和快捷入口区三大部分。
|
||||
|
||||
## 在线体验
|
||||
# 1、原型图
|
||||
|
||||
- admin/admin123
|
||||
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
|
||||
(1) 首页
|
||||
|
||||
演示地址:http://vue.ruoyi.vip
|
||||
文档地址:http://doc.ruoyi.vip
|
||||
(2) 新建项目 弹窗页入口
|
||||
|
||||
## 演示图
|
||||
(3) 导入历史项目 弹窗页入口
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
# 2、导航与搜索区
|
||||
|
||||
项目搜索:支持通过输入关键词,对项目名称进行模糊搜索。
|
||||
|
||||
新建项目:点击打开一个标准表单,填写项目名称、人员等完整信息,自定义创建新项目。
|
||||
|
||||
# 3、项目列表区
|
||||
|
||||
本区域以表格形式清晰展示所有初核项目,是用户进行项目管理和监控的核心面板。
|
||||
|
||||
# (1) 列表信息列:
|
||||
|
||||
项目名称:显示项目名称及下方的简要描述。
|
||||
|
||||
创建时间:显示项目的创建日期。
|
||||
|
||||
状态:通过色块直观标识项目状态。包括"进行中"、"已完成"等。
|
||||
|
||||
目标人数:计划核查的员工总数。
|
||||
|
||||
预警人数:当前已被风险模型标记为存在异常行为提示的员工数量。对于"进行中"项目,此数据动态更新。
|
||||
|
||||
# (2)操作列:
|
||||
|
||||
查看结果(适用于已完成项目):跳转至该项目的初核结果页。
|
||||
|
||||
重新分析(适用于已完成项目): 基于原有数据, 重新运行风险模型, 更新分析结果。
|
||||
|
||||
归档:将已结束且无需日常关注的项目移入归档库,项目结束后可以统一归档,并将相关的数据、分析过程,图谱、流水等生成PDF文件导出。
|
||||
|
||||
进入项目(适用于进行中项目):进入该项目的工作台,开展数据管理、风险初核、专项排查等具体工作。
|
||||
|
||||
# 4、快捷入口区
|
||||
|
||||
本区域提供一键触达的高频操作按钮,提升常用工作流的启动效率。举例:
|
||||
|
||||
(1) 导入历史项目:复制一个历史项目的配置(如人员范围、流水、征信数据配置),快速创建新项目,实现项目模板复用:包括目标人群的流水、征信等信息
|
||||
|
||||
(2) 创建当季的季度初核:快速启动一个标准化的季度周期性排查项目,系统可预填当前季度时间范围等配置。
|
||||
|
||||
(3) 创建新员工排查:为特定新员工创建专项排查任务。
|
||||
|
||||
# 二.项目工作台
|
||||
|
||||
用户从项目列表点击"进入项目"后,将进入具体项目的操作空间,涵盖从数据准备到风险识别的全流程。并且通过侧边导航栏可以实现:
|
||||
|
||||
返回项目列表:返回当前项目的上一层列表页。
|
||||
|
||||
项目状态:明确标识当前项目阶段为"已完成",提示用户核心分析已结束,当前可能在进行数据补充或复查。
|
||||
|
||||
最后更新:显示数据或项目状态的最后变更时间(`2024-01-20 15:30`),用于判断信息的时效性。
|
||||
|
||||
# 第一部分数据管理
|
||||
|
||||
本页面是进入具体项目后的核心工作台之一,将来自行内流水、征信数据、人工上传不同来源和格式的数据,在一个界面内完成统一接入;并且自动化检查识别数据问题,保证后续风险识别的准确性。
|
||||
|
||||
# 1、数据导入
|
||||
|
||||
# (1)拉取本行信息:
|
||||
|
||||
功能:点击后需要输入证件号码或者导入文件(上传身份证号表格),自动拉取行内流水、资产等数据信息
|
||||
|
||||
# (2) 他行流水导入:
|
||||
|
||||
功能:批量上传员工的他行银行、或者支付宝微信等交易流水文件。支持Excel、文本型PDF。系统自动解析文件内容,提取交易金额、对手方、交易时间、余额、摘要等关键字段。
|
||||
|
||||
# (3)征信信息导入:
|
||||
|
||||
功能:上传个人信用报告。支持HTML格式的网页文件。系统自动解析报告,提取信贷账户、负债总额、担保信息、查询记录等核心数据。
|
||||
|
||||
# (4) 员工家庭关系导入:
|
||||
|
||||
功能:上传员工的家庭成员信息,用于构建关系人图谱和关联分析。
|
||||
|
||||
(5) 名单库选择: 从信息维护——中介库管理内的名单选择确认后的可疑名单
|
||||
|
||||
(6) 生成报告:生成初核结果,跳转结果页
|
||||
|
||||
# 2、数据质量检查
|
||||
|
||||
功能:在数据导入后,系统自动执行一套预定义的质量规则,对数据集进行检查。
|
||||
|
||||
检查结果详情:以列表形式直观展示发现的具体问题,例如:
|
||||
|
||||
发现23条数据格式不一致:如日期格式不统一、金额单位混杂。
|
||||
|
||||
发现5条余額链条性异常:指相邻交易记录间的余额计算逻辑断裂,可能意味着数据缺失或被篡改。
|
||||
|
||||
发现12条缺失关键字段:如交易记录缺少对手方账号或户名。
|
||||
|
||||
质量评分仪表盘:通过三个关键指标量化数据质量:
|
||||
|
||||
数据完整性 $(98.5\%)$ :衡量必填字段的填充率。
|
||||
|
||||
格式一致性 $(95.2\%)$ :衡量数据遵循预定格式规范的程度。
|
||||
|
||||
余额连续性 (92.8%): 衡量流水数据中余额连续、计算正确的程度。
|
||||
|
||||
# 第二部分 初核结果总览
|
||||
|
||||
本页面为创建的项目中上传的数据经过模型识别出的风险信息总览及明细。
|
||||
|
||||
# 1、风险总览
|
||||
|
||||
# (1) 风险全局仪表盘
|
||||
|
||||
功能:以数据卡片形式集中展示项目整体风险态势。
|
||||
|
||||
总人数:项目覆盖的员工总数(如:500人)。
|
||||
|
||||
无预警人数(如:432人)
|
||||
|
||||
低风险人数(如:38人)
|
||||
|
||||
中风险人数(如:20人)
|
||||
|
||||
高风险人数(如:10人)
|
||||
|
||||
# (2) 高风险/中风险人员名单
|
||||
|
||||
按风险评分降序排列,以列表形式展示所有高风险人员清单,以及中风险人员中评分最高的10名员工。信息包括:姓名、身份证号、部门、风险评分、触发模型数、核心异常点(系统自动提炼的最显著风险)。
|
||||
|
||||
# (3) 查看单个风险人员详情
|
||||
|
||||
点击每个风险人员的【查看详情】入口,可钻取至单个员工的全面风险报告。包括其所有异常行为列表、每个行为对应的模型判断依据(规则),以及资产分析、征信概览、关系人图谱等模块。并且针对可疑交易及可疑对象,可以手动添加至关注方。
|
||||
|
||||
风险总览:
|
||||
|
||||
批量生成报告
|
||||
|
||||
批量导出证据
|
||||
|
||||
批量添加到关注列表
|
||||
|
||||
单个人员详情中的异常明细页面:
|
||||
|
||||
添加到案例库
|
||||
|
||||
单个人员详情中的资产分析页面:
|
||||
|
||||
单个人员详情中的征信摘要页面:
|
||||
|
||||
3笔 $>50$ 万
|
||||
|
||||
# 2、风险模型
|
||||
|
||||
# (1) 模型触发情况总计
|
||||
|
||||
内容:以表格形式展示所有风险模型的整体触发情况。包括:模型名称、触发总人数、主要触发人员示例。
|
||||
|
||||
操作:点击任一模型的"查看详情",可跳转至触发该模型的全体人员列表(即"单模型触发列表")。
|
||||
|
||||
# (2)各模型触发人员列表
|
||||
|
||||
内容:通过下拉菜单选择触发某一特定风险模型(如"大额交易")、或者同时触发多个(如2个以上)风险模型的高风险人员、或者通过"搜索人员姓名或工号..."进行精确查询,并支持将常用的筛选组合保存为固定策略,便于下次一键调用。
|
||||
|
||||
操作:通过查询可以得到该模型的所有触发人员,并且点击【查看详情】可查看该员工详细的风险情况。
|
||||
|
||||
模型触发情况、单模型/多模型筛选触发现图:
|
||||
|
||||
# 3、风险明细
|
||||
|
||||
# (1) 涉疑交易明细表
|
||||
|
||||
功能:展示涉及可疑交易的记录,支持按「全部可疑人员类型」「名单库命中」「模型规则命中」等维度筛选数据,且支持穿透式查看交易流水,用于定位异常资金往来。
|
||||
|
||||
内容:包括交易时间、可疑人员、关联人、关联员工(姓名+柜员号),关系(是否是员工本人、或者配偶等关系)、摘要、交易类型、交易金额等字段。
|
||||
|
||||
操作:点击「查看详情」,将跳转至可疑流水详情页,展示该条流水的交易对手、交易类型、交易时间等完整信息。
|
||||
|
||||
明细表列表内容:
|
||||
|
||||
|
||||
## 若依前后端分离交流群
|
||||
涉疑交易明细表
|
||||
|
||||
|
||||
全部可疑人员类型
|
||||
|
||||
↓导出
|
||||
|
||||
<table><tr><td>序号</td><td>交易时间</td><td>可疑人员</td><td>关联人</td><td>关联员工</td><td>关系</td><td>摘要/交易类型</td><td>交易金额</td><td>操作</td></tr><tr><td>1</td><td>2024-01-15</td><td>孙七</td><td>孙七</td><td>孙七(809901)</td><td>本人</td><td>/转账</td><td>+¥500,000</td><td>查看详情</td></tr><tr><td>2</td><td>2024-01-10</td><td>王五</td><td>孙七</td><td>孙七(809901)</td><td>配偶</td><td>零钱商户消费</td><td>-¥200,000</td><td>查看详情</td></tr></table>
|
||||
|
||||
可疑流水查看详情:
|
||||
|
||||
# (2)涉及违法人员清单表
|
||||
|
||||
内容:展示经系统识别、在外部违法名单库中命中的人员信息,用于快速定位高风险人员,包括违法人员姓名、身份证号、是否为失信被执行人、是否有刑事判决记录、是否有行政处罚记录、是否涉及公安案件、是否被限制高消费、违法信息更新时间等字段。
|
||||
|
||||
操作:点击「查看详情」,将展示该人员的违法详情、更新日期等完整背景信息,辅助纪检核查。
|
||||
|
||||
|
||||
涉及违法人员清单表
|
||||
|
||||
|
||||
导出
|
||||
|
||||
<table><tr><td>序号</td><td>姓名</td><td>身份证号</td><td>失信被执行人</td><td>刑事判决</td><td>行政处罚</td><td>公安涉案记录</td><td>限制高消费</td><td>违法信息更新时间</td><td>操作</td></tr><tr><td>1</td><td>孙七</td><td>331081199405133029</td><td>是</td><td>否</td><td>是</td><td>是</td><td>是</td><td>2025-03-15</td><td>查看详情</td></tr><tr><td>2</td><td>王五</td><td>331081199405133020</td><td>否</td><td>否</td><td>否</td><td>否</td><td>否</td><td>2025-03-15</td><td>查看详情</td></tr></table>
|
||||
|
||||
# 基础信息
|
||||
|
||||
姓名:张三
|
||||
|
||||
身份证号:330106199001011234
|
||||
|
||||
# 失信被执行人
|
||||
|
||||
状态:是
|
||||
|
||||
法院:杭州市中院
|
||||
|
||||
标的:50万
|
||||
|
||||
时间:2023-05-15
|
||||
|
||||
# 行政处罚
|
||||
|
||||
状态:是
|
||||
|
||||
类型:罚款
|
||||
|
||||
事由:违规经营
|
||||
|
||||
机关:杭州市场监管局
|
||||
|
||||
# 其他
|
||||
|
||||
限制高消费:是
|
||||
|
||||
刑事/公安涉案:无
|
||||
|
||||
更新时间:2025-03-15
|
||||
|
||||
# (3) 异常账户清单表
|
||||
|
||||
内容:独立列出经模型识别出的所有异常账户,用于监控账户异动,防范资金风险。信息包括:账号、开户人、银行、异常类型(如"突然销户"、"异地启用")、异常发生时间、状态(如「已销户」「正常」「冻结」)等字段。
|
||||
|
||||
操作:点击「查看详情」,可以查看该账号的所有异常交易明细。
|
||||
|
||||
# 4、批量导出数据及报告
|
||||
|
||||
支持将上述所有列表(人员列表、异常清单等)导出为Excel。并可一键生成项目多维统计报告(PDF/Word),从模型触发排行、部门风险分布、风险评分区间等多维度进行分析总结。
|
||||
|
||||
# 第三部分 专项排查
|
||||
|
||||
本页面为针对单人用户的的深度调查:
|
||||
|
||||
# 1、员工详查分析
|
||||
|
||||
功能:输入目标员工的身份证号,可选择自定义时间范围,即可根据检查对像及其主要家庭成员(配偶等),根据收入、资产、负债三者的关系进行初核判断,形成正常、收入+负债远低于资产、收入+负债远高于资产等结果风险提示。
|
||||
|
||||
# 2、图谱分析
|
||||
|
||||
功能:通过图形化方式,揭示隐藏的人员与资金关系网络。输入身份证号,点击"生成图谱",结果在右侧可视化区域动态呈现。
|
||||
|
||||
# (1) 关系人图谱
|
||||
|
||||
通过身份证号等信息,可筛选展示以该员工为中心的社会关系网络(如家庭成员、密切关联人),点击节点可查看详情。再点击关联企业可以穿透查询企业下的法人、股东等信息。
|
||||
|
||||
# (2)资金流图谱
|
||||
|
||||
针对个人的资金流向图谱中的可疑资金,向前追溯多层交易对手。且资金流向分析中支持:手工加入资金流向节点,或备注资金流向。
|
||||
|
||||
# (3) 实控账户图谱
|
||||
|
||||
输入身份证号,生成该员工实际控制(可能非本人名下)的账户网络图。排查逻辑主要基于手机登录丰收互联次数、线下多次代理存取等进行判断。
|
||||
|
||||
# 3、拓展查询
|
||||
|
||||
# (1) 采购查询
|
||||
|
||||
功能:用于纪检/内审人员查询特定采购事项的核心信息,聚焦"采购集中度、金额异常"等风险排查。可筛选查询的采购时段,以及关联员工,查询其参与的所有采购。
|
||||
|
||||
内容:清单包含采购事项名称、交易日期、采购金额、供应商名称、关联员工等核心字段。
|
||||
|
||||
也可穿透展示采购全量信息(采购方式、入围/中标公司、经办人、对方账号等)。
|
||||
|
||||
|
||||
# (2)人员调动查询
|
||||
|
||||
功能:查询员工的岗位/机构调动记录,辅助排查"异常调动、岗位晋升合规性"。可选择查询时间和员工姓名,查询其所有调动记录。
|
||||
|
||||
内容:包含姓名、工号、调动时间、原/现岗位、原/现机构、调动原因等核心字段。
|
||||
|
||||
|
||||
# (3)招聘查询
|
||||
|
||||
功能:查询招聘事项信息,辅助排查"招聘流程合规性、面试官关联风险"。可筛选查询时间段和员工姓名,查询其招聘详情。
|
||||
|
||||
内容:包含招聘人员、岗位、招聘时间、关联面试官、面试结果等核心字段。
|
||||
|
||||
# 第四部分 流水明细查询
|
||||
|
||||
本页面为流水明细查询,对拉取的本行流水以及上传的他行流水进行批量分析。实现功能如下:
|
||||
|
||||
# 1、多帐户流水明细合并
|
||||
|
||||
可以将多个银行的流水合并成一个流水文件,左侧为筛选内容,可以筛选账号和银行进行查询;主页面可以选择按交易金额、交易时间等自主排序。且可切换对手方分析
|
||||
|
||||
# 2、全量流水二次分析
|
||||
|
||||
对全量流水表中的关键流水,可以进行手工提交"加入分析",实现将关键流水重新放置在一个新的交易表中进行分析。
|
||||
|
||||
|
||||
# 三. 信息维护
|
||||
|
||||
# 1、中介库管理
|
||||
|
||||
功能:建立并维护外部中介人员/机构黑名单库。支持Excel导入更新。当员工交易对手命中该库时,系统将自动产生高风险预警。
|
||||
|
||||
# 2、员工信息管理
|
||||
|
||||
功能:对员工实控账户、实控手机号、关系人信息等进行批量维护
|
||||
|
||||
说明:对于系统无法自动获取或关联的员工附属信息(如经查实的实际控制账户、未在户口本上的特定关系人等),提供手工录入与维护功能。
|
||||
|
||||
# 3、信贷客户家庭关系维护
|
||||
|
||||
可以上传并且维护信贷家庭关系表格信息。
|
||||
|
||||
# 四. 参数配置
|
||||
|
||||
功能:模型参数管理
|
||||
|
||||
说明:提供风险模型核心参数的维护界面、细化阈值规则。筛选模型名称:筛选(可选大额交易模型、可疑兼职模型、可疑外汇交易模型三种),得到阈值参数配置内容如下:
|
||||
|
||||
# 1、大额交易模型
|
||||
|
||||
识别大额/高频资金交易,检测调整单笔交易额、频繁转账次数等阈值
|
||||
|
||||
# 2、可疑兼职模型
|
||||
|
||||
识别异常额外收入,监测调整月度固定收入、固定对手转入等阈值
|
||||
|
||||
# 3、可疑外汇交易模型
|
||||
|
||||
识别异常外汇收支,监测调整单笔购汇金额、频繁外汇交易次数等阈值
|
||||
|
||||
# 模型参数管理
|
||||
|
||||
<table><tr><td>模型名称</td><td>可疑外汇交易模型</td><td>✓</td><td>查询</td></tr></table>
|
||||
|
||||
|
||||
阈值参数配置
|
||||
|
||||
|
||||
<table><tr><td>监测项</td><td>描述</td><td>阈值设置</td><td>单位</td></tr><tr><td>单笔购汇金额</td><td>单笔购汇超过该金额</td><td>50000</td><td>美元/笔</td></tr><tr><td>单笔结汇金额</td><td>单笔结汇超过该金额</td><td>50000</td><td>美元/笔</td></tr><tr><td>跨境汇款金额</td><td>单笔跨境汇款超过该金额</td><td>100000</td><td>美元/笔</td></tr><tr><td>月度购汇总额</td><td>月度累计购汇超过</td><td>200000</td><td>美元/月</td></tr><tr><td>月度结汇总额</td><td>月度累计结汇超过</td><td>200000</td><td>美元/月</td></tr><tr><td>频繁外汇交易</td><td>单日外汇交易次数超过</td><td>5</td><td>次/日</td></tr><tr><td>保存配置</td><td>恢复默认</td><td></td><td></td></tr></table>
|
||||
|
||||
# 五.系统管理
|
||||
|
||||
# 1、用户权限
|
||||
|
||||
系统管理员可对访问系统的用户账号进行增、删、改、禁用等操作。
|
||||
|
||||
# 2、项目统计
|
||||
|
||||
根据年度、组长、对像、成果等进行项目统计
|
||||
|
||||
# 3、操作日志管理
|
||||
|
||||
记录用户的关键操作(登录、数据导入、模型运行、报告生成等),支持按时间、用户、操作类型进行查询。
|
||||
|
||||
|
||||
QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [](https://jq.qq.com/?_wv=1027&k=SpyH2875) [](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GsOo-OLz53J8y_9TPoO6XXSGNRTgbFxA&authKey=R7Uy%2Feq%2BZsoKNqHvRKhiXpypW7DAogoWapOawUGHokJSBIBIre2%2FoiAZeZBSLuBc&noverify=0&group_code=191164766) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=PmYavuzsOthVqfdAPbo4uAeIbu7Ttjgc&authKey=p52l8%2FXa4PS1JcEmS3VccKSwOPJUZ1ZfQ69MEKzbrooNUljRtlKjvsXf04bxNp3G&noverify=0&group_code=174569686) 点击按钮入群。
|
||||
68
ccdi-info-collection/pom.xml
Normal file
68
ccdi-info-collection/pom.xml
Normal file
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>ruoyi</artifactId>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<version>3.9.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ccdi-info-collection</artifactId>
|
||||
|
||||
<description>
|
||||
信息采集模块
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- 通用工具-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 系统模块 -->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-system</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- easyexcel工具 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>easyexcel</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- spring-doc -->
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.30</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.ruoyi.info.collection.annotation;
|
||||
|
||||
import com.ruoyi.info.collection.validation.EnumValidator;
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 枚举值校验注解
|
||||
* 用于校验字段值是否在指定枚举类的定义范围内
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Target({ElementType.FIELD, ElementType.PARAMETER})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Constraint(validatedBy = EnumValidator.class)
|
||||
@Documented
|
||||
public @interface EnumValid {
|
||||
|
||||
/**
|
||||
* 枚举类
|
||||
*/
|
||||
Class<?> enumClass();
|
||||
|
||||
/**
|
||||
* 校验失败时的错误消息
|
||||
*/
|
||||
String message() default "枚举值不合法";
|
||||
|
||||
/**
|
||||
* 分组
|
||||
*/
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
/**
|
||||
* 负载
|
||||
*/
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
|
||||
/**
|
||||
* 是否忽略空值
|
||||
* 如果为true,当字段为null或空字符串时不进行校验
|
||||
*/
|
||||
boolean ignoreEmpty() default true;
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.*;
|
||||
import com.ruoyi.info.collection.service.ICcdiBaseStaffImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiBaseStaffService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工信息Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Tag(name = "员工信息管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/baseStaff")
|
||||
public class CcdiBaseStaffController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiBaseStaffService baseStaffService;
|
||||
|
||||
@Resource
|
||||
private ICcdiBaseStaffImportService importAsyncService;
|
||||
|
||||
/**
|
||||
* 查询员工列表
|
||||
*/
|
||||
@Operation(summary = "查询员工列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiBaseStaffQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiBaseStaffVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiBaseStaffVO> result = baseStaffService.selectBaseStaffPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询员工下拉列表
|
||||
*/
|
||||
@Operation(summary = "查询员工下拉列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:list')")
|
||||
@GetMapping("/options")
|
||||
public AjaxResult getStaffOptions(@RequestParam(required = false) String query) {
|
||||
List<CcdiBaseStaffOptionVO> list = baseStaffService.selectStaffOptions(query);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出员工列表
|
||||
*/
|
||||
@Operation(summary = "导出员工列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:export')")
|
||||
@Log(title = "员工信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiBaseStaffQueryDTO queryDTO) {
|
||||
List<CcdiBaseStaffExcel> list = baseStaffService.selectBaseStaffListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiBaseStaffExcel.class, "员工信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工详细信息
|
||||
*/
|
||||
@Operation(summary = "获取员工详细信息")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:query')")
|
||||
@GetMapping(value = "/{staffId}")
|
||||
public AjaxResult getInfo(@PathVariable Long staffId) {
|
||||
return success(baseStaffService.selectBaseStaffById(staffId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增员工
|
||||
*/
|
||||
@Operation(summary = "新增员工")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:add')")
|
||||
@Log(title = "员工信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiBaseStaffAddDTO addDTO) {
|
||||
return toAjax(baseStaffService.insertBaseStaff(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改员工
|
||||
*/
|
||||
@Operation(summary = "修改员工")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:edit')")
|
||||
@Log(title = "员工信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiBaseStaffEditDTO editDTO) {
|
||||
return toAjax(baseStaffService.updateBaseStaff(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除员工
|
||||
*/
|
||||
@Operation(summary = "删除员工")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:remove')")
|
||||
@Log(title = "员工信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{staffIds}")
|
||||
public AjaxResult remove(@PathVariable Long[] staffIds) {
|
||||
return toAjax(baseStaffService.deleteBaseStaffByIds(staffIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiBaseStaffExcel.class, "员工信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入员工信息(异步)
|
||||
*/
|
||||
@Operation(summary = "导入员工信息")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:import')")
|
||||
@Log(title = "员工信息", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
|
||||
List<CcdiBaseStaffExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiBaseStaffExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = baseStaffService.importBaseStaff(list, updateSupport);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询员工导入状态")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
try {
|
||||
ImportStatusVO status = importAsyncService.getImportStatus(taskId);
|
||||
return success(status);
|
||||
} catch (Exception e) {
|
||||
return error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<ImportFailureVO> failures = importAsyncService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<ImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustEnterpriseRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustEnterpriseRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustEnterpriseRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiCustEnterpriseRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiCustEnterpriseRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.CustEnterpriseRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustEnterpriseRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustEnterpriseRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Tag(name = "信贷客户实体关联信息管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/custEnterpriseRelation")
|
||||
public class CcdiCustEnterpriseRelationController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiCustEnterpriseRelationService relationService;
|
||||
|
||||
@Resource
|
||||
private ICcdiCustEnterpriseRelationImportService relationImportService;
|
||||
|
||||
/**
|
||||
* 查询信贷客户实体关联列表
|
||||
*/
|
||||
@Operation(summary = "查询信贷客户实体关联列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiCustEnterpriseRelationQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiCustEnterpriseRelationVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiCustEnterpriseRelationVO> result = relationService.selectRelationPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出信贷客户实体关联列表
|
||||
*/
|
||||
@Operation(summary = "导出信贷客户实体关联列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:export')")
|
||||
@Log(title = "信贷客户实体关联信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiCustEnterpriseRelationQueryDTO queryDTO) {
|
||||
List<CcdiCustEnterpriseRelationExcel> list = relationService.selectRelationListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiCustEnterpriseRelationExcel.class, "信贷客户实体关联信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信贷客户实体关联详细信息
|
||||
*/
|
||||
@Operation(summary = "获取信贷客户实体关联详细信息")
|
||||
@Parameter(name = "id", description = "主键ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable Long id) {
|
||||
return success(relationService.selectRelationById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增信贷客户实体关联
|
||||
*/
|
||||
@Operation(summary = "新增信贷客户实体关联")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:add')")
|
||||
@Log(title = "信贷客户实体关联信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiCustEnterpriseRelationAddDTO addDTO) {
|
||||
return toAjax(relationService.insertRelation(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改信贷客户实体关联
|
||||
*/
|
||||
@Operation(summary = "修改信贷客户实体关联")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:edit')")
|
||||
@Log(title = "信贷客户实体关联信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiCustEnterpriseRelationEditDTO editDTO) {
|
||||
return toAjax(relationService.updateRelation(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信贷客户实体关联
|
||||
*/
|
||||
@Operation(summary = "删除信贷客户实体关联")
|
||||
@Parameter(name = "ids", description = "主键ID数组", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:remove')")
|
||||
@Log(title = "信贷客户实体关联信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(relationService.deleteRelationByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载导入模板
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiCustEnterpriseRelationExcel.class, "信贷客户实体关联信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入信贷客户实体关联
|
||||
*/
|
||||
@Operation(summary = "异步导入信贷客户实体关联")
|
||||
@Parameter(name = "file", description = "导入文件", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:import')")
|
||||
@Log(title = "信贷客户实体关联信息", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||
List<CcdiCustEnterpriseRelationExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiCustEnterpriseRelationExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = relationService.importRelation(list);
|
||||
|
||||
// 立即返回
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = relationImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@Parameter(name = "pageNum", description = "页码", required = false)
|
||||
@Parameter(name = "pageSize", description = "每页条数", required = false)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custEnterpriseRelation:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<CustEnterpriseRelationImportFailureVO> failures = relationImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<CustEnterpriseRelationImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiCustFmyRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiCustFmyRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.CustFmyRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustFmyRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustFmyRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Tag(name = "信贷客户家庭关系管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/custFmyRelation")
|
||||
public class CcdiCustFmyRelationController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiCustFmyRelationService relationService;
|
||||
|
||||
@Resource
|
||||
private ICcdiCustFmyRelationImportService relationImportService;
|
||||
|
||||
/**
|
||||
* 查询信贷客户家庭关系列表
|
||||
*/
|
||||
@Operation(summary = "查询信贷客户家庭关系列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:query')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiCustFmyRelationQueryDTO query) {
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiCustFmyRelationVO> page = relationService.selectRelationPage(
|
||||
query, pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
return getDataTable(page.getRecords(), page.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID查询信贷客户家庭关系详情
|
||||
*/
|
||||
@Operation(summary = "查询信贷客户家庭关系详情")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:query')")
|
||||
@GetMapping("/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
||||
CcdiCustFmyRelationVO relation = relationService.selectRelationById(id);
|
||||
return success(relation);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增信贷客户家庭关系
|
||||
*/
|
||||
@Operation(summary = "新增信贷客户家庭关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:add')")
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiCustFmyRelationAddDTO addDTO) {
|
||||
return toAjax(relationService.insertRelation(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改信贷客户家庭关系
|
||||
*/
|
||||
@Operation(summary = "修改信贷客户家庭关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:edit')")
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiCustFmyRelationEditDTO editDTO) {
|
||||
return toAjax(relationService.updateRelation(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信贷客户家庭关系
|
||||
*/
|
||||
@Operation(summary = "删除信贷客户家庭关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:remove')")
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(relationService.deleteRelationByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出信贷客户家庭关系
|
||||
*/
|
||||
@Operation(summary = "导出信贷客户家庭关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:export')")
|
||||
@Log(title = "信贷客户家庭关系", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiCustFmyRelationQueryDTO query) {
|
||||
relationService.exportRelations(query, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiCustFmyRelationExcel.class, "信贷客户家庭关系");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入信贷客户家庭关系
|
||||
*/
|
||||
@Operation(summary = "异步导入信贷客户家庭关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:import')")
|
||||
@Log(title = "信贷客户家庭关系", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@RequestParam("file") MultipartFile file) throws IOException {
|
||||
List<CcdiCustFmyRelationExcel> excels = EasyExcelUtil.importExcel(
|
||||
file.getInputStream(),
|
||||
CcdiCustFmyRelationExcel.class
|
||||
);
|
||||
|
||||
if (excels == null || excels.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = relationService.importRelations(excels);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:query')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable("taskId") String taskId) {
|
||||
ImportStatusVO statusVO = relationImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:custFmyRelation:query')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable("taskId") String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<CustFmyRelationImportFailureVO> failures = relationImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<CustFmyRelationImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.ruoyi.info.collection.domain.vo.EnumOptionVO;
|
||||
import com.ruoyi.info.collection.enums.*;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* DPC枚举接口Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Tag(name = "枚举接口", description = "中介黑名单相关枚举选项接口")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/enum")
|
||||
public class CcdiEnumController {
|
||||
|
||||
/**
|
||||
* 获取人员类型选项
|
||||
*/
|
||||
@Operation(summary = "获取人员类型选项")
|
||||
@GetMapping("/indivType")
|
||||
public AjaxResult getIndivTypeOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (IndivType type : IndivType.values()) {
|
||||
options.add(new EnumOptionVO(type.getCode(), type.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取性别选项
|
||||
*/
|
||||
@Operation(summary = "获取性别选项")
|
||||
@GetMapping("/gender")
|
||||
public AjaxResult getGenderOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (Gender gender : Gender.values()) {
|
||||
options.add(new EnumOptionVO(gender.getCode(), gender.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取证件类型选项
|
||||
*/
|
||||
@Operation(summary = "获取证件类型选项")
|
||||
@GetMapping("/certType")
|
||||
public AjaxResult getCertTypeOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (CertType type : CertType.values()) {
|
||||
options.add(new EnumOptionVO(type.getCode(), type.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取关联关系选项
|
||||
*/
|
||||
@Operation(summary = "获取关联关系选项")
|
||||
@GetMapping("/relationType")
|
||||
public AjaxResult getRelationTypeOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (RelationType type : RelationType.values()) {
|
||||
options.add(new EnumOptionVO(type.getCode(), type.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取主体类型选项
|
||||
*/
|
||||
@Operation(summary = "获取主体类型选项")
|
||||
@GetMapping("/corpType")
|
||||
public AjaxResult getCorpTypeOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (CorpType type : CorpType.values()) {
|
||||
options.add(new EnumOptionVO(type.getCode(), type.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业性质选项
|
||||
*/
|
||||
@Operation(summary = "获取企业性质选项")
|
||||
@GetMapping("/corpNature")
|
||||
public AjaxResult getCorpNatureOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (CorpNature nature : CorpNature.values()) {
|
||||
options.add(new EnumOptionVO(nature.getCode(), nature.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取中介类型选项
|
||||
*/
|
||||
@Operation(summary = "获取中介类型选项")
|
||||
@GetMapping("/intermediaryType")
|
||||
public AjaxResult getIntermediaryTypeOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (IntermediaryType type : IntermediaryType.values()) {
|
||||
options.add(new EnumOptionVO(type.getCode(), type.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取中介状态选项
|
||||
*/
|
||||
@Operation(summary = "获取中介状态选项")
|
||||
@GetMapping("/intermediaryStatus")
|
||||
public AjaxResult getIntermediaryStatusOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (IntermediaryStatus status : IntermediaryStatus.values()) {
|
||||
options.add(new EnumOptionVO(status.getCode(), status.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据来源选项
|
||||
*/
|
||||
@Operation(summary = "获取数据来源选项")
|
||||
@GetMapping("/dataSource")
|
||||
public AjaxResult getDataSourceOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (DataSource source : DataSource.values()) {
|
||||
options.add(new EnumOptionVO(source.getCode(), source.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,318 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.*;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryEntityExcel;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryPersonExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.*;
|
||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryEntityImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryPersonImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 中介信息Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Tag(name = "中介信息管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/intermediary")
|
||||
public class CcdiIntermediaryController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiIntermediaryService intermediaryService;
|
||||
|
||||
@Resource
|
||||
private ICcdiIntermediaryPersonImportService personImportService;
|
||||
|
||||
@Resource
|
||||
private ICcdiIntermediaryEntityImportService entityImportService;
|
||||
|
||||
/**
|
||||
* 查询中介列表
|
||||
*/
|
||||
@Operation(summary = "查询中介列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiIntermediaryQueryDTO queryDTO) {
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiIntermediaryVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiIntermediaryVO> result = intermediaryService.selectIntermediaryPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询个人中介详情
|
||||
*/
|
||||
@Operation(summary = "查询个人中介详情")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
|
||||
@GetMapping("/person/{bizId}")
|
||||
public AjaxResult getPersonInfo(@PathVariable String bizId) {
|
||||
CcdiIntermediaryPersonDetailVO vo = intermediaryService.selectIntermediaryPersonDetail(bizId);
|
||||
return success(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询实体中介详情
|
||||
*/
|
||||
@Operation(summary = "查询实体中介详情")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
|
||||
@GetMapping("/entity/{socialCreditCode}")
|
||||
public AjaxResult getEntityInfo(@PathVariable String socialCreditCode) {
|
||||
CcdiIntermediaryEntityDetailVO vo = intermediaryService.selectIntermediaryEntityDetail(socialCreditCode);
|
||||
return success(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增个人中介
|
||||
*/
|
||||
@Operation(summary = "新增个人中介")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
|
||||
@Log(title = "个人中介", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/person")
|
||||
public AjaxResult addPerson(@Validated @RequestBody CcdiIntermediaryPersonAddDTO addDTO) {
|
||||
return toAjax(intermediaryService.insertIntermediaryPerson(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改个人中介
|
||||
*/
|
||||
@Operation(summary = "修改个人中介")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
|
||||
@Log(title = "个人中介", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/person")
|
||||
public AjaxResult editPerson(@Validated @RequestBody CcdiIntermediaryPersonEditDTO editDTO) {
|
||||
return toAjax(intermediaryService.updateIntermediaryPerson(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增实体中介
|
||||
*/
|
||||
@Operation(summary = "新增实体中介")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
|
||||
@Log(title = "实体中介", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/entity")
|
||||
public AjaxResult addEntity(@Validated @RequestBody CcdiIntermediaryEntityAddDTO addDTO) {
|
||||
return toAjax(intermediaryService.insertIntermediaryEntity(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改实体中介
|
||||
*/
|
||||
@Operation(summary = "修改实体中介")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
|
||||
@Log(title = "实体中介", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/entity")
|
||||
public AjaxResult editEntity(@Validated @RequestBody CcdiIntermediaryEntityEditDTO editDTO) {
|
||||
return toAjax(intermediaryService.updateIntermediaryEntity(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除中介
|
||||
*/
|
||||
@Operation(summary = "删除中介")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:remove')")
|
||||
@Log(title = "中介信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable String[] ids) {
|
||||
return toAjax(intermediaryService.deleteIntermediaryByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验人员ID唯一性
|
||||
*/
|
||||
@Operation(summary = "校验人员ID唯一性")
|
||||
@GetMapping("/checkPersonIdUnique")
|
||||
public AjaxResult checkPersonIdUnique(@RequestParam String personId, @RequestParam(required = false) String bizId) {
|
||||
boolean unique = intermediaryService.checkPersonIdUnique(personId, bizId);
|
||||
return success(unique);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验统一社会信用代码唯一性
|
||||
*/
|
||||
@Operation(summary = "校验统一社会信用代码唯一性")
|
||||
@GetMapping("/checkSocialCreditCodeUnique")
|
||||
public AjaxResult checkSocialCreditCodeUnique(@RequestParam String socialCreditCode, @RequestParam(required = false) String excludeId) {
|
||||
boolean unique = intermediaryService.checkSocialCreditCodeUnique(socialCreditCode, excludeId);
|
||||
return success(unique);
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载个人中介导入模板
|
||||
*/
|
||||
@Operation(summary = "下载个人中介导入模板")
|
||||
@PostMapping("/importPersonTemplate")
|
||||
public void importPersonTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryPersonExcel.class, "个人中介信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载实体中介导入模板
|
||||
*/
|
||||
@Operation(summary = "下载实体中介导入模板")
|
||||
@PostMapping("/importEntityTemplate")
|
||||
public void importEntityTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryEntityExcel.class, "实体中介信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入个人中介数据(异步)
|
||||
*/
|
||||
@Operation(summary = "导入个人中介数据")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||
@Log(title = "个人中介", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importPersonData")
|
||||
public AjaxResult importPersonData(MultipartFile file) throws Exception {
|
||||
List<CcdiIntermediaryPersonExcel> list = EasyExcelUtil.importExcel(
|
||||
file.getInputStream(), CcdiIntermediaryPersonExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = intermediaryService.importIntermediaryPerson(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入实体中介数据(异步)
|
||||
*/
|
||||
@Operation(summary = "导入实体中介数据")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||
@Log(title = "实体中介", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importEntityData")
|
||||
public AjaxResult importEntityData(MultipartFile file) throws Exception {
|
||||
List<CcdiIntermediaryEntityExcel> list = EasyExcelUtil.importExcel(
|
||||
file.getInputStream(), CcdiIntermediaryEntityExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = intermediaryService.importIntermediaryEntity(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询个人中介导入状态
|
||||
*/
|
||||
@Operation(summary = "查询个人中介导入状态")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||
@GetMapping("/importPersonStatus/{taskId}")
|
||||
public AjaxResult getPersonImportStatus(@PathVariable String taskId) {
|
||||
try {
|
||||
ImportStatusVO status = personImportService.getImportStatus(taskId);
|
||||
return success(status);
|
||||
} catch (Exception e) {
|
||||
return error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询个人中介导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询个人中介导入失败记录")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||
@GetMapping("/importPersonFailures/{taskId}")
|
||||
public TableDataInfo getPersonImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<IntermediaryPersonImportFailureVO> failures =
|
||||
personImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<IntermediaryPersonImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询实体中介导入状态
|
||||
*/
|
||||
@Operation(summary = "查询实体中介导入状态")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||
@GetMapping("/importEntityStatus/{taskId}")
|
||||
public AjaxResult getEntityImportStatus(@PathVariable String taskId) {
|
||||
try {
|
||||
ImportStatusVO status = entityImportService.getImportStatus(taskId);
|
||||
return success(status);
|
||||
} catch (Exception e) {
|
||||
return error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询实体中介导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询实体中介导入失败记录")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||
@GetMapping("/importEntityFailures/{taskId}")
|
||||
public TableDataInfo getEntityImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<IntermediaryEntityImportFailureVO> failures =
|
||||
entityImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<IntermediaryEntityImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiPurchaseTransactionVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.PurchaseTransactionImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiPurchaseTransactionImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiPurchaseTransactionService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购交易信息Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Tag(name = "采购交易信息管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/purchaseTransaction")
|
||||
public class CcdiPurchaseTransactionController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiPurchaseTransactionService transactionService;
|
||||
|
||||
@Resource
|
||||
private ICcdiPurchaseTransactionImportService transactionImportService;
|
||||
|
||||
/**
|
||||
* 查询采购交易列表
|
||||
*/
|
||||
@Operation(summary = "查询采购交易列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiPurchaseTransactionQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiPurchaseTransactionVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiPurchaseTransactionVO> result = transactionService.selectTransactionPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出采购交易列表
|
||||
*/
|
||||
@Operation(summary = "导出采购交易列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:export')")
|
||||
@Log(title = "采购交易信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiPurchaseTransactionQueryDTO queryDTO) {
|
||||
List<CcdiPurchaseTransactionExcel> list = transactionService.selectTransactionListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiPurchaseTransactionExcel.class, "采购交易信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取采购交易详细信息
|
||||
*/
|
||||
@Operation(summary = "获取采购交易详细信息")
|
||||
@Parameter(name = "purchaseId", description = "采购事项ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:query')")
|
||||
@GetMapping(value = "/{purchaseId}")
|
||||
public AjaxResult getInfo(@PathVariable String purchaseId) {
|
||||
return success(transactionService.selectTransactionById(purchaseId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增采购交易
|
||||
*/
|
||||
@Operation(summary = "新增采购交易")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:add')")
|
||||
@Log(title = "采购交易信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiPurchaseTransactionAddDTO addDTO) {
|
||||
return toAjax(transactionService.insertTransaction(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改采购交易
|
||||
*/
|
||||
@Operation(summary = "修改采购交易")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:edit')")
|
||||
@Log(title = "采购交易信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiPurchaseTransactionEditDTO editDTO) {
|
||||
return toAjax(transactionService.updateTransaction(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除采购交易
|
||||
*/
|
||||
@Operation(summary = "删除采购交易")
|
||||
@Parameter(name = "purchaseIds", description = "采购事项ID数组", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:remove')")
|
||||
@Log(title = "采购交易信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{purchaseIds}")
|
||||
public AjaxResult remove(@PathVariable String[] purchaseIds) {
|
||||
return toAjax(transactionService.deleteTransactionByIds(purchaseIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiPurchaseTransactionExcel.class, "采购交易信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入采购交易
|
||||
*/
|
||||
@Operation(summary = "异步导入采购交易")
|
||||
@Parameter(name = "file", description = "导入文件", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:import')")
|
||||
@Log(title = "采购交易信息", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||
List<CcdiPurchaseTransactionExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiPurchaseTransactionExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = transactionService.importTransaction(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = transactionImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@Parameter(name = "pageNum", description = "页码", required = false)
|
||||
@Parameter(name = "pageSize", description = "每页条数", required = false)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<PurchaseTransactionImportFailureVO> failures = transactionImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<PurchaseTransactionImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffEnterpriseRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffEnterpriseRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.StaffEnterpriseRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffEnterpriseRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffEnterpriseRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Tag(name = "员工实体关系信息管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/staffEnterpriseRelation")
|
||||
public class CcdiStaffEnterpriseRelationController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffEnterpriseRelationService relationService;
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffEnterpriseRelationImportService relationImportService;
|
||||
|
||||
/**
|
||||
* 查询员工实体关系列表
|
||||
*/
|
||||
@Operation(summary = "查询员工实体关系列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiStaffEnterpriseRelationQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiStaffEnterpriseRelationVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiStaffEnterpriseRelationVO> result = relationService.selectRelationPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出员工实体关系列表
|
||||
*/
|
||||
@Operation(summary = "导出员工实体关系列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:export')")
|
||||
@Log(title = "员工实体关系信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiStaffEnterpriseRelationQueryDTO queryDTO) {
|
||||
List<CcdiStaffEnterpriseRelationExcel> list = relationService.selectRelationListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiStaffEnterpriseRelationExcel.class, "员工实体关系信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工实体关系详细信息
|
||||
*/
|
||||
@Operation(summary = "获取员工实体关系详细信息")
|
||||
@Parameter(name = "id", description = "主键ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable Long id) {
|
||||
return success(relationService.selectRelationById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增员工实体关系
|
||||
*/
|
||||
@Operation(summary = "新增员工实体关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:add')")
|
||||
@Log(title = "员工实体关系信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiStaffEnterpriseRelationAddDTO addDTO) {
|
||||
return toAjax(relationService.insertRelation(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改员工实体关系
|
||||
*/
|
||||
@Operation(summary = "修改员工实体关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:edit')")
|
||||
@Log(title = "员工实体关系信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiStaffEnterpriseRelationEditDTO editDTO) {
|
||||
return toAjax(relationService.updateRelation(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除员工实体关系
|
||||
*/
|
||||
@Operation(summary = "删除员工实体关系")
|
||||
@Parameter(name = "ids", description = "主键ID数组", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:remove')")
|
||||
@Log(title = "员工实体关系信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(relationService.deleteRelationByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffEnterpriseRelationExcel.class, "员工实体关系信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入员工实体关系
|
||||
*/
|
||||
@Operation(summary = "异步导入员工实体关系")
|
||||
@Parameter(name = "file", description = "导入文件", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:import')")
|
||||
@Log(title = "员工实体关系信息", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||
List<CcdiStaffEnterpriseRelationExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffEnterpriseRelationExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = relationService.importRelation(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = relationImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@Parameter(name = "pageNum", description = "页码", required = false)
|
||||
@Parameter(name = "pageSize", description = "每页条数", required = false)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<StaffEnterpriseRelationImportFailureVO> failures = relationImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<StaffEnterpriseRelationImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffFmyRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffFmyRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.StaffFmyRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工亲属关系Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Tag(name = "员工亲属关系管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/staffFmyRelation")
|
||||
public class CcdiStaffFmyRelationController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffFmyRelationService relationService;
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffFmyRelationImportService relationImportService;
|
||||
|
||||
/**
|
||||
* 查询员工亲属关系列表
|
||||
*/
|
||||
@Operation(summary = "查询员工亲属关系列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiStaffFmyRelationQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiStaffFmyRelationVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiStaffFmyRelationVO> result = relationService.selectRelationPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出员工亲属关系列表
|
||||
*/
|
||||
@Operation(summary = "导出员工亲属关系列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:export')")
|
||||
@Log(title = "员工亲属关系", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiStaffFmyRelationQueryDTO queryDTO) {
|
||||
List<CcdiStaffFmyRelationExcel> list = relationService.selectRelationListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiStaffFmyRelationExcel.class, "员工亲属关系信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工亲属关系详细信息
|
||||
*/
|
||||
@Operation(summary = "获取员工亲属关系详细信息")
|
||||
@Parameter(name = "id", description = "主键ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable Long id) {
|
||||
return success(relationService.selectRelationById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增员工亲属关系
|
||||
*/
|
||||
@Operation(summary = "新增员工亲属关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:add')")
|
||||
@Log(title = "员工亲属关系", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiStaffFmyRelationAddDTO addDTO) {
|
||||
return toAjax(relationService.insertRelation(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改员工亲属关系
|
||||
*/
|
||||
@Operation(summary = "修改员工亲属关系")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:edit')")
|
||||
@Log(title = "员工亲属关系", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiStaffFmyRelationEditDTO editDTO) {
|
||||
return toAjax(relationService.updateRelation(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除员工亲属关系
|
||||
*/
|
||||
@Operation(summary = "删除员工亲属关系")
|
||||
@Parameter(name = "ids", description = "主键ID数组", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:remove')")
|
||||
@Log(title = "员工亲属关系", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(relationService.deleteRelationByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffFmyRelationExcel.class, "员工亲属关系信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入员工亲属关系
|
||||
*/
|
||||
@Operation(summary = "异步导入员工亲属关系")
|
||||
@Parameter(name = "file", description = "导入文件", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:import')")
|
||||
@Log(title = "员工亲属关系", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||
List<CcdiStaffFmyRelationExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffFmyRelationExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = relationService.importRelation(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = relationImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@Parameter(name = "pageNum", description = "页码", required = false)
|
||||
@Parameter(name = "pageSize", description = "每页条数", required = false)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffFmyRelation:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<StaffFmyRelationImportFailureVO> failures = relationImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<StaffFmyRelationImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.RecruitmentImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工招聘信息Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Tag(name = "员工招聘信息管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/staffRecruitment")
|
||||
public class CcdiStaffRecruitmentController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffRecruitmentService recruitmentService;
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffRecruitmentImportService recruitmentImportService;
|
||||
|
||||
/**
|
||||
* 查询招聘信息列表
|
||||
*/
|
||||
@Operation(summary = "查询招聘信息列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiStaffRecruitmentQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiStaffRecruitmentVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiStaffRecruitmentVO> result = recruitmentService.selectRecruitmentPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出招聘信息列表
|
||||
*/
|
||||
@Operation(summary = "导出招聘信息列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:export')")
|
||||
@Log(title = "员工招聘信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiStaffRecruitmentQueryDTO queryDTO) {
|
||||
List<CcdiStaffRecruitmentExcel> list = recruitmentService.selectRecruitmentListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiStaffRecruitmentExcel.class, "员工招聘信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取招聘信息详细信息
|
||||
*/
|
||||
@Operation(summary = "获取招聘信息详细信息")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:query')")
|
||||
@GetMapping(value = "/{recruitId}")
|
||||
public AjaxResult getInfo(@PathVariable String recruitId) {
|
||||
return success(recruitmentService.selectRecruitmentById(recruitId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增招聘信息
|
||||
*/
|
||||
@Operation(summary = "新增招聘信息")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:add')")
|
||||
@Log(title = "员工招聘信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiStaffRecruitmentAddDTO addDTO) {
|
||||
return toAjax(recruitmentService.insertRecruitment(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改招聘信息
|
||||
*/
|
||||
@Operation(summary = "修改招聘信息")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:edit')")
|
||||
@Log(title = "员工招聘信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiStaffRecruitmentEditDTO editDTO) {
|
||||
return toAjax(recruitmentService.updateRecruitment(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除招聘信息
|
||||
*/
|
||||
@Operation(summary = "删除招聘信息")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:remove')")
|
||||
@Log(title = "员工招聘信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{recruitIds}")
|
||||
public AjaxResult remove(@PathVariable String[] recruitIds) {
|
||||
return toAjax(recruitmentService.deleteRecruitmentByIds(recruitIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffRecruitmentExcel.class, "员工招聘信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入招聘信息
|
||||
*/
|
||||
@Operation(summary = "异步导入招聘信息")
|
||||
@Parameter(name = "file", description = "导入文件", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:import')")
|
||||
@Log(title = "员工招聘信息", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||
List<CcdiStaffRecruitmentExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffRecruitmentExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = recruitmentService.importRecruitment(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = recruitmentImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@Parameter(name = "pageNum", description = "页码", required = false)
|
||||
@Parameter(name = "pageSize", description = "每页条数", required = false)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<RecruitmentImportFailureVO> failures = recruitmentImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<RecruitmentImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffTransferExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffTransferVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.StaffTransferImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffTransferImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffTransferService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.PageDomain;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.page.TableSupport;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工调动记录Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Tag(name = "员工调动记录管理")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/staffTransfer")
|
||||
public class CcdiStaffTransferController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffTransferService transferService;
|
||||
|
||||
@Resource
|
||||
private ICcdiStaffTransferImportService transferImportService;
|
||||
|
||||
/**
|
||||
* 查询员工调动记录列表
|
||||
*/
|
||||
@Operation(summary = "查询员工调动记录列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CcdiStaffTransferQueryDTO queryDTO) {
|
||||
// 使用MyBatis Plus分页
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<CcdiStaffTransferVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<CcdiStaffTransferVO> result = transferService.selectTransferPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出员工调动记录列表
|
||||
*/
|
||||
@Operation(summary = "导出员工调动记录列表")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:export')")
|
||||
@Log(title = "员工调动记录", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, CcdiStaffTransferQueryDTO queryDTO) {
|
||||
List<CcdiStaffTransferExcel> list = transferService.selectTransferListForExport(queryDTO);
|
||||
EasyExcelUtil.exportExcel(response, list, CcdiStaffTransferExcel.class, "员工调动记录信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工调动记录详细信息
|
||||
*/
|
||||
@Operation(summary = "获取员工调动记录详细信息")
|
||||
@Parameter(name = "id", description = "主键ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable Long id) {
|
||||
return success(transferService.selectTransferById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增员工调动记录
|
||||
*/
|
||||
@Operation(summary = "新增员工调动记录")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:add')")
|
||||
@Log(title = "员工调动记录", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody CcdiStaffTransferAddDTO addDTO) {
|
||||
return toAjax(transferService.insertTransfer(addDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改员工调动记录
|
||||
*/
|
||||
@Operation(summary = "修改员工调动记录")
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:edit')")
|
||||
@Log(title = "员工调动记录", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody CcdiStaffTransferEditDTO editDTO) {
|
||||
return toAjax(transferService.updateTransfer(editDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除员工调动记录
|
||||
*/
|
||||
@Operation(summary = "删除员工调动记录")
|
||||
@Parameter(name = "ids", description = "主键ID数组", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:remove')")
|
||||
@Log(title = "员工调动记录", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(transferService.deleteTransferByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载带字典下拉框的导入模板
|
||||
* 使用@DictDropdown注解自动添加下拉框
|
||||
*/
|
||||
@Operation(summary = "下载导入模板")
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffTransferExcel.class, "员工调动记录信息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步导入员工调动记录
|
||||
*/
|
||||
@Operation(summary = "异步导入员工调动记录")
|
||||
@Parameter(name = "file", description = "导入文件", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:import')")
|
||||
@Log(title = "员工调动记录", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||
List<CcdiStaffTransferExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffTransferExcel.class);
|
||||
|
||||
if (list == null || list.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
// 提交异步任务
|
||||
String taskId = transferService.importTransfer(list);
|
||||
|
||||
// 立即返回,不等待后台任务完成
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入状态
|
||||
*/
|
||||
@Operation(summary = "查询导入状态")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:import')")
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = transferImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询导入失败记录
|
||||
*/
|
||||
@Operation(summary = "查询导入失败记录")
|
||||
@Parameter(name = "taskId", description = "任务ID", required = true)
|
||||
@Parameter(name = "pageNum", description = "页码", required = false)
|
||||
@Parameter(name = "pageSize", description = "每页条数", required = false)
|
||||
@PreAuthorize("@ss.hasPermi('ccdi:staffTransfer:import')")
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||
|
||||
List<StaffTransferImportFailureVO> failures = transferImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
// 检查 fromIndex 是否超出范围
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<StaffTransferImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工信息对象 ccdi_base_staff
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_base_staff")
|
||||
public class CcdiBaseStaff implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID */
|
||||
@TableId(type = IdType.INPUT)
|
||||
private Long staffId;
|
||||
|
||||
/** 姓名 */
|
||||
private String name;
|
||||
|
||||
/** 所属部门ID */
|
||||
private Long deptId;
|
||||
|
||||
/** 身份证号 */
|
||||
private String idCard;
|
||||
|
||||
/** 电话 */
|
||||
private String phone;
|
||||
|
||||
/** 入职时间 */
|
||||
private Date hireDate;
|
||||
|
||||
/** 状态 */
|
||||
private String status;
|
||||
|
||||
/** 创建者 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createBy;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新者 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updateBy;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 个人中介对象 ccdi_biz_intermediary
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_biz_intermediary")
|
||||
public class CcdiBizIntermediary implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 人员ID */
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String bizId;
|
||||
|
||||
/** 人员类型,中介、职业背债人、房产中介等 */
|
||||
private String personType;
|
||||
|
||||
/** 人员子类型 */
|
||||
private String personSubType;
|
||||
|
||||
/** 关系类型,如:配偶、子女、父母、兄弟姐妹等 */
|
||||
private String relationType;
|
||||
|
||||
/** 姓名 */
|
||||
private String name;
|
||||
|
||||
/** 性别 */
|
||||
private String gender;
|
||||
|
||||
/** 证件类型 */
|
||||
private String idType;
|
||||
|
||||
/** 证件号码 */
|
||||
private String personId;
|
||||
|
||||
/** 手机号码 */
|
||||
private String mobile;
|
||||
|
||||
/** 微信号 */
|
||||
private String wechatNo;
|
||||
|
||||
/** 联系地址 */
|
||||
private String contactAddress;
|
||||
|
||||
/** 所在公司 */
|
||||
private String company;
|
||||
|
||||
/** 企业统一信用码 */
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 职位 */
|
||||
private String position;
|
||||
|
||||
/** 关联人员ID */
|
||||
private String relatedNumId;
|
||||
|
||||
/** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, IMPORT:批量导入, API:接口获取 */
|
||||
private String dataSource;
|
||||
|
||||
/** 备注信息 */
|
||||
private String remark;
|
||||
|
||||
/** 记录创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 记录创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 记录更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
|
||||
/** 记录更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息对象 ccdi_cust_enterprise_relation
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_cust_enterprise_relation")
|
||||
@Schema(description = "信贷客户实体关联信息")
|
||||
public class CcdiCustEnterpriseRelation implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否为员工(0-否 1-是) */
|
||||
@Schema(description = "是否为员工(0-否 1-是)")
|
||||
private Integer isEmployee;
|
||||
|
||||
/** 是否为员工家属(0-否 1-是) */
|
||||
@Schema(description = "是否为员工家属(0-否 1-是)")
|
||||
private Integer isEmpFamily;
|
||||
|
||||
/** 是否为客户(0-否 1-是) */
|
||||
@Schema(description = "是否为客户(0-否 1-是)")
|
||||
private Integer isCustomer;
|
||||
|
||||
/** 是否为客户家属(0-否 1-是) */
|
||||
@Schema(description = "是否为客户家属(0-否 1-是)")
|
||||
private Integer isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系对象 ccdi_cust_fmy_relation
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_cust_fmy_relation")
|
||||
public class CcdiCustFmyRelation implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
private String relationName;
|
||||
|
||||
/** 性别:M-男,F-女,O-其他 */
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
private String relationDesc;
|
||||
|
||||
/** 状态:0-无效,1-有效 */
|
||||
private Integer status;
|
||||
|
||||
/** 生效日期 */
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
private Date invalidDate;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
|
||||
/** 数据来源:MANUAL-手工录入,IMPORT-批量导入 */
|
||||
private String dataSource;
|
||||
|
||||
/** 是否是员工亲属:0-否 */
|
||||
private Boolean isEmpFamily;
|
||||
|
||||
/** 是否是客户亲属:1-是 */
|
||||
private Boolean isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 企业主体信息对象 ccdi_enterprise_base_info
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_enterprise_base_info")
|
||||
public class CcdiEnterpriseBaseInfo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 统一社会信用代码,员工企业关联关系表的外键 */
|
||||
@TableId(type = IdType.INPUT)
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
private String enterpriseName;
|
||||
|
||||
/** 企业类型,有限责任公司、股份有限公司、合伙企业、个体工商户、外资企业等 */
|
||||
private String enterpriseType;
|
||||
|
||||
/** 企业性质,国企、民企、外企、合资、其他 */
|
||||
private String enterpriseNature;
|
||||
|
||||
/** 行业分类 */
|
||||
private String industryClass;
|
||||
|
||||
/** 所属行业 */
|
||||
private String industryName;
|
||||
|
||||
/** 成立日期 */
|
||||
private Date establishDate;
|
||||
|
||||
/** 注册地址 */
|
||||
private String registerAddress;
|
||||
|
||||
/** 法定代表人 */
|
||||
private String legalRepresentative;
|
||||
|
||||
/** 法定代表人证件类型 */
|
||||
private String legalCertType;
|
||||
|
||||
/** 法定代表人证件号码 */
|
||||
private String legalCertNo;
|
||||
|
||||
/** 股东1 */
|
||||
private String shareholder1;
|
||||
|
||||
/** 股东2 */
|
||||
private String shareholder2;
|
||||
|
||||
/** 股东3 */
|
||||
private String shareholder3;
|
||||
|
||||
/** 股东4 */
|
||||
private String shareholder4;
|
||||
|
||||
/** 股东5 */
|
||||
private String shareholder5;
|
||||
|
||||
/** 经营状态 */
|
||||
private String status;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, API:接口获取, IMPORT:批量导入 */
|
||||
private String dataSource;
|
||||
|
||||
/** 风险等级:1-高风险, 2-中风险, 3-低风险 */
|
||||
private String riskLevel;
|
||||
|
||||
/** 企业来源:GENERAL-一般企业, EMP_RELATION-员工关系人, CREDIT_CUSTOMER-信贷客户, INTERMEDIARY-中介, BOTH-兼有 */
|
||||
private String entSource;
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工采购交易信息对象 ccdi_purchase_transaction
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
public class CcdiPurchaseTransaction implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 采购事项ID */
|
||||
@TableId(type = IdType.INPUT)
|
||||
private String purchaseId;
|
||||
|
||||
/** 采购类别 */
|
||||
private String purchaseCategory;
|
||||
|
||||
/** 项目名称 */
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
private String subjectName;
|
||||
|
||||
/** 标的物描述 */
|
||||
private String subjectDesc;
|
||||
|
||||
/** 采购数量 */
|
||||
private BigDecimal purchaseQty;
|
||||
|
||||
/** 预算金额 */
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/** 中标金额 */
|
||||
private BigDecimal bidAmount;
|
||||
|
||||
/** 实际采购金额 */
|
||||
private BigDecimal actualAmount;
|
||||
|
||||
/** 合同金额 */
|
||||
private BigDecimal contractAmount;
|
||||
|
||||
/** 结算金额 */
|
||||
private BigDecimal settlementAmount;
|
||||
|
||||
/** 采购方式 */
|
||||
private String purchaseMethod;
|
||||
|
||||
/** 中标供应商名称 */
|
||||
private String supplierName;
|
||||
|
||||
/** 供应商联系人 */
|
||||
private String contactPerson;
|
||||
|
||||
/** 供应商联系电话 */
|
||||
private String contactPhone;
|
||||
|
||||
/** 供应商统一信用代码 */
|
||||
private String supplierUscc;
|
||||
|
||||
/** 供应商银行账户 */
|
||||
private String supplierBankAccount;
|
||||
|
||||
/** 采购申请日期 */
|
||||
private Date applyDate;
|
||||
|
||||
/** 采购计划批准日期 */
|
||||
private Date planApproveDate;
|
||||
|
||||
/** 采购公告发布日期 */
|
||||
private Date announceDate;
|
||||
|
||||
/** 开标日期 */
|
||||
private Date bidOpenDate;
|
||||
|
||||
/** 合同签订日期 */
|
||||
private Date contractSignDate;
|
||||
|
||||
/** 预计交货日期 */
|
||||
private Date expectedDeliveryDate;
|
||||
|
||||
/** 实际交货日期 */
|
||||
private Date actualDeliveryDate;
|
||||
|
||||
/** 验收日期 */
|
||||
private Date acceptanceDate;
|
||||
|
||||
/** 结算日期 */
|
||||
private Date settlementDate;
|
||||
|
||||
/** 申请人工号 */
|
||||
private String applicantId;
|
||||
|
||||
/** 申请人姓名 */
|
||||
private String applicantName;
|
||||
|
||||
/** 申请部门 */
|
||||
private String applyDepartment;
|
||||
|
||||
/** 采购负责人工号 */
|
||||
private String purchaseLeaderId;
|
||||
|
||||
/** 采购负责人姓名 */
|
||||
private String purchaseLeaderName;
|
||||
|
||||
/** 采购部门 */
|
||||
private String purchaseDepartment;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息对象 ccdi_staff_enterprise_relation
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_staff_enterprise_relation")
|
||||
@Schema(description = "员工实体关系信息")
|
||||
public class CcdiStaffEnterpriseRelation implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否为员工(0-否 1-是) */
|
||||
@Schema(description = "是否为员工(0-否 1-是)")
|
||||
private Integer isEmployee;
|
||||
|
||||
/** 是否为员工家属(0-否 1-是) */
|
||||
@Schema(description = "是否为员工家属(0-否 1-是)")
|
||||
private Integer isEmpFamily;
|
||||
|
||||
/** 是否为客户(0-否 1-是) */
|
||||
@Schema(description = "是否为客户(0-否 1-是)")
|
||||
private Integer isCustomer;
|
||||
|
||||
/** 是否为客户家属(0-否 1-是) */
|
||||
@Schema(description = "是否为客户家属(0-否 1-是)")
|
||||
private Integer isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工亲属关系对象 ccdi_staff_fmy_relation
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffFmyRelation implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 员工身份证号 */
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
private String relationName;
|
||||
|
||||
/** 性别:M-男,F-女,O-其他 */
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
private Date invalidDate;
|
||||
|
||||
/** 状态:0-无效,1-有效 */
|
||||
private Integer status;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
|
||||
/** 数据来源:MANUAL-手工录入,IMPORT-导入 */
|
||||
private String dataSource;
|
||||
|
||||
/** 是否是员工亲属:0-否,1-是 */
|
||||
private Boolean isEmpFamily;
|
||||
|
||||
/** 是否是客户亲属:0-否,1-是 */
|
||||
private Boolean isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工招聘信息对象 ccdi_staff_recruitment
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffRecruitment implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 招聘项目编号 */
|
||||
@TableId(type = IdType.INPUT)
|
||||
private String recruitId;
|
||||
|
||||
/** 招聘项目名称 */
|
||||
private String recruitName;
|
||||
|
||||
/** 职位名称 */
|
||||
private String posName;
|
||||
|
||||
/** 职位类别 */
|
||||
private String posCategory;
|
||||
|
||||
/** 职位描述 */
|
||||
private String posDesc;
|
||||
|
||||
/** 应聘人员姓名 */
|
||||
private String candName;
|
||||
|
||||
/** 应聘人员学历 */
|
||||
private String candEdu;
|
||||
|
||||
/** 应聘人员证件号码 */
|
||||
private String candId;
|
||||
|
||||
/** 应聘人员毕业院校 */
|
||||
private String candSchool;
|
||||
|
||||
/** 应聘人员专业 */
|
||||
private String candMajor;
|
||||
|
||||
/** 应聘人员毕业年月 */
|
||||
private String candGrad;
|
||||
|
||||
/** 录用情况:录用、未录用、放弃 */
|
||||
private String admitStatus;
|
||||
|
||||
/** 面试官1姓名 */
|
||||
private String interviewerName1;
|
||||
|
||||
/** 面试官1工号 */
|
||||
private String interviewerId1;
|
||||
|
||||
/** 面试官2姓名 */
|
||||
private String interviewerName2;
|
||||
|
||||
/** 面试官2工号 */
|
||||
private String interviewerId2;
|
||||
|
||||
/** 记录创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 记录更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录对象 ccdi_staff_transfer
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_staff_transfer")
|
||||
public class CcdiStaffTransfer implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 员工ID,关联ccdi_base_staff.staff_id */
|
||||
private Long staffId;
|
||||
|
||||
/** 调动类型 */
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门ID */
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动前部门 */
|
||||
private String deptNameBefore;
|
||||
|
||||
/** 调动前职级 */
|
||||
private String gradeBefore;
|
||||
|
||||
/** 调动前岗位 */
|
||||
private String positionBefore;
|
||||
|
||||
/** 调动前薪酬等级 */
|
||||
private String salaryLevelBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动后部门 */
|
||||
private String deptNameAfter;
|
||||
|
||||
/** 调动后职级 */
|
||||
private String gradeAfter;
|
||||
|
||||
/** 调动后岗位 */
|
||||
private String positionAfter;
|
||||
|
||||
/** 调动后薪酬等级 */
|
||||
private String salaryLevelAfter;
|
||||
|
||||
/** 调动日期 */
|
||||
private Date transferDate;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工信息新增 DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Data
|
||||
public class CcdiBaseStaffAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 姓名 */
|
||||
@NotBlank(message = "姓名不能为空")
|
||||
@Size(max = 100, message = "姓名长度不能超过100个字符")
|
||||
private String name;
|
||||
|
||||
/** 员工ID */
|
||||
@NotNull(message = "员工ID不能为空")
|
||||
private Long staffId;
|
||||
|
||||
/** 所属部门ID */
|
||||
@NotNull(message = "所属部门不能为空")
|
||||
private Long deptId;
|
||||
|
||||
/** 身份证号 */
|
||||
@NotBlank(message = "身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "身份证号格式不正确")
|
||||
private String idCard;
|
||||
|
||||
/** 电话 */
|
||||
@NotBlank(message = "电话不能为空")
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确")
|
||||
private String phone;
|
||||
|
||||
/** 入职时间 */
|
||||
private Date hireDate;
|
||||
|
||||
/** 状态 */
|
||||
@NotBlank(message = "状态不能为空")
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工信息编辑 DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Data
|
||||
public class CcdiBaseStaffEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID */
|
||||
@NotNull(message = "员工ID不能为空")
|
||||
private Long staffId;
|
||||
|
||||
/** 姓名 */
|
||||
@Size(max = 100, message = "姓名长度不能超过100个字符")
|
||||
private String name;
|
||||
|
||||
/** 所属部门ID */
|
||||
@NotNull(message = "所属部门不能为空")
|
||||
private Long deptId;
|
||||
|
||||
/** 身份证号 */
|
||||
@NotBlank(message = "身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "身份证号格式不正确")
|
||||
private String idCard;
|
||||
|
||||
/** 电话 */
|
||||
@NotBlank(message = "电话不能为空")
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确")
|
||||
private String phone;
|
||||
|
||||
/** 入职时间 */
|
||||
private Date hireDate;
|
||||
|
||||
/** 状态 */
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工信息查询 DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Data
|
||||
public class CcdiBaseStaffQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 姓名(模糊查询) */
|
||||
private String name;
|
||||
|
||||
/** 员工ID(精确查询) */
|
||||
private Long staffId;
|
||||
|
||||
/** 所属部门ID */
|
||||
private Long deptId;
|
||||
|
||||
/** 身份证号(模糊查询) */
|
||||
private String idCard;
|
||||
|
||||
/** 状态 */
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户实体关联信息新增")
|
||||
public class CcdiCustEnterpriseRelationAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@NotBlank(message = "身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "身份证号格式不正确")
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Size(max = 100, message = "关联人在企业的职务长度不能超过100个字符")
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@NotBlank(message = "统一社会信用代码不能为空")
|
||||
@Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", message = "统一社会信用代码格式不正确")
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@NotBlank(message = "企业名称不能为空")
|
||||
@Size(max = 200, message = "企业名称长度不能超过200个字符")
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息编辑DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户实体关联信息编辑")
|
||||
public class CcdiCustEnterpriseRelationEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@NotNull(message = "主键ID不能为空")
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 身份证号(不可修改) */
|
||||
@Schema(description = "身份证号(不可修改)")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Size(max = 100, message = "关联人在企业的职务长度不能超过100个字符")
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码(不可修改) */
|
||||
@Schema(description = "统一社会信用代码(不可修改)")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@NotBlank(message = "企业名称不能为空")
|
||||
@Size(max = 200, message = "企业名称长度不能超过200个字符")
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户实体关联信息查询条件")
|
||||
public class CcdiCustEnterpriseRelationQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户家庭关系新增")
|
||||
public class CcdiCustFmyRelationAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@NotBlank(message = "信贷客户身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$", message = "信贷客户身份证号格式不正确")
|
||||
@Schema(description = "信贷客户身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@NotBlank(message = "关系类型不能为空")
|
||||
@Size(max = 50, message = "关系类型长度不能超过50个字符")
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@NotBlank(message = "关系人姓名不能为空")
|
||||
@Size(max = 100, message = "关系人姓名长度不能超过100个字符")
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Pattern(regexp = "^[MFO]$", message = "性别只能是M、F或O")
|
||||
@Schema(description = "性别:M-男,F-女,O-其他")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "出生日期")
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@NotBlank(message = "关系人证件类型不能为空")
|
||||
@Size(max = 50, message = "关系人证件类型长度不能超过50个字符")
|
||||
@Schema(description = "关系人证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@NotBlank(message = "关系人证件号码不能为空")
|
||||
@Size(max = 100, message = "关系人证件号码长度不能超过100个字符")
|
||||
@Schema(description = "关系人证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码1格式不正确")
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码2格式不正确")
|
||||
@Schema(description = "手机号码2")
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@Size(max = 50, message = "微信名称1长度不能超过50个字符")
|
||||
@Schema(description = "微信名称1")
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@Size(max = 50, message = "微信名称2长度不能超过50个字符")
|
||||
@Schema(description = "微信名称2")
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@Size(max = 50, message = "微信名称3长度不能超过50个字符")
|
||||
@Schema(description = "微信名称3")
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@Size(max = 500, message = "详细联系地址长度不能超过500个字符")
|
||||
@Schema(description = "详细联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@Size(max = 500, message = "关系详细描述长度不能超过500个字符")
|
||||
@Schema(description = "关系详细描述")
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期")
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "失效日期")
|
||||
private Date invalidDate;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 备注 */
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系编辑DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户家庭关系编辑")
|
||||
public class CcdiCustFmyRelationEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@NotNull(message = "ID不能为空")
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@NotBlank(message = "信贷客户身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$", message = "信贷客户身份证号格式不正确")
|
||||
@Schema(description = "信贷客户身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@NotBlank(message = "关系类型不能为空")
|
||||
@Size(max = 50, message = "关系类型长度不能超过50个字符")
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@NotBlank(message = "关系人姓名不能为空")
|
||||
@Size(max = 100, message = "关系人姓名长度不能超过100个字符")
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Pattern(regexp = "^[MFO]$", message = "性别只能是M、F或O")
|
||||
@Schema(description = "性别:M-男,F-女,O-其他")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "出生日期")
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@NotBlank(message = "关系人证件类型不能为空")
|
||||
@Size(max = 50, message = "关系人证件类型长度不能超过50个字符")
|
||||
@Schema(description = "关系人证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@NotBlank(message = "关系人证件号码不能为空")
|
||||
@Size(max = 100, message = "关系人证件号码长度不能超过100个字符")
|
||||
@Schema(description = "关系人证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码1格式不正确")
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码2格式不正确")
|
||||
@Schema(description = "手机号码2")
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@Size(max = 50, message = "微信名称1长度不能超过50个字符")
|
||||
@Schema(description = "微信名称1")
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@Size(max = 50, message = "微信名称2长度不能超过50个字符")
|
||||
@Schema(description = "微信名称2")
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@Size(max = 50, message = "微信名称3长度不能超过50个字符")
|
||||
@Schema(description = "微信名称3")
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@Size(max = 500, message = "详细联系地址长度不能超过500个字符")
|
||||
@Schema(description = "详细联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@Size(max = 500, message = "关系详细描述长度不能超过500个字符")
|
||||
@Schema(description = "关系详细描述")
|
||||
private String relationDesc;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 生效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期")
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "失效日期")
|
||||
private Date invalidDate;
|
||||
|
||||
/** 备注 */
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户家庭关系查询")
|
||||
public class CcdiCustFmyRelationQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@Schema(description = "信贷客户身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 生效日期开始 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期开始")
|
||||
private Date effectiveDateStart;
|
||||
|
||||
/** 生效日期结束 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期结束")
|
||||
private Date effectiveDateEnd;
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 实体中介新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "实体中介新增DTO")
|
||||
public class CcdiIntermediaryEntityAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "机构名称")
|
||||
@NotBlank(message = "机构名称不能为空")
|
||||
@Size(max = 200, message = "机构名称长度不能超过200个字符")
|
||||
private String enterpriseName;
|
||||
|
||||
@Schema(description = "统一社会信用代码")
|
||||
@Size(max = 50, message = "统一社会信用代码长度不能超过50个字符")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "主体类型")
|
||||
@Size(max = 50, message = "主体类型长度不能超过50个字符")
|
||||
private String enterpriseType;
|
||||
|
||||
@Schema(description = "企业性质")
|
||||
@Size(max = 50, message = "企业性质长度不能超过50个字符")
|
||||
private String enterpriseNature;
|
||||
|
||||
@Schema(description = "行业分类")
|
||||
@Size(max = 100, message = "行业分类长度不能超过100个字符")
|
||||
private String industryClass;
|
||||
|
||||
@Schema(description = "所属行业")
|
||||
@Size(max = 100, message = "所属行业长度不能超过100个字符")
|
||||
private String industryName;
|
||||
|
||||
@Schema(description = "成立日期")
|
||||
private Date establishDate;
|
||||
|
||||
@Schema(description = "注册地址")
|
||||
@Size(max = 500, message = "注册地址长度不能超过500个字符")
|
||||
private String registerAddress;
|
||||
|
||||
@Schema(description = "法定代表人")
|
||||
@Size(max = 100, message = "法定代表人长度不能超过100个字符")
|
||||
private String legalRepresentative;
|
||||
|
||||
@Schema(description = "法定代表人证件类型")
|
||||
@Size(max = 50, message = "法定代表人证件类型长度不能超过50个字符")
|
||||
private String legalCertType;
|
||||
|
||||
@Schema(description = "法定代表人证件号码")
|
||||
@Size(max = 50, message = "法定代表人证件号码长度不能超过50个字符")
|
||||
private String legalCertNo;
|
||||
|
||||
@Schema(description = "股东1")
|
||||
@Size(max = 100, message = "股东1长度不能超过100个字符")
|
||||
private String shareholder1;
|
||||
|
||||
@Schema(description = "股东2")
|
||||
@Size(max = 100, message = "股东2长度不能超过100个字符")
|
||||
private String shareholder2;
|
||||
|
||||
@Schema(description = "股东3")
|
||||
@Size(max = 100, message = "股东3长度不能超过100个字符")
|
||||
private String shareholder3;
|
||||
|
||||
@Schema(description = "股东4")
|
||||
@Size(max = 100, message = "股东4长度不能超过100个字符")
|
||||
private String shareholder4;
|
||||
|
||||
@Schema(description = "股东5")
|
||||
@Size(max = 100, message = "股东5长度不能超过100个字符")
|
||||
private String shareholder5;
|
||||
|
||||
@Schema(description = "备注")
|
||||
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 实体中介修改DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "实体中介修改DTO")
|
||||
public class CcdiIntermediaryEntityEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "统一社会信用代码")
|
||||
@NotBlank(message = "统一社会信用代码不能为空")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "机构名称")
|
||||
@NotBlank(message = "机构名称不能为空")
|
||||
@Size(max = 200, message = "机构名称长度不能超过200个字符")
|
||||
private String enterpriseName;
|
||||
|
||||
@Schema(description = "主体类型")
|
||||
@Size(max = 50, message = "主体类型长度不能超过50个字符")
|
||||
private String enterpriseType;
|
||||
|
||||
@Schema(description = "企业性质")
|
||||
@Size(max = 50, message = "企业性质长度不能超过50个字符")
|
||||
private String enterpriseNature;
|
||||
|
||||
@Schema(description = "行业分类")
|
||||
@Size(max = 100, message = "行业分类长度不能超过100个字符")
|
||||
private String industryClass;
|
||||
|
||||
@Schema(description = "所属行业")
|
||||
@Size(max = 100, message = "所属行业长度不能超过100个字符")
|
||||
private String industryName;
|
||||
|
||||
@Schema(description = "成立日期")
|
||||
private Date establishDate;
|
||||
|
||||
@Schema(description = "注册地址")
|
||||
@Size(max = 500, message = "注册地址长度不能超过500个字符")
|
||||
private String registerAddress;
|
||||
|
||||
@Schema(description = "法定代表人")
|
||||
@Size(max = 100, message = "法定代表人长度不能超过100个字符")
|
||||
private String legalRepresentative;
|
||||
|
||||
@Schema(description = "法定代表人证件类型")
|
||||
@Size(max = 50, message = "法定代表人证件类型长度不能超过50个字符")
|
||||
private String legalCertType;
|
||||
|
||||
@Schema(description = "法定代表人证件号码")
|
||||
@Size(max = 50, message = "法定代表人证件号码长度不能超过50个字符")
|
||||
private String legalCertNo;
|
||||
|
||||
@Schema(description = "股东1")
|
||||
@Size(max = 100, message = "股东1长度不能超过100个字符")
|
||||
private String shareholder1;
|
||||
|
||||
@Schema(description = "股东2")
|
||||
@Size(max = 100, message = "股东2长度不能超过100个字符")
|
||||
private String shareholder2;
|
||||
|
||||
@Schema(description = "股东3")
|
||||
@Size(max = 100, message = "股东3长度不能超过100个字符")
|
||||
private String shareholder3;
|
||||
|
||||
@Schema(description = "股东4")
|
||||
@Size(max = 100, message = "股东4长度不能超过100个字符")
|
||||
private String shareholder4;
|
||||
|
||||
@Schema(description = "股东5")
|
||||
@Size(max = 100, message = "股东5长度不能超过100个字符")
|
||||
private String shareholder5;
|
||||
|
||||
@Schema(description = "备注")
|
||||
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 个人中介新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "个人中介新增DTO")
|
||||
public class CcdiIntermediaryPersonAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "姓名")
|
||||
@NotBlank(message = "姓名不能为空")
|
||||
@Size(max = 100, message = "姓名长度不能超过100个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "人员类型")
|
||||
private String personType;
|
||||
|
||||
@Schema(description = "人员子类型")
|
||||
private String personSubType;
|
||||
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
@Schema(description = "证件类型")
|
||||
private String idType;
|
||||
|
||||
@Schema(description = "证件号码")
|
||||
@NotBlank(message = "证件号码不能为空")
|
||||
@Size(max = 50, message = "证件号码长度不能超过50个字符")
|
||||
private String personId;
|
||||
|
||||
@Schema(description = "手机号码")
|
||||
@Size(max = 20, message = "手机号码长度不能超过20个字符")
|
||||
private String mobile;
|
||||
|
||||
@Schema(description = "微信号")
|
||||
@Size(max = 50, message = "微信号长度不能超过50个字符")
|
||||
private String wechatNo;
|
||||
|
||||
@Schema(description = "联系地址")
|
||||
@Size(max = 200, message = "联系地址长度不能超过200个字符")
|
||||
private String contactAddress;
|
||||
|
||||
@Schema(description = "所在公司")
|
||||
@Size(max = 200, message = "所在公司长度不能超过200个字符")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "企业统一信用码")
|
||||
@Size(max = 50, message = "企业统一信用码长度不能超过50个字符")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "职位")
|
||||
@Size(max = 100, message = "职位长度不能超过100个字符")
|
||||
private String position;
|
||||
|
||||
@Schema(description = "关联人员ID")
|
||||
@Size(max = 50, message = "关联人员ID长度不能超过50个字符")
|
||||
private String relatedNumId;
|
||||
|
||||
@Schema(description = "关联关系")
|
||||
@Size(max = 50, message = "关联关系长度不能超过50个字符")
|
||||
private String relationType;
|
||||
|
||||
|
||||
@Schema(description = "备注")
|
||||
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 个人中介修改DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "个人中介修改DTO")
|
||||
public class CcdiIntermediaryPersonEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "人员ID")
|
||||
@NotBlank(message = "人员ID不能为空")
|
||||
private String bizId;
|
||||
|
||||
@Schema(description = "姓名")
|
||||
@NotBlank(message = "姓名不能为空")
|
||||
@Size(max = 100, message = "姓名长度不能超过100个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "人员类型")
|
||||
private String personType;
|
||||
|
||||
@Schema(description = "人员子类型")
|
||||
private String personSubType;
|
||||
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
@Schema(description = "证件类型")
|
||||
private String idType;
|
||||
|
||||
@Schema(description = "证件号码")
|
||||
@Size(max = 50, message = "证件号码长度不能超过50个字符")
|
||||
private String personId;
|
||||
|
||||
@Schema(description = "手机号码")
|
||||
@Size(max = 20, message = "手机号码长度不能超过20个字符")
|
||||
private String mobile;
|
||||
|
||||
@Schema(description = "微信号")
|
||||
@Size(max = 50, message = "微信号长度不能超过50个字符")
|
||||
private String wechatNo;
|
||||
|
||||
@Schema(description = "联系地址")
|
||||
@Size(max = 200, message = "联系地址长度不能超过200个字符")
|
||||
private String contactAddress;
|
||||
|
||||
@Schema(description = "所在公司")
|
||||
@Size(max = 200, message = "所在公司长度不能超过200个字符")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "企业统一信用码")
|
||||
@Size(max = 50, message = "企业统一信用码长度不能超过50个字符")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "职位")
|
||||
@Size(max = 100, message = "职位长度不能超过100个字符")
|
||||
private String position;
|
||||
|
||||
@Schema(description = "关联人员ID")
|
||||
@Size(max = 50, message = "关联人员ID长度不能超过50个字符")
|
||||
private String relatedNumId;
|
||||
|
||||
@Schema(description = "关联关系")
|
||||
@Size(max = 50, message = "关联关系长度不能超过50个字符")
|
||||
private String relationType;
|
||||
|
||||
@Schema(description = "备注")
|
||||
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 中介查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "中介查询DTO")
|
||||
public class CcdiIntermediaryQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "姓名/机构名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "证件号/统一社会信用代码")
|
||||
private String certificateNo;
|
||||
|
||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
||||
private String intermediaryType;
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购交易信息新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购交易信息新增")
|
||||
public class CcdiPurchaseTransactionAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 采购事项ID */
|
||||
@NotBlank(message = "采购事项ID不能为空")
|
||||
@Size(max = 32, message = "采购事项ID长度不能超过32个字符")
|
||||
@Schema(description = "采购事项ID")
|
||||
private String purchaseId;
|
||||
|
||||
/** 采购类别 */
|
||||
@NotBlank(message = "采购类别不能为空")
|
||||
@Size(max = 50, message = "采购类别长度不能超过50个字符")
|
||||
@Schema(description = "采购类别")
|
||||
private String purchaseCategory;
|
||||
|
||||
/** 项目名称 */
|
||||
@Size(max = 200, message = "项目名称长度不能超过200个字符")
|
||||
@Schema(description = "项目名称")
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
@NotBlank(message = "标的物名称不能为空")
|
||||
@Size(max = 200, message = "标的物名称长度不能超过200个字符")
|
||||
@Schema(description = "标的物名称")
|
||||
private String subjectName;
|
||||
|
||||
/** 标的物描述 */
|
||||
@Schema(description = "标的物描述")
|
||||
private String subjectDesc;
|
||||
|
||||
/** 采购数量 */
|
||||
@NotNull(message = "采购数量不能为空")
|
||||
@DecimalMin(value = "0.0001", message = "采购数量必须大于0")
|
||||
@Schema(description = "采购数量")
|
||||
private BigDecimal purchaseQty;
|
||||
|
||||
/** 预算金额 */
|
||||
@NotNull(message = "预算金额不能为空")
|
||||
@DecimalMin(value = "0.01", message = "预算金额必须大于0")
|
||||
@Schema(description = "预算金额")
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/** 中标金额 */
|
||||
@DecimalMin(value = "0.01", message = "中标金额必须大于0")
|
||||
@Schema(description = "中标金额")
|
||||
private BigDecimal bidAmount;
|
||||
|
||||
/** 实际采购金额 */
|
||||
@DecimalMin(value = "0.01", message = "实际采购金额必须大于0")
|
||||
@Schema(description = "实际采购金额")
|
||||
private BigDecimal actualAmount;
|
||||
|
||||
/** 合同金额 */
|
||||
@DecimalMin(value = "0.01", message = "合同金额必须大于0")
|
||||
@Schema(description = "合同金额")
|
||||
private BigDecimal contractAmount;
|
||||
|
||||
/** 结算金额 */
|
||||
@DecimalMin(value = "0.01", message = "结算金额必须大于0")
|
||||
@Schema(description = "结算金额")
|
||||
private BigDecimal settlementAmount;
|
||||
|
||||
/** 采购方式 */
|
||||
@NotBlank(message = "采购方式不能为空")
|
||||
@Size(max = 50, message = "采购方式长度不能超过50个字符")
|
||||
@Schema(description = "采购方式")
|
||||
private String purchaseMethod;
|
||||
|
||||
/** 中标供应商名称 */
|
||||
@Size(max = 200, message = "中标供应商名称长度不能超过200个字符")
|
||||
@Schema(description = "中标供应商名称")
|
||||
private String supplierName;
|
||||
|
||||
/** 供应商联系人 */
|
||||
@Size(max = 50, message = "供应商联系人长度不能超过50个字符")
|
||||
@Schema(description = "供应商联系人")
|
||||
private String contactPerson;
|
||||
|
||||
/** 供应商联系电话 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$|^0\\d{2,3}-?\\d{7,8}$", message = "供应商联系电话格式不正确")
|
||||
@Schema(description = "供应商联系电话")
|
||||
private String contactPhone;
|
||||
|
||||
/** 供应商统一信用代码 */
|
||||
@Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", message = "供应商统一信用代码格式不正确")
|
||||
@Schema(description = "供应商统一信用代码")
|
||||
private String supplierUscc;
|
||||
|
||||
/** 供应商银行账户 */
|
||||
@Size(max = 50, message = "供应商银行账户长度不能超过50个字符")
|
||||
@Schema(description = "供应商银行账户")
|
||||
private String supplierBankAccount;
|
||||
|
||||
/** 采购申请日期(或立项日期) */
|
||||
@NotNull(message = "采购申请日期不能为空")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购申请日期")
|
||||
private Date applyDate;
|
||||
|
||||
/** 采购计划批准日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购计划批准日期")
|
||||
private Date planApproveDate;
|
||||
|
||||
/** 采购公告发布日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购公告发布日期")
|
||||
private Date announceDate;
|
||||
|
||||
/** 开标日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "开标日期")
|
||||
private Date bidOpenDate;
|
||||
|
||||
/** 合同签订日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "合同签订日期")
|
||||
private Date contractSignDate;
|
||||
|
||||
/** 预计交货日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "预计交货日期")
|
||||
private Date expectedDeliveryDate;
|
||||
|
||||
/** 实际交货日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "实际交货日期")
|
||||
private Date actualDeliveryDate;
|
||||
|
||||
/** 验收日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "验收日期")
|
||||
private Date acceptanceDate;
|
||||
|
||||
/** 结算日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "结算日期")
|
||||
private Date settlementDate;
|
||||
|
||||
/** 申请人工号 */
|
||||
@NotBlank(message = "申请人工号不能为空")
|
||||
@Pattern(regexp = "^\\d{7}$", message = "申请人工号必须为7位数字")
|
||||
@Schema(description = "申请人工号")
|
||||
private String applicantId;
|
||||
|
||||
/** 申请人姓名 */
|
||||
@NotBlank(message = "申请人姓名不能为空")
|
||||
@Size(max = 50, message = "申请人姓名长度不能超过50个字符")
|
||||
@Schema(description = "申请人姓名")
|
||||
private String applicantName;
|
||||
|
||||
/** 申请部门 */
|
||||
@NotBlank(message = "申请部门不能为空")
|
||||
@Size(max = 100, message = "申请部门长度不能超过100个字符")
|
||||
@Schema(description = "申请部门")
|
||||
private String applyDepartment;
|
||||
|
||||
/** 采购负责人工号 */
|
||||
@Pattern(regexp = "^\\d{7}$", message = "采购负责人工号必须为7位数字")
|
||||
@Schema(description = "采购负责人工号")
|
||||
private String purchaseLeaderId;
|
||||
|
||||
/** 采购负责人姓名 */
|
||||
@Size(max = 50, message = "采购负责人姓名长度不能超过50个字符")
|
||||
@Schema(description = "采购负责人姓名")
|
||||
private String purchaseLeaderName;
|
||||
|
||||
/** 采购部门 */
|
||||
@Size(max = 100, message = "采购部门长度不能超过100个字符")
|
||||
@Schema(description = "采购部门")
|
||||
private String purchaseDepartment;
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购交易信息编辑DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购交易信息编辑")
|
||||
public class CcdiPurchaseTransactionEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 采购事项ID */
|
||||
@NotBlank(message = "采购事项ID不能为空")
|
||||
@Size(max = 32, message = "采购事项ID长度不能超过32个字符")
|
||||
@Schema(description = "采购事项ID")
|
||||
private String purchaseId;
|
||||
|
||||
/** 采购类别 */
|
||||
@NotBlank(message = "采购类别不能为空")
|
||||
@Size(max = 50, message = "采购类别长度不能超过50个字符")
|
||||
@Schema(description = "采购类别")
|
||||
private String purchaseCategory;
|
||||
|
||||
/** 项目名称 */
|
||||
@Size(max = 200, message = "项目名称长度不能超过200个字符")
|
||||
@Schema(description = "项目名称")
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
@NotBlank(message = "标的物名称不能为空")
|
||||
@Size(max = 200, message = "标的物名称长度不能超过200个字符")
|
||||
@Schema(description = "标的物名称")
|
||||
private String subjectName;
|
||||
|
||||
/** 标的物描述 */
|
||||
@Schema(description = "标的物描述")
|
||||
private String subjectDesc;
|
||||
|
||||
/** 采购数量 */
|
||||
@NotNull(message = "采购数量不能为空")
|
||||
@DecimalMin(value = "0.0001", message = "采购数量必须大于0")
|
||||
@Schema(description = "采购数量")
|
||||
private BigDecimal purchaseQty;
|
||||
|
||||
/** 预算金额 */
|
||||
@NotNull(message = "预算金额不能为空")
|
||||
@DecimalMin(value = "0.01", message = "预算金额必须大于0")
|
||||
@Schema(description = "预算金额")
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/** 中标金额 */
|
||||
@DecimalMin(value = "0.01", message = "中标金额必须大于0")
|
||||
@Schema(description = "中标金额")
|
||||
private BigDecimal bidAmount;
|
||||
|
||||
/** 实际采购金额 */
|
||||
@DecimalMin(value = "0.01", message = "实际采购金额必须大于0")
|
||||
@Schema(description = "实际采购金额")
|
||||
private BigDecimal actualAmount;
|
||||
|
||||
/** 合同金额 */
|
||||
@DecimalMin(value = "0.01", message = "合同金额必须大于0")
|
||||
@Schema(description = "合同金额")
|
||||
private BigDecimal contractAmount;
|
||||
|
||||
/** 结算金额 */
|
||||
@DecimalMin(value = "0.01", message = "结算金额必须大于0")
|
||||
@Schema(description = "结算金额")
|
||||
private BigDecimal settlementAmount;
|
||||
|
||||
/** 采购方式 */
|
||||
@NotBlank(message = "采购方式不能为空")
|
||||
@Size(max = 50, message = "采购方式长度不能超过50个字符")
|
||||
@Schema(description = "采购方式")
|
||||
private String purchaseMethod;
|
||||
|
||||
/** 中标供应商名称 */
|
||||
@Size(max = 200, message = "中标供应商名称长度不能超过200个字符")
|
||||
@Schema(description = "中标供应商名称")
|
||||
private String supplierName;
|
||||
|
||||
/** 供应商联系人 */
|
||||
@Size(max = 50, message = "供应商联系人长度不能超过50个字符")
|
||||
@Schema(description = "供应商联系人")
|
||||
private String contactPerson;
|
||||
|
||||
/** 供应商联系电话 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$|^0\\d{2,3}-?\\d{7,8}$", message = "供应商联系电话格式不正确")
|
||||
@Schema(description = "供应商联系电话")
|
||||
private String contactPhone;
|
||||
|
||||
/** 供应商统一信用代码 */
|
||||
@Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", message = "供应商统一信用代码格式不正确")
|
||||
@Schema(description = "供应商统一信用代码")
|
||||
private String supplierUscc;
|
||||
|
||||
/** 供应商银行账户 */
|
||||
@Size(max = 50, message = "供应商银行账户长度不能超过50个字符")
|
||||
@Schema(description = "供应商银行账户")
|
||||
private String supplierBankAccount;
|
||||
|
||||
/** 采购申请日期(或立项日期) */
|
||||
@NotNull(message = "采购申请日期不能为空")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购申请日期")
|
||||
private Date applyDate;
|
||||
|
||||
/** 采购计划批准日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购计划批准日期")
|
||||
private Date planApproveDate;
|
||||
|
||||
/** 采购公告发布日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购公告发布日期")
|
||||
private Date announceDate;
|
||||
|
||||
/** 开标日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "开标日期")
|
||||
private Date bidOpenDate;
|
||||
|
||||
/** 合同签订日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "合同签订日期")
|
||||
private Date contractSignDate;
|
||||
|
||||
/** 预计交货日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "预计交货日期")
|
||||
private Date expectedDeliveryDate;
|
||||
|
||||
/** 实际交货日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "实际交货日期")
|
||||
private Date actualDeliveryDate;
|
||||
|
||||
/** 验收日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "验收日期")
|
||||
private Date acceptanceDate;
|
||||
|
||||
/** 结算日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "结算日期")
|
||||
private Date settlementDate;
|
||||
|
||||
/** 申请人工号 */
|
||||
@NotBlank(message = "申请人工号不能为空")
|
||||
@Pattern(regexp = "^\\d{7}$", message = "申请人工号必须为7位数字")
|
||||
@Schema(description = "申请人工号")
|
||||
private String applicantId;
|
||||
|
||||
/** 申请人姓名 */
|
||||
@NotBlank(message = "申请人姓名不能为空")
|
||||
@Size(max = 50, message = "申请人姓名长度不能超过50个字符")
|
||||
@Schema(description = "申请人姓名")
|
||||
private String applicantName;
|
||||
|
||||
/** 申请部门 */
|
||||
@NotBlank(message = "申请部门不能为空")
|
||||
@Size(max = 100, message = "申请部门长度不能超过100个字符")
|
||||
@Schema(description = "申请部门")
|
||||
private String applyDepartment;
|
||||
|
||||
/** 采购负责人工号 */
|
||||
@Pattern(regexp = "^\\d{7}$", message = "采购负责人工号必须为7位数字")
|
||||
@Schema(description = "采购负责人工号")
|
||||
private String purchaseLeaderId;
|
||||
|
||||
/** 采购负责人姓名 */
|
||||
@Size(max = 50, message = "采购负责人姓名长度不能超过50个字符")
|
||||
@Schema(description = "采购负责人姓名")
|
||||
private String purchaseLeaderName;
|
||||
|
||||
/** 采购部门 */
|
||||
@Size(max = 100, message = "采购部门长度不能超过100个字符")
|
||||
@Schema(description = "采购部门")
|
||||
private String purchaseDepartment;
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购交易信息查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购交易信息查询条件")
|
||||
public class CcdiPurchaseTransactionQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 项目名称 */
|
||||
@Schema(description = "项目名称")
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
@Schema(description = "标的物名称")
|
||||
private String subjectName;
|
||||
|
||||
/** 申请人姓名 */
|
||||
@Schema(description = "申请人姓名")
|
||||
private String applicantName;
|
||||
|
||||
/** 申请人工号 */
|
||||
@Schema(description = "申请人工号")
|
||||
private String applicantId;
|
||||
|
||||
/** 申请日期-开始 */
|
||||
@Schema(description = "申请日期-开始")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date applyDateStart;
|
||||
|
||||
/** 申请日期-结束 */
|
||||
@Schema(description = "申请日期-结束")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date applyDateEnd;
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工实体关系信息新增")
|
||||
public class CcdiStaffEnterpriseRelationAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@NotBlank(message = "身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "身份证号格式不正确")
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Size(max = 100, message = "关联人在企业的职务长度不能超过100个字符")
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@NotBlank(message = "统一社会信用代码不能为空")
|
||||
@Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", message = "统一社会信用代码格式不正确")
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@NotBlank(message = "企业名称不能为空")
|
||||
@Size(max = 200, message = "企业名称长度不能超过200个字符")
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Size(max = 50, message = "数据来源长度不能超过50个字符")
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否为员工(0-否 1-是) */
|
||||
@Schema(description = "是否为员工(0-否 1-是)")
|
||||
private Integer isEmployee;
|
||||
|
||||
/** 是否为员工家属(0-否 1-是) */
|
||||
@Schema(description = "是否为员工家属(0-否 1-是)")
|
||||
private Integer isEmpFamily;
|
||||
|
||||
/** 是否为客户(0-否 1-是) */
|
||||
@Schema(description = "是否为客户(0-否 1-是)")
|
||||
private Integer isCustomer;
|
||||
|
||||
/** 是否为客户家属(0-否 1-是) */
|
||||
@Schema(description = "是否为客户家属(0-否 1-是)")
|
||||
private Integer isCustFamily;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息编辑DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工实体关系信息编辑")
|
||||
public class CcdiStaffEnterpriseRelationEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@NotNull(message = "主键ID不能为空")
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号(不可修改)")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Size(max = 100, message = "关联人在企业的职务长度不能超过100个字符")
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码(不可修改)")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@NotBlank(message = "企业名称不能为空")
|
||||
@Size(max = 200, message = "企业名称长度不能超过200个字符")
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Size(max = 50, message = "数据来源长度不能超过50个字符")
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否为员工(0-否 1-是) */
|
||||
@Schema(description = "是否为员工(0-否 1-是)")
|
||||
private Integer isEmployee;
|
||||
|
||||
/** 是否为员工家属(0-否 1-是) */
|
||||
@Schema(description = "是否为员工家属(0-否 1-是)")
|
||||
private Integer isEmpFamily;
|
||||
|
||||
/** 是否为客户(0-否 1-是) */
|
||||
@Schema(description = "是否为客户(0-否 1-是)")
|
||||
private Integer isCustomer;
|
||||
|
||||
/** 是否为客户家属(0-否 1-是) */
|
||||
@Schema(description = "是否为客户家属(0-否 1-是)")
|
||||
private Integer isCustFamily;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工实体关系信息查询条件")
|
||||
public class CcdiStaffEnterpriseRelationQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工亲属关系新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工亲属关系新增")
|
||||
public class CcdiStaffFmyRelationAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工身份证号 */
|
||||
@NotBlank(message = "员工身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$", message = "员工身份证号格式不正确")
|
||||
@Schema(description = "员工身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@NotBlank(message = "关系类型不能为空")
|
||||
@Size(max = 50, message = "关系类型长度不能超过50个字符")
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@NotBlank(message = "关系人姓名不能为空")
|
||||
@Size(max = 100, message = "关系人姓名长度不能超过100个字符")
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Pattern(regexp = "^[MFO]$", message = "性别只能是M、F或O")
|
||||
@Schema(description = "性别:M-男,F-女,O-其他")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "出生日期")
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@NotBlank(message = "关系人证件类型不能为空")
|
||||
@Size(max = 50, message = "关系人证件类型长度不能超过50个字符")
|
||||
@Schema(description = "关系人证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@NotBlank(message = "关系人证件号码不能为空")
|
||||
@Size(max = 100, message = "关系人证件号码长度不能超过100个字符")
|
||||
@Schema(description = "关系人证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码1格式不正确")
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码2格式不正确")
|
||||
@Schema(description = "手机号码2")
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@Size(max = 50, message = "微信名称1长度不能超过50个字符")
|
||||
@Schema(description = "微信名称1")
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@Size(max = 50, message = "微信名称2长度不能超过50个字符")
|
||||
@Schema(description = "微信名称2")
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@Size(max = 50, message = "微信名称3长度不能超过50个字符")
|
||||
@Schema(description = "微信名称3")
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@Size(max = 500, message = "详细联系地址长度不能超过500个字符")
|
||||
@Schema(description = "详细联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@Size(max = 500, message = "关系详细描述长度不能超过500个字符")
|
||||
@Schema(description = "关系详细描述")
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期")
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "失效日期")
|
||||
private Date invalidDate;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 备注 */
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工亲属关系编辑DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工亲属关系编辑")
|
||||
public class CcdiStaffFmyRelationEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@NotNull(message = "ID不能为空")
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 员工身份证号 */
|
||||
@NotBlank(message = "员工身份证号不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$", message = "员工身份证号格式不正确")
|
||||
@Schema(description = "员工身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@NotBlank(message = "关系类型不能为空")
|
||||
@Size(max = 50, message = "关系类型长度不能超过50个字符")
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@NotBlank(message = "关系人姓名不能为空")
|
||||
@Size(max = 100, message = "关系人姓名长度不能超过100个字符")
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Pattern(regexp = "^[MFO]$", message = "性别只能是M、F或O")
|
||||
@Schema(description = "性别:M-男,F-女,O-其他")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "出生日期")
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@NotBlank(message = "关系人证件类型不能为空")
|
||||
@Size(max = 50, message = "关系人证件类型长度不能超过50个字符")
|
||||
@Schema(description = "关系人证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@NotBlank(message = "关系人证件号码不能为空")
|
||||
@Size(max = 100, message = "关系人证件号码长度不能超过100个字符")
|
||||
@Schema(description = "关系人证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码1格式不正确")
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码2格式不正确")
|
||||
@Schema(description = "手机号码2")
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@Size(max = 50, message = "微信名称1长度不能超过50个字符")
|
||||
@Schema(description = "微信名称1")
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@Size(max = 50, message = "微信名称2长度不能超过50个字符")
|
||||
@Schema(description = "微信名称2")
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@Size(max = 50, message = "微信名称3长度不能超过50个字符")
|
||||
@Schema(description = "微信名称3")
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@Size(max = 500, message = "详细联系地址长度不能超过500个字符")
|
||||
@Schema(description = "详细联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@Size(max = 500, message = "关系详细描述长度不能超过500个字符")
|
||||
@Schema(description = "关系详细描述")
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期")
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "失效日期")
|
||||
private Date invalidDate;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 备注 */
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工亲属关系查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工亲属关系查询")
|
||||
public class CcdiStaffFmyRelationQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工身份证号 */
|
||||
@Schema(description = "员工身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 员工姓名 */
|
||||
@Schema(description = "员工姓名")
|
||||
private String personName;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 生效日期开始 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期开始")
|
||||
private Date effectiveDateStart;
|
||||
|
||||
/** 生效日期结束 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期结束")
|
||||
private Date effectiveDateEnd;
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.ruoyi.info.collection.annotation.EnumValid;
|
||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工招聘信息新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffRecruitmentAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 招聘项目编号 */
|
||||
@NotBlank(message = "招聘项目编号不能为空")
|
||||
@Size(max = 32, message = "招聘项目编号长度不能超过32个字符")
|
||||
private String recruitId;
|
||||
|
||||
/** 招聘项目名称 */
|
||||
@NotBlank(message = "招聘项目名称不能为空")
|
||||
@Size(max = 100, message = "招聘项目名称长度不能超过100个字符")
|
||||
private String recruitName;
|
||||
|
||||
/** 职位名称 */
|
||||
@NotBlank(message = "职位名称不能为空")
|
||||
@Size(max = 100, message = "职位名称长度不能超过100个字符")
|
||||
private String posName;
|
||||
|
||||
/** 职位类别 */
|
||||
@NotBlank(message = "职位类别不能为空")
|
||||
@Size(max = 50, message = "职位类别长度不能超过50个字符")
|
||||
private String posCategory;
|
||||
|
||||
/** 职位描述 */
|
||||
@NotBlank(message = "职位描述不能为空")
|
||||
private String posDesc;
|
||||
|
||||
/** 应聘人员姓名 */
|
||||
@NotBlank(message = "应聘人员姓名不能为空")
|
||||
@Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
|
||||
private String candName;
|
||||
|
||||
/** 应聘人员学历 */
|
||||
@NotBlank(message = "应聘人员学历不能为空")
|
||||
@Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
|
||||
private String candEdu;
|
||||
|
||||
/** 应聘人员证件号码 */
|
||||
@NotBlank(message = "证件号码不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "证件号码格式不正确")
|
||||
private String candId;
|
||||
|
||||
/** 应聘人员毕业院校 */
|
||||
@NotBlank(message = "应聘人员毕业院校不能为空")
|
||||
@Size(max = 50, message = "应聘人员毕业院校长度不能超过50个字符")
|
||||
private String candSchool;
|
||||
|
||||
/** 应聘人员专业 */
|
||||
@NotBlank(message = "应聘人员专业不能为空")
|
||||
@Size(max = 30, message = "应聘人员专业长度不能超过30个字符")
|
||||
private String candMajor;
|
||||
|
||||
/** 应聘人员毕业年月 */
|
||||
@NotBlank(message = "应聘人员毕业年月不能为空")
|
||||
@Pattern(regexp = "^((19|20)\\d{2})(0[1-9]|1[0-2])$", message = "毕业年月格式不正确,应为YYYYMM")
|
||||
private String candGrad;
|
||||
|
||||
/** 录用情况:录用、未录用、放弃 */
|
||||
@NotBlank(message = "录用情况不能为空")
|
||||
@EnumValid(enumClass = AdmitStatus.class, message = "录用情况状态值不合法")
|
||||
private String admitStatus;
|
||||
|
||||
/** 面试官1姓名 */
|
||||
@Size(max = 20, message = "面试官1姓名长度不能超过20个字符")
|
||||
private String interviewerName1;
|
||||
|
||||
/** 面试官1工号 */
|
||||
@Size(max = 10, message = "面试官1工号长度不能超过10个字符")
|
||||
private String interviewerId1;
|
||||
|
||||
/** 面试官2姓名 */
|
||||
@Size(max = 20, message = "面试官2姓名长度不能超过20个字符")
|
||||
private String interviewerName2;
|
||||
|
||||
/** 面试官2工号 */
|
||||
@Size(max = 10, message = "面试官2工号长度不能超过10个字符")
|
||||
private String interviewerId2;
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.ruoyi.info.collection.annotation.EnumValid;
|
||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工招聘信息编辑DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffRecruitmentEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 招聘项目编号 */
|
||||
@NotNull(message = "招聘项目编号不能为空")
|
||||
private String recruitId;
|
||||
|
||||
/** 招聘项目名称 */
|
||||
@Size(max = 100, message = "招聘项目名称长度不能超过100个字符")
|
||||
private String recruitName;
|
||||
|
||||
/** 职位名称 */
|
||||
@Size(max = 100, message = "职位名称长度不能超过100个字符")
|
||||
private String posName;
|
||||
|
||||
/** 职位类别 */
|
||||
@Size(max = 50, message = "职位类别长度不能超过50个字符")
|
||||
private String posCategory;
|
||||
|
||||
/** 职位描述 */
|
||||
private String posDesc;
|
||||
|
||||
/** 应聘人员姓名 */
|
||||
@Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
|
||||
private String candName;
|
||||
|
||||
/** 应聘人员学历 */
|
||||
@Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
|
||||
private String candEdu;
|
||||
|
||||
/** 应聘人员证件号码 */
|
||||
@NotBlank(message = "证件号码不能为空")
|
||||
@Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "证件号码格式不正确")
|
||||
private String candId;
|
||||
|
||||
/** 应聘人员毕业院校 */
|
||||
@Size(max = 50, message = "应聘人员毕业院校长度不能超过50个字符")
|
||||
private String candSchool;
|
||||
|
||||
/** 应聘人员专业 */
|
||||
@Size(max = 30, message = "应聘人员专业长度不能超过30个字符")
|
||||
private String candMajor;
|
||||
|
||||
/** 应聘人员毕业年月 */
|
||||
@Pattern(regexp = "^((19|20)\\d{2})(0[1-9]|1[0-2])$", message = "毕业年月格式不正确,应为YYYYMM")
|
||||
private String candGrad;
|
||||
|
||||
/** 录用情况:录用、未录用、放弃 */
|
||||
@EnumValid(enumClass = AdmitStatus.class, message = "录用情况状态值不合法")
|
||||
private String admitStatus;
|
||||
|
||||
/** 面试官1姓名 */
|
||||
@Size(max = 20, message = "面试官1姓名长度不能超过20个字符")
|
||||
private String interviewerName1;
|
||||
|
||||
/** 面试官1工号 */
|
||||
@Size(max = 10, message = "面试官1工号长度不能超过10个字符")
|
||||
private String interviewerId1;
|
||||
|
||||
/** 面试官2姓名 */
|
||||
@Size(max = 20, message = "面试官2姓名长度不能超过20个字符")
|
||||
private String interviewerName2;
|
||||
|
||||
/** 面试官2工号 */
|
||||
@Size(max = 10, message = "面试官2工号长度不能超过10个字符")
|
||||
private String interviewerId2;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工招聘信息查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffRecruitmentQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 招聘项目名称(模糊查询) */
|
||||
private String recruitName;
|
||||
|
||||
/** 职位名称(模糊查询) */
|
||||
private String posName;
|
||||
|
||||
/** 候选人姓名(模糊查询) */
|
||||
private String candName;
|
||||
|
||||
/** 证件号码(精确查询) */
|
||||
private String candId;
|
||||
|
||||
/** 录用状态(精确查询) */
|
||||
private String admitStatus;
|
||||
|
||||
/** 面试官姓名(模糊查询,查询面试官1或2) */
|
||||
private String interviewerName;
|
||||
|
||||
/** 面试官工号(精确查询,查询面试官1或2) */
|
||||
private String interviewerId;
|
||||
|
||||
/** 分页参数 */
|
||||
private Integer pageNum = 1;
|
||||
|
||||
/** 分页参数 */
|
||||
private Integer pageSize = 10;
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录新增DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工调动记录新增")
|
||||
public class CcdiStaffTransferAddDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID */
|
||||
@NotNull(message = "员工ID不能为空")
|
||||
@Schema(description = "员工ID")
|
||||
private Long staffId;
|
||||
|
||||
/** 调动类型 */
|
||||
@NotBlank(message = "调动类型不能为空")
|
||||
@Size(max = 50, message = "调动类型长度不能超过50个字符")
|
||||
@Schema(description = "调动类型")
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
@Size(max = 100, message = "调动子类型长度不能超过100个字符")
|
||||
@Schema(description = "调动子类型")
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门ID */
|
||||
@NotNull(message = "调动前部门ID不能为空")
|
||||
@Schema(description = "调动前部门ID")
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动前部门 */
|
||||
@Size(max = 200, message = "调动前部门长度不能超过200个字符")
|
||||
@Schema(description = "调动前部门")
|
||||
private String deptNameBefore;
|
||||
|
||||
/** 调动前职级 */
|
||||
@Size(max = 50, message = "调动前职级长度不能超过50个字符")
|
||||
@Schema(description = "调动前职级")
|
||||
private String gradeBefore;
|
||||
|
||||
/** 调动前岗位 */
|
||||
@Size(max = 100, message = "调动前岗位长度不能超过100个字符")
|
||||
@Schema(description = "调动前岗位")
|
||||
private String positionBefore;
|
||||
|
||||
/** 调动前薪酬等级 */
|
||||
@Size(max = 50, message = "调动前薪酬等级长度不能超过50个字符")
|
||||
@Schema(description = "调动前薪酬等级")
|
||||
private String salaryLevelBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
@NotNull(message = "调动后部门ID不能为空")
|
||||
@Schema(description = "调动后部门ID")
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动后部门 */
|
||||
@Size(max = 200, message = "调动后部门长度不能超过200个字符")
|
||||
@Schema(description = "调动后部门")
|
||||
private String deptNameAfter;
|
||||
|
||||
/** 调动后职级 */
|
||||
@Size(max = 50, message = "调动后职级长度不能超过50个字符")
|
||||
@Schema(description = "调动后职级")
|
||||
private String gradeAfter;
|
||||
|
||||
/** 调动后岗位 */
|
||||
@Size(max = 100, message = "调动后岗位长度不能超过100个字符")
|
||||
@Schema(description = "调动后岗位")
|
||||
private String positionAfter;
|
||||
|
||||
/** 调动后薪酬等级 */
|
||||
@Size(max = 50, message = "调动后薪酬等级长度不能超过50个字符")
|
||||
@Schema(description = "调动后薪酬等级")
|
||||
private String salaryLevelAfter;
|
||||
|
||||
/** 调动日期 */
|
||||
@NotNull(message = "调动日期不能为空")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "调动日期")
|
||||
private Date transferDate;
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录修改DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工调动记录修改")
|
||||
public class CcdiStaffTransferEditDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@NotNull(message = "主键ID不能为空")
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 员工ID */
|
||||
@NotNull(message = "员工ID不能为空")
|
||||
@Schema(description = "员工ID")
|
||||
private Long staffId;
|
||||
|
||||
/** 调动类型 */
|
||||
@Size(max = 50, message = "调动类型长度不能超过50个字符")
|
||||
@Schema(description = "调动类型")
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
@Size(max = 100, message = "调动子类型长度不能超过100个字符")
|
||||
@Schema(description = "调动子类型")
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门ID */
|
||||
@Schema(description = "调动前部门ID")
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动前部门 */
|
||||
@Size(max = 200, message = "调动前部门长度不能超过200个字符")
|
||||
@Schema(description = "调动前部门")
|
||||
private String deptNameBefore;
|
||||
|
||||
/** 调动前职级 */
|
||||
@Size(max = 50, message = "调动前职级长度不能超过50个字符")
|
||||
@Schema(description = "调动前职级")
|
||||
private String gradeBefore;
|
||||
|
||||
/** 调动前岗位 */
|
||||
@Size(max = 100, message = "调动前岗位长度不能超过100个字符")
|
||||
@Schema(description = "调动前岗位")
|
||||
private String positionBefore;
|
||||
|
||||
/** 调动前薪酬等级 */
|
||||
@Size(max = 50, message = "调动前薪酬等级长度不能超过50个字符")
|
||||
@Schema(description = "调动前薪酬等级")
|
||||
private String salaryLevelBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
@Schema(description = "调动后部门ID")
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动后部门 */
|
||||
@Size(max = 200, message = "调动后部门长度不能超过200个字符")
|
||||
@Schema(description = "调动后部门")
|
||||
private String deptNameAfter;
|
||||
|
||||
/** 调动后职级 */
|
||||
@Size(max = 50, message = "调动后职级长度不能超过50个字符")
|
||||
@Schema(description = "调动后职级")
|
||||
private String gradeAfter;
|
||||
|
||||
/** 调动后岗位 */
|
||||
@Size(max = 100, message = "调动后岗位长度不能超过100个字符")
|
||||
@Schema(description = "调动后岗位")
|
||||
private String positionAfter;
|
||||
|
||||
/** 调动后薪酬等级 */
|
||||
@Size(max = 50, message = "调动后薪酬等级长度不能超过50个字符")
|
||||
@Schema(description = "调动后薪酬等级")
|
||||
private String salaryLevelAfter;
|
||||
|
||||
/** 调动日期 */
|
||||
@NotNull(message = "调动日期不能为空")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "调动日期")
|
||||
private Date transferDate;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工调动记录查询")
|
||||
public class CcdiStaffTransferQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID(模糊查询) */
|
||||
@Schema(description = "员工ID")
|
||||
private Long staffId;
|
||||
|
||||
/** 员工姓名(模糊查询) */
|
||||
@Schema(description = "员工姓名")
|
||||
private String staffName;
|
||||
|
||||
/** 调动类型(精确查询) */
|
||||
@Schema(description = "调动类型")
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
@Schema(description = "调动子类型")
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门ID */
|
||||
@Schema(description = "调动前部门ID")
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
@Schema(description = "调动后部门ID")
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动日期开始 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "调动日期开始")
|
||||
private Date transferDateStart;
|
||||
|
||||
/** 调动日期结束 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "调动日期结束")
|
||||
private Date transferDateEnd;
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录唯一键DTO
|
||||
* 用于唯一性校验:员工ID + 调动前部门ID + 调动后部门ID + 调动日期
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工调动记录唯一键")
|
||||
public class TransferUniqueKey implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 员工ID
|
||||
*/
|
||||
@Schema(description = "员工ID")
|
||||
private Long staffId;
|
||||
|
||||
/**
|
||||
* 调动前部门ID
|
||||
*/
|
||||
@Schema(description = "调动前部门ID")
|
||||
private Long deptIdBefore;
|
||||
|
||||
/**
|
||||
* 调动后部门ID
|
||||
*/
|
||||
@Schema(description = "调动后部门ID")
|
||||
private Long deptIdAfter;
|
||||
|
||||
/**
|
||||
* 调动日期
|
||||
*/
|
||||
@Schema(description = "调动日期")
|
||||
private Date transferDate;
|
||||
|
||||
/**
|
||||
* 生成唯一标识字符串
|
||||
* 格式: staffId_deptIdBefore_deptIdAfter_transferDate的时间戳
|
||||
*
|
||||
* @return 唯一标识字符串
|
||||
*/
|
||||
public String toUniqueString() {
|
||||
return staffId + "_" +
|
||||
deptIdBefore + "_" +
|
||||
deptIdAfter + "_" +
|
||||
(transferDate != null ? transferDate.getTime() : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从AddDTO构建唯一键
|
||||
*
|
||||
* @param addDTO 新增DTO
|
||||
* @return 唯一键
|
||||
*/
|
||||
public static TransferUniqueKey from(CcdiStaffTransferAddDTO addDTO) {
|
||||
TransferUniqueKey key = new TransferUniqueKey();
|
||||
key.setStaffId(addDTO.getStaffId());
|
||||
key.setDeptIdBefore(addDTO.getDeptIdBefore());
|
||||
key.setDeptIdAfter(addDTO.getDeptIdAfter());
|
||||
key.setTransferDate(addDTO.getTransferDate());
|
||||
return key;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从EditDTO构建唯一键
|
||||
*
|
||||
* @param editDTO 编辑DTO
|
||||
* @return 唯一键
|
||||
*/
|
||||
public static TransferUniqueKey from(CcdiStaffTransferEditDTO editDTO) {
|
||||
TransferUniqueKey key = new TransferUniqueKey();
|
||||
key.setStaffId(editDTO.getStaffId());
|
||||
key.setDeptIdBefore(editDTO.getDeptIdBefore());
|
||||
key.setDeptIdAfter(editDTO.getDeptIdAfter());
|
||||
key.setTransferDate(editDTO.getTransferDate());
|
||||
return key;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工信息Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Data
|
||||
public class CcdiBaseStaffExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 姓名 */
|
||||
@ExcelProperty(value = "姓名", index = 0)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String name;
|
||||
|
||||
/** 员工ID */
|
||||
@ExcelProperty(value = "员工ID", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private Long staffId;
|
||||
|
||||
/** 所属部门ID */
|
||||
@ExcelProperty(value = "所属部门ID", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private Long deptId;
|
||||
|
||||
/** 身份证号 */
|
||||
@ExcelProperty(value = "身份证号", index = 3)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String idCard;
|
||||
|
||||
/** 电话 */
|
||||
@ExcelProperty(value = "电话", index = 4)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String phone;
|
||||
|
||||
/** 入职时间 */
|
||||
@ExcelProperty(value = "入职时间", index = 5)
|
||||
@ColumnWidth(15)
|
||||
private Date hireDate;
|
||||
|
||||
/** 状态 */
|
||||
@ExcelProperty(value = "状态", index = 6)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "ccdi_employee_status")
|
||||
@Required
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户实体关联信息Excel导入导出对象")
|
||||
public class CcdiCustEnterpriseRelationExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@ExcelProperty(value = "身份证号", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
||||
@ColumnWidth(25)
|
||||
@Required
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@ExcelProperty(value = "企业名称", index = 2)
|
||||
@ColumnWidth(30)
|
||||
@Required
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@ExcelProperty(value = "关联人在企业的职务", index = 3)
|
||||
@ColumnWidth(25)
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 补充说明 */
|
||||
@ExcelProperty(value = "补充说明", index = 4)
|
||||
@ColumnWidth(40)
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
public class CcdiCustFmyRelationExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@ExcelProperty(value = "信贷客户身份证号*", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@ExcelProperty(value = "关系类型*", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_relation_type")
|
||||
@Required
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@ExcelProperty(value = "关系人姓名*", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@ExcelProperty(value = "性别", index = 3)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "ccdi_indiv_gender")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@ExcelProperty(value = "出生日期", index = 4)
|
||||
@ColumnWidth(15)
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@ExcelProperty(value = "关系人证件类型*", index = 5)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
@Required
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@ExcelProperty(value = "关系人证件号码*", index = 6)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@ExcelProperty(value = "手机号码1", index = 7)
|
||||
@ColumnWidth(15)
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@ExcelProperty(value = "手机号码2", index = 8)
|
||||
@ColumnWidth(15)
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@ExcelProperty(value = "微信名称1", index = 9)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@ExcelProperty(value = "微信名称2", index = 10)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@ExcelProperty(value = "微信名称3", index = 11)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@ExcelProperty(value = "详细联系地址", index = 12)
|
||||
@ColumnWidth(30)
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@ExcelProperty(value = "关系详细描述", index = 13)
|
||||
@ColumnWidth(30)
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@ExcelProperty(value = "生效日期", index = 14)
|
||||
@ColumnWidth(15)
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@ExcelProperty(value = "失效日期", index = 15)
|
||||
@ColumnWidth(15)
|
||||
private Date invalidDate;
|
||||
|
||||
/** 备注 */
|
||||
@ExcelProperty(value = "备注", index = 16)
|
||||
@ColumnWidth(30)
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 实体中介Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
public class CcdiIntermediaryEntityExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 机构名称 */
|
||||
@ExcelProperty(value = "机构名称*", index = 0)
|
||||
@ColumnWidth(30)
|
||||
private String enterpriseName;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@ExcelProperty(value = "统一社会信用代码*", index = 1)
|
||||
@ColumnWidth(20)
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 主体类型 */
|
||||
@ExcelProperty(value = "主体类型", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_entity_type")
|
||||
private String enterpriseType;
|
||||
|
||||
/** 企业性质 */
|
||||
@ExcelProperty(value = "企业性质", index = 3)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_enterprise_nature")
|
||||
private String enterpriseNature;
|
||||
|
||||
/** 行业分类 */
|
||||
@ExcelProperty(value = "行业分类", index = 4)
|
||||
@ColumnWidth(15)
|
||||
private String industryClass;
|
||||
|
||||
/** 所属行业 */
|
||||
@ExcelProperty(value = "所属行业", index = 5)
|
||||
@ColumnWidth(15)
|
||||
private String industryName;
|
||||
|
||||
/** 成立日期 */
|
||||
@ExcelProperty(value = "成立日期", index = 6)
|
||||
@ColumnWidth(15)
|
||||
private Date establishDate;
|
||||
|
||||
/** 注册地址 */
|
||||
@ExcelProperty(value = "注册地址", index = 7)
|
||||
@ColumnWidth(40)
|
||||
private String registerAddress;
|
||||
|
||||
/** 法定代表人 */
|
||||
@ExcelProperty(value = "法定代表人", index = 8)
|
||||
@ColumnWidth(15)
|
||||
private String legalRepresentative;
|
||||
|
||||
/** 法定代表人证件类型 */
|
||||
@ExcelProperty(value = "法定代表人证件类型", index = 9)
|
||||
@ColumnWidth(20)
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
private String legalCertType;
|
||||
|
||||
/** 法定代表人证件号码 */
|
||||
@ExcelProperty(value = "法定代表人证件号码", index = 10)
|
||||
@ColumnWidth(20)
|
||||
private String legalCertNo;
|
||||
|
||||
/** 股东1 */
|
||||
@ExcelProperty(value = "股东1", index = 11)
|
||||
@ColumnWidth(15)
|
||||
private String shareholder1;
|
||||
|
||||
/** 股东2 */
|
||||
@ExcelProperty(value = "股东2", index = 12)
|
||||
@ColumnWidth(15)
|
||||
private String shareholder2;
|
||||
|
||||
/** 股东3 */
|
||||
@ExcelProperty(value = "股东3", index = 13)
|
||||
@ColumnWidth(15)
|
||||
private String shareholder3;
|
||||
|
||||
/** 股东4 */
|
||||
@ExcelProperty(value = "股东4", index = 14)
|
||||
@ColumnWidth(15)
|
||||
private String shareholder4;
|
||||
|
||||
/** 股东5 */
|
||||
@ExcelProperty(value = "股东5", index = 15)
|
||||
@ColumnWidth(15)
|
||||
private String shareholder5;
|
||||
|
||||
/** 备注 */
|
||||
@ExcelProperty(value = "备注", index = 16)
|
||||
@ColumnWidth(30)
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 个人中介Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
public class CcdiIntermediaryPersonExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 姓名 */
|
||||
@ExcelProperty(value = "姓名*", index = 0)
|
||||
@ColumnWidth(15)
|
||||
private String name;
|
||||
|
||||
/** 人员类型 */
|
||||
@ExcelProperty(value = "人员类型", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_person_type")
|
||||
private String personType;
|
||||
|
||||
/** 人员子类型 */
|
||||
@ExcelProperty(value = "人员子类型", index = 2)
|
||||
@ColumnWidth(15)
|
||||
private String personSubType;
|
||||
|
||||
/** 性别 */
|
||||
@ExcelProperty(value = "性别", index = 3)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "ccdi_indiv_gender")
|
||||
private String gender;
|
||||
|
||||
/** 证件类型 */
|
||||
@ExcelProperty(value = "证件类型", index = 4)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
private String idType;
|
||||
|
||||
/** 证件号码 */
|
||||
@ExcelProperty(value = "证件号码*", index = 5)
|
||||
@ColumnWidth(20)
|
||||
private String personId;
|
||||
|
||||
/** 手机号码 */
|
||||
@ExcelProperty(value = "手机号码", index = 6)
|
||||
@ColumnWidth(15)
|
||||
private String mobile;
|
||||
|
||||
/** 微信号 */
|
||||
@ExcelProperty(value = "微信号", index = 7)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo;
|
||||
|
||||
/** 联系地址 */
|
||||
@ExcelProperty(value = "联系地址", index = 8)
|
||||
@ColumnWidth(30)
|
||||
private String contactAddress;
|
||||
|
||||
/** 所在公司 */
|
||||
@ExcelProperty(value = "所在公司", index = 9)
|
||||
@ColumnWidth(20)
|
||||
private String company;
|
||||
|
||||
/** 企业统一信用码 */
|
||||
@ExcelProperty(value = "企业统一信用码", index = 10)
|
||||
@ColumnWidth(20)
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 职位 */
|
||||
@ExcelProperty(value = "职位", index = 11)
|
||||
@ColumnWidth(15)
|
||||
private String position;
|
||||
|
||||
/** 关联人员ID */
|
||||
@ExcelProperty(value = "关联人员ID", index = 12)
|
||||
@ColumnWidth(15)
|
||||
private String relatedNumId;
|
||||
|
||||
/** 关系类型 */
|
||||
@ExcelProperty(value = "关系类型", index = 13)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_relation_type")
|
||||
private String relationType;
|
||||
|
||||
/** 备注 */
|
||||
@ExcelProperty(value = "备注", index = 14)
|
||||
@ColumnWidth(30)
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购交易信息Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
public class CcdiPurchaseTransactionExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 采购事项ID */
|
||||
@ExcelProperty(value = "采购事项ID", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String purchaseId;
|
||||
|
||||
/** 采购类别 */
|
||||
@ExcelProperty(value = "采购类别", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String purchaseCategory;
|
||||
|
||||
/** 项目名称 */
|
||||
@ExcelProperty(value = "项目名称", index = 2)
|
||||
@ColumnWidth(25)
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
@ExcelProperty(value = "标的物名称", index = 3)
|
||||
@ColumnWidth(25)
|
||||
@Required
|
||||
private String subjectName;
|
||||
|
||||
/** 标的物描述 */
|
||||
@ExcelProperty(value = "标的物描述", index = 4)
|
||||
@ColumnWidth(30)
|
||||
private String subjectDesc;
|
||||
|
||||
/** 采购数量 */
|
||||
@ExcelProperty(value = "采购数量", index = 5)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private BigDecimal purchaseQty;
|
||||
|
||||
/** 预算金额 */
|
||||
@ExcelProperty(value = "预算金额", index = 6)
|
||||
@ColumnWidth(18)
|
||||
@Required
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/** 中标金额 */
|
||||
@ExcelProperty(value = "中标金额", index = 7)
|
||||
@ColumnWidth(18)
|
||||
private BigDecimal bidAmount;
|
||||
|
||||
/** 实际采购金额 */
|
||||
@ExcelProperty(value = "实际采购金额", index = 8)
|
||||
@ColumnWidth(18)
|
||||
private BigDecimal actualAmount;
|
||||
|
||||
/** 合同金额 */
|
||||
@ExcelProperty(value = "合同金额", index = 9)
|
||||
@ColumnWidth(18)
|
||||
private BigDecimal contractAmount;
|
||||
|
||||
/** 结算金额 */
|
||||
@ExcelProperty(value = "结算金额", index = 10)
|
||||
@ColumnWidth(18)
|
||||
private BigDecimal settlementAmount;
|
||||
|
||||
/** 采购方式 */
|
||||
@ExcelProperty(value = "采购方式", index = 11)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String purchaseMethod;
|
||||
|
||||
/** 中标供应商名称 */
|
||||
@ExcelProperty(value = "中标供应商名称", index = 12)
|
||||
@ColumnWidth(25)
|
||||
private String supplierName;
|
||||
|
||||
/** 供应商联系人 */
|
||||
@ExcelProperty(value = "供应商联系人", index = 13)
|
||||
@ColumnWidth(15)
|
||||
private String contactPerson;
|
||||
|
||||
/** 供应商联系电话 */
|
||||
@ExcelProperty(value = "供应商联系电话", index = 14)
|
||||
@ColumnWidth(18)
|
||||
private String contactPhone;
|
||||
|
||||
/** 供应商统一信用代码 */
|
||||
@ExcelProperty(value = "供应商统一信用代码", index = 15)
|
||||
@ColumnWidth(25)
|
||||
private String supplierUscc;
|
||||
|
||||
/** 供应商银行账户 */
|
||||
@ExcelProperty(value = "供应商银行账户", index = 16)
|
||||
@ColumnWidth(20)
|
||||
private String supplierBankAccount;
|
||||
|
||||
/** 采购申请日期(或立项日期) */
|
||||
@ExcelProperty(value = "采购申请日期", index = 17)
|
||||
@ColumnWidth(18)
|
||||
@Required
|
||||
private Date applyDate;
|
||||
|
||||
/** 采购计划批准日期 */
|
||||
@ExcelProperty(value = "采购计划批准日期", index = 18)
|
||||
@ColumnWidth(18)
|
||||
private Date planApproveDate;
|
||||
|
||||
/** 采购公告发布日期 */
|
||||
@ExcelProperty(value = "采购公告发布日期", index = 19)
|
||||
@ColumnWidth(18)
|
||||
private Date announceDate;
|
||||
|
||||
/** 开标日期 */
|
||||
@ExcelProperty(value = "开标日期", index = 20)
|
||||
@ColumnWidth(18)
|
||||
private Date bidOpenDate;
|
||||
|
||||
/** 合同签订日期 */
|
||||
@ExcelProperty(value = "合同签订日期", index = 21)
|
||||
@ColumnWidth(18)
|
||||
private Date contractSignDate;
|
||||
|
||||
/** 预计交货日期 */
|
||||
@ExcelProperty(value = "预计交货日期", index = 22)
|
||||
@ColumnWidth(18)
|
||||
private Date expectedDeliveryDate;
|
||||
|
||||
/** 实际交货日期 */
|
||||
@ExcelProperty(value = "实际交货日期", index = 23)
|
||||
@ColumnWidth(18)
|
||||
private Date actualDeliveryDate;
|
||||
|
||||
/** 验收日期 */
|
||||
@ExcelProperty(value = "验收日期", index = 24)
|
||||
@ColumnWidth(18)
|
||||
private Date acceptanceDate;
|
||||
|
||||
/** 结算日期 */
|
||||
@ExcelProperty(value = "结算日期", index = 25)
|
||||
@ColumnWidth(18)
|
||||
private Date settlementDate;
|
||||
|
||||
/** 申请人工号 */
|
||||
@ExcelProperty(value = "申请人工号", index = 26)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String applicantId;
|
||||
|
||||
/** 申请人姓名 */
|
||||
@ExcelProperty(value = "申请人姓名", index = 27)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String applicantName;
|
||||
|
||||
/** 申请部门 */
|
||||
@ExcelProperty(value = "申请部门", index = 28)
|
||||
@ColumnWidth(18)
|
||||
@Required
|
||||
private String applyDepartment;
|
||||
|
||||
/** 采购负责人工号 */
|
||||
@ExcelProperty(value = "采购负责人工号", index = 29)
|
||||
@ColumnWidth(15)
|
||||
private String purchaseLeaderId;
|
||||
|
||||
/** 采购负责人姓名 */
|
||||
@ExcelProperty(value = "采购负责人姓名", index = 30)
|
||||
@ColumnWidth(15)
|
||||
private String purchaseLeaderName;
|
||||
|
||||
/** 采购部门 */
|
||||
@ExcelProperty(value = "采购部门", index = 31)
|
||||
@ColumnWidth(18)
|
||||
private String purchaseDepartment;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工实体关系信息Excel导入导出对象")
|
||||
public class CcdiStaffEnterpriseRelationExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@ExcelProperty(value = "身份证号", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
||||
@ColumnWidth(25)
|
||||
@Required
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@ExcelProperty(value = "企业名称", index = 2)
|
||||
@ColumnWidth(30)
|
||||
@Required
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@ExcelProperty(value = "关联人在企业的职务", index = 3)
|
||||
@ColumnWidth(25)
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 补充说明 */
|
||||
@ExcelProperty(value = "补充说明", index = 4)
|
||||
@ColumnWidth(40)
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工亲属关系Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffFmyRelationExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工身份证号 */
|
||||
@ExcelProperty(value = "员工身份证号*", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@ExcelProperty(value = "关系类型*", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_relation_type")
|
||||
@Required
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@ExcelProperty(value = "关系人姓名*", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@ExcelProperty(value = "性别", index = 3)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "ccdi_indiv_gender")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@ExcelProperty(value = "出生日期", index = 4)
|
||||
@ColumnWidth(15)
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@ExcelProperty(value = "关系人证件类型*", index = 5)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
@Required
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@ExcelProperty(value = "关系人证件号码*", index = 6)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@ExcelProperty(value = "手机号码1", index = 7)
|
||||
@ColumnWidth(15)
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@ExcelProperty(value = "手机号码2", index = 8)
|
||||
@ColumnWidth(15)
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@ExcelProperty(value = "微信名称1", index = 9)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@ExcelProperty(value = "微信名称2", index = 10)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@ExcelProperty(value = "微信名称3", index = 11)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@ExcelProperty(value = "详细联系地址", index = 12)
|
||||
@ColumnWidth(30)
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@ExcelProperty(value = "关系详细描述", index = 13)
|
||||
@ColumnWidth(30)
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@ExcelProperty(value = "生效日期", index = 14)
|
||||
@ColumnWidth(15)
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@ExcelProperty(value = "失效日期", index = 15)
|
||||
@ColumnWidth(15)
|
||||
private Date invalidDate;
|
||||
|
||||
/** 备注 */
|
||||
@ExcelProperty(value = "备注", index = 16)
|
||||
@ColumnWidth(30)
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工招聘信息Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffRecruitmentExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 招聘项目编号 */
|
||||
@ExcelProperty(value = "招聘项目编号", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String recruitId;
|
||||
|
||||
/** 招聘项目名称 */
|
||||
@ExcelProperty(value = "招聘项目名称", index = 1)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String recruitName;
|
||||
|
||||
/** 职位名称 */
|
||||
@ExcelProperty(value = "职位名称", index = 2)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String posName;
|
||||
|
||||
/** 职位类别 */
|
||||
@ExcelProperty(value = "职位类别", index = 3)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String posCategory;
|
||||
|
||||
/** 职位描述 */
|
||||
@ExcelProperty(value = "职位描述", index = 4)
|
||||
@ColumnWidth(30)
|
||||
@Required
|
||||
private String posDesc;
|
||||
|
||||
/** 应聘人员姓名 */
|
||||
@ExcelProperty(value = "应聘人员姓名", index = 5)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String candName;
|
||||
|
||||
/** 应聘人员学历 */
|
||||
@ExcelProperty(value = "应聘人员学历", index = 6)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String candEdu;
|
||||
|
||||
/** 应聘人员证件号码 */
|
||||
@ExcelProperty(value = "应聘人员证件号码", index = 7)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String candId;
|
||||
|
||||
/** 应聘人员毕业院校 */
|
||||
@ExcelProperty(value = "应聘人员毕业院校", index = 8)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String candSchool;
|
||||
|
||||
/** 应聘人员专业 */
|
||||
@ExcelProperty(value = "应聘人员专业", index = 9)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String candMajor;
|
||||
|
||||
/** 应聘人员毕业年月 */
|
||||
@ExcelProperty(value = "应聘人员毕业年月", index = 10)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String candGrad;
|
||||
|
||||
/** 录用情况 */
|
||||
@ExcelProperty(value = "录用情况", index = 11)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "ccdi_admit_status")
|
||||
@Required
|
||||
private String admitStatus;
|
||||
|
||||
/** 面试官1姓名 */
|
||||
@ExcelProperty(value = "面试官1姓名", index = 12)
|
||||
@ColumnWidth(15)
|
||||
private String interviewerName1;
|
||||
|
||||
/** 面试官1工号 */
|
||||
@ExcelProperty(value = "面试官1工号", index = 13)
|
||||
@ColumnWidth(15)
|
||||
private String interviewerId1;
|
||||
|
||||
/** 面试官2姓名 */
|
||||
@ExcelProperty(value = "面试官2姓名", index = 14)
|
||||
@ColumnWidth(15)
|
||||
private String interviewerName2;
|
||||
|
||||
/** 面试官2工号 */
|
||||
@ExcelProperty(value = "面试官2工号", index = 15)
|
||||
@ColumnWidth(15)
|
||||
private String interviewerId2;
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.ruoyi.info.collection.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffTransferExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID */
|
||||
@ExcelProperty(value = "员工ID*", index = 0)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private Long staffId;
|
||||
|
||||
/** 调动类型 */
|
||||
@ExcelProperty(value = "调动类型*", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_transfer_type")
|
||||
@Required
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
@ExcelProperty(value = "调动子类型", index = 2)
|
||||
@ColumnWidth(15)
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门ID */
|
||||
@ExcelProperty(value = "调动前部门ID*", index = 3)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动前职级 */
|
||||
@ExcelProperty(value = "调动前职级", index = 4)
|
||||
@ColumnWidth(15)
|
||||
private String gradeBefore;
|
||||
|
||||
/** 调动前岗位 */
|
||||
@ExcelProperty(value = "调动前岗位", index = 5)
|
||||
@ColumnWidth(15)
|
||||
private String positionBefore;
|
||||
|
||||
/** 调动前薪酬等级 */
|
||||
@ExcelProperty(value = "调动前薪酬等级", index = 6)
|
||||
@ColumnWidth(15)
|
||||
private String salaryLevelBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
@ExcelProperty(value = "调动后部门ID*", index = 7)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动后职级 */
|
||||
@ExcelProperty(value = "调动后职级", index = 8)
|
||||
@ColumnWidth(15)
|
||||
private String gradeAfter;
|
||||
|
||||
/** 调动后岗位 */
|
||||
@ExcelProperty(value = "调动后岗位", index = 9)
|
||||
@ColumnWidth(15)
|
||||
private String positionAfter;
|
||||
|
||||
/** 调动后薪酬等级 */
|
||||
@ExcelProperty(value = "调动后薪酬等级", index = 10)
|
||||
@ColumnWidth(15)
|
||||
private String salaryLevelAfter;
|
||||
|
||||
/** 调动日期 */
|
||||
@ExcelProperty(value = "调动日期*", index = 11)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private Date transferDate;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 员工选项VO(用于下拉选择框)
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
public class CcdiBaseStaffOptionVO {
|
||||
|
||||
/**
|
||||
* 员工ID
|
||||
*/
|
||||
private Long staffId;
|
||||
|
||||
/**
|
||||
* 员工姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String deptName;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工信息 VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-01-28
|
||||
*/
|
||||
@Data
|
||||
public class CcdiBaseStaffVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID */
|
||||
private Long staffId;
|
||||
|
||||
/** 姓名 */
|
||||
private String name;
|
||||
|
||||
/** 所属部门ID */
|
||||
private Long deptId;
|
||||
|
||||
/** 所属部门名称 */
|
||||
private String deptName;
|
||||
|
||||
/** 身份证号 */
|
||||
private String idCard;
|
||||
|
||||
/** 电话 */
|
||||
private String phone;
|
||||
|
||||
/** 入职时间 */
|
||||
private Date hireDate;
|
||||
|
||||
/** 状态 */
|
||||
private String status;
|
||||
|
||||
/** 状态描述 */
|
||||
private String statusDesc;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
|
||||
/** 创建者 */
|
||||
private String createBy;
|
||||
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
|
||||
/** 更新者 */
|
||||
private String updateBy;
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户实体关联信息")
|
||||
public class CcdiCustEnterpriseRelationVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否为员工(0-否 1-是) */
|
||||
@Schema(description = "是否为员工(0-否 1-是)")
|
||||
private Integer isEmployee;
|
||||
|
||||
/** 是否为员工家属(0-否 1-是) */
|
||||
@Schema(description = "是否为员工家属(0-否 1-是)")
|
||||
private Integer isEmpFamily;
|
||||
|
||||
/** 是否为客户(0-否 1-是) */
|
||||
@Schema(description = "是否为客户(0-否 1-是)")
|
||||
private Integer isCustomer;
|
||||
|
||||
/** 是否为客户家属(0-否 1-是) */
|
||||
@Schema(description = "是否为客户家属(0-否 1-是)")
|
||||
private Integer isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户家庭关系")
|
||||
public class CcdiCustFmyRelationVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@Schema(description = "信贷客户身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系类型名称 */
|
||||
@Schema(description = "关系类型名称")
|
||||
private String relationTypeName;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Schema(description = "性别:M-男,F-女,O-其他")
|
||||
private String gender;
|
||||
|
||||
/** 性别名称 */
|
||||
@Schema(description = "性别名称")
|
||||
private String genderName;
|
||||
|
||||
/** 出生日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "出生日期")
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@Schema(description = "关系人证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件类型名称 */
|
||||
@Schema(description = "关系人证件类型名称")
|
||||
private String relationCertTypeName;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@Schema(description = "关系人证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@Schema(description = "手机号码2")
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@Schema(description = "微信名称1")
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@Schema(description = "微信名称2")
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@Schema(description = "微信名称3")
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@Schema(description = "详细联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@Schema(description = "关系详细描述")
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期")
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "失效日期")
|
||||
private Date invalidDate;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态:0-无效,1-有效")
|
||||
private Integer status;
|
||||
|
||||
/** 状态名称 */
|
||||
@Schema(description = "状态名称")
|
||||
private String statusName;
|
||||
|
||||
/** 备注 */
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源:MANUAL-手工录入,IMPORT-批量导入")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否是员工亲属 */
|
||||
@Schema(description = "是否是员工亲属:0-否")
|
||||
private Boolean isEmpFamily;
|
||||
|
||||
/** 是否是客户亲属 */
|
||||
@Schema(description = "是否是客户亲属:1-是")
|
||||
private Boolean isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 实体中介详情VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "实体中介详情VO")
|
||||
public class CcdiIntermediaryEntityDetailVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "业务ID")
|
||||
private String bizId;
|
||||
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
||||
private String intermediaryType;
|
||||
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
@Schema(description = "企业类型")
|
||||
private String enterpriseType;
|
||||
|
||||
@Schema(description = "企业性质")
|
||||
private String enterpriseNature;
|
||||
|
||||
@Schema(description = "行业分类")
|
||||
private String industryClass;
|
||||
|
||||
@Schema(description = "所属行业")
|
||||
private String industryName;
|
||||
|
||||
@Schema(description = "成立日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date establishDate;
|
||||
|
||||
@Schema(description = "注册地址")
|
||||
private String registerAddress;
|
||||
|
||||
@Schema(description = "法定代表人")
|
||||
private String legalRepresentative;
|
||||
|
||||
@Schema(description = "法定代表人证件类型")
|
||||
private String legalCertType;
|
||||
|
||||
@Schema(description = "法定代表人证件号码")
|
||||
private String legalCertNo;
|
||||
|
||||
@Schema(description = "股东1")
|
||||
private String shareholder1;
|
||||
|
||||
@Schema(description = "股东2")
|
||||
private String shareholder2;
|
||||
|
||||
@Schema(description = "股东3")
|
||||
private String shareholder3;
|
||||
|
||||
@Schema(description = "股东4")
|
||||
private String shareholder4;
|
||||
|
||||
@Schema(description = "股东5")
|
||||
private String shareholder5;
|
||||
|
||||
@Schema(description = "风险等级")
|
||||
private String riskLevel;
|
||||
|
||||
@Schema(description = "企业来源")
|
||||
private String entSource;
|
||||
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 个人中介详情VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "个人中介详情VO")
|
||||
public class CcdiIntermediaryPersonDetailVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "人员ID")
|
||||
private String bizId;
|
||||
|
||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
||||
private String intermediaryType;
|
||||
|
||||
@Schema(description = "姓名")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "人员类型")
|
||||
private String personType;
|
||||
|
||||
@Schema(description = "人员子类型")
|
||||
private String personSubType;
|
||||
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
@Schema(description = "证件类型")
|
||||
private String idType;
|
||||
|
||||
@Schema(description = "证件号码")
|
||||
private String personId;
|
||||
|
||||
@Schema(description = "手机号码")
|
||||
private String mobile;
|
||||
|
||||
@Schema(description = "微信号")
|
||||
private String wechatNo;
|
||||
|
||||
@Schema(description = "联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
@Schema(description = "所在公司")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "企业统一信用码")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "职位")
|
||||
private String position;
|
||||
|
||||
@Schema(description = "关联人员ID")
|
||||
private String relatedNumId;
|
||||
|
||||
@Schema(description = "关联关系")
|
||||
private String relationType;
|
||||
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 中介统一列表VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-04
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "中介统一列表VO")
|
||||
public class CcdiIntermediaryVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "ID")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "姓名/机构名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "证件号/统一社会信用代码")
|
||||
private String certificateNo;
|
||||
|
||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
||||
private String intermediaryType;
|
||||
|
||||
@Schema(description = "人员类型")
|
||||
private String personType;
|
||||
|
||||
@Schema(description = "公司")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
@Schema(description = "修改时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购交易信息VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购交易信息")
|
||||
public class CcdiPurchaseTransactionVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 采购事项ID */
|
||||
@Schema(description = "采购事项ID")
|
||||
private String purchaseId;
|
||||
|
||||
/** 采购类别 */
|
||||
@Schema(description = "采购类别")
|
||||
private String purchaseCategory;
|
||||
|
||||
/** 项目名称 */
|
||||
@Schema(description = "项目名称")
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
@Schema(description = "标的物名称")
|
||||
private String subjectName;
|
||||
|
||||
/** 标的物描述 */
|
||||
@Schema(description = "标的物描述")
|
||||
private String subjectDesc;
|
||||
|
||||
/** 采购数量 */
|
||||
@Schema(description = "采购数量")
|
||||
private BigDecimal purchaseQty;
|
||||
|
||||
/** 预算金额 */
|
||||
@Schema(description = "预算金额")
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/** 中标金额 */
|
||||
@Schema(description = "中标金额")
|
||||
private BigDecimal bidAmount;
|
||||
|
||||
/** 实际采购金额 */
|
||||
@Schema(description = "实际采购金额")
|
||||
private BigDecimal actualAmount;
|
||||
|
||||
/** 合同金额 */
|
||||
@Schema(description = "合同金额")
|
||||
private BigDecimal contractAmount;
|
||||
|
||||
/** 结算金额 */
|
||||
@Schema(description = "结算金额")
|
||||
private BigDecimal settlementAmount;
|
||||
|
||||
/** 采购方式 */
|
||||
@Schema(description = "采购方式")
|
||||
private String purchaseMethod;
|
||||
|
||||
/** 中标供应商名称 */
|
||||
@Schema(description = "中标供应商名称")
|
||||
private String supplierName;
|
||||
|
||||
/** 供应商联系人 */
|
||||
@Schema(description = "供应商联系人")
|
||||
private String contactPerson;
|
||||
|
||||
/** 供应商联系电话 */
|
||||
@Schema(description = "供应商联系电话")
|
||||
private String contactPhone;
|
||||
|
||||
/** 供应商统一信用代码 */
|
||||
@Schema(description = "供应商统一信用代码")
|
||||
private String supplierUscc;
|
||||
|
||||
/** 供应商银行账户 */
|
||||
@Schema(description = "供应商银行账户")
|
||||
private String supplierBankAccount;
|
||||
|
||||
/** 采购申请日期(或立项日期) */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购申请日期")
|
||||
private Date applyDate;
|
||||
|
||||
/** 采购计划批准日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购计划批准日期")
|
||||
private Date planApproveDate;
|
||||
|
||||
/** 采购公告发布日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "采购公告发布日期")
|
||||
private Date announceDate;
|
||||
|
||||
/** 开标日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "开标日期")
|
||||
private Date bidOpenDate;
|
||||
|
||||
/** 合同签订日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "合同签订日期")
|
||||
private Date contractSignDate;
|
||||
|
||||
/** 预计交货日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "预计交货日期")
|
||||
private Date expectedDeliveryDate;
|
||||
|
||||
/** 实际交货日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "实际交货日期")
|
||||
private Date actualDeliveryDate;
|
||||
|
||||
/** 验收日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "验收日期")
|
||||
private Date acceptanceDate;
|
||||
|
||||
/** 结算日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "结算日期")
|
||||
private Date settlementDate;
|
||||
|
||||
/** 申请人工号 */
|
||||
@Schema(description = "申请人工号")
|
||||
private String applicantId;
|
||||
|
||||
/** 申请人姓名 */
|
||||
@Schema(description = "申请人姓名")
|
||||
private String applicantName;
|
||||
|
||||
/** 申请部门 */
|
||||
@Schema(description = "申请部门")
|
||||
private String applyDepartment;
|
||||
|
||||
/** 采购负责人工号 */
|
||||
@Schema(description = "采购负责人工号")
|
||||
private String purchaseLeaderId;
|
||||
|
||||
/** 采购负责人姓名 */
|
||||
@Schema(description = "采购负责人姓名")
|
||||
private String purchaseLeaderName;
|
||||
|
||||
/** 采购部门 */
|
||||
@Schema(description = "采购部门")
|
||||
private String purchaseDepartment;
|
||||
|
||||
/** 创建时间 */
|
||||
@Schema(description = "创建时间")
|
||||
private String createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@Schema(description = "更新时间")
|
||||
private String updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工实体关系信息")
|
||||
public class CcdiStaffEnterpriseRelationVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 员工姓名 */
|
||||
@Schema(description = "员工姓名")
|
||||
private String personName;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 状态(0-无效 1-有效) */
|
||||
@Schema(description = "状态(0-无效 1-有效)")
|
||||
private Integer status;
|
||||
|
||||
/** 补充说明 */
|
||||
@Schema(description = "补充说明")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否为员工(0-否 1-是) */
|
||||
@Schema(description = "是否为员工(0-否 1-是)")
|
||||
private Integer isEmployee;
|
||||
|
||||
/** 是否为员工家属(0-否 1-是) */
|
||||
@Schema(description = "是否为员工家属(0-否 1-是)")
|
||||
private Integer isEmpFamily;
|
||||
|
||||
/** 是否为客户(0-否 1-是) */
|
||||
@Schema(description = "是否为客户(0-否 1-是)")
|
||||
private Integer isCustomer;
|
||||
|
||||
/** 是否为客户家属(0-否 1-是) */
|
||||
@Schema(description = "是否为客户家属(0-否 1-是)")
|
||||
private Integer isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工亲属关系VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工亲属关系")
|
||||
public class CcdiStaffFmyRelationVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 员工身份证号 */
|
||||
@Schema(description = "员工身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 员工姓名 */
|
||||
@Schema(description = "员工姓名")
|
||||
private String personName;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
/** 性别名称 */
|
||||
@Schema(description = "性别名称")
|
||||
private String genderName;
|
||||
|
||||
/** 出生日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "出生日期")
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@Schema(description = "关系人证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@Schema(description = "关系人证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@Schema(description = "手机号码2")
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@Schema(description = "微信名称1")
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@Schema(description = "微信名称2")
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@Schema(description = "微信名称3")
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@Schema(description = "详细联系地址")
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@Schema(description = "关系详细描述")
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "生效日期")
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "失效日期")
|
||||
private Date invalidDate;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态")
|
||||
private Integer status;
|
||||
|
||||
/** 状态名称 */
|
||||
@Schema(description = "状态名称")
|
||||
private String statusName;
|
||||
|
||||
/** 备注 */
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
/** 数据来源 */
|
||||
@Schema(description = "数据来源")
|
||||
private String dataSource;
|
||||
|
||||
/** 是否是员工亲属 */
|
||||
@Schema(description = "是否是员工亲属")
|
||||
private Boolean isEmpFamily;
|
||||
|
||||
/** 是否是客户亲属 */
|
||||
@Schema(description = "是否是客户亲属")
|
||||
private Boolean isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工招聘信息VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-02-05
|
||||
*/
|
||||
@Data
|
||||
public class CcdiStaffRecruitmentVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 招聘项目编号 */
|
||||
private String recruitId;
|
||||
|
||||
/** 招聘项目名称 */
|
||||
private String recruitName;
|
||||
|
||||
/** 职位名称 */
|
||||
private String posName;
|
||||
|
||||
/** 职位类别 */
|
||||
private String posCategory;
|
||||
|
||||
/** 职位描述 */
|
||||
private String posDesc;
|
||||
|
||||
/** 应聘人员姓名 */
|
||||
private String candName;
|
||||
|
||||
/** 应聘人员学历 */
|
||||
private String candEdu;
|
||||
|
||||
/** 应聘人员证件号码 */
|
||||
private String candId;
|
||||
|
||||
/** 应聘人员毕业院校 */
|
||||
private String candSchool;
|
||||
|
||||
/** 应聘人员专业 */
|
||||
private String candMajor;
|
||||
|
||||
/** 应聘人员毕业年月 */
|
||||
private String candGrad;
|
||||
|
||||
/** 录用情况:录用、未录用、放弃 */
|
||||
private String admitStatus;
|
||||
|
||||
/** 录用情况描述 */
|
||||
private String admitStatusDesc;
|
||||
|
||||
/** 面试官1姓名 */
|
||||
private String interviewerName1;
|
||||
|
||||
/** 面试官1工号 */
|
||||
private String interviewerId1;
|
||||
|
||||
/** 面试官2姓名 */
|
||||
private String interviewerName2;
|
||||
|
||||
/** 面试官2工号 */
|
||||
private String interviewerId2;
|
||||
|
||||
/** 记录创建人 */
|
||||
private String createdBy;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
|
||||
/** 记录更新人 */
|
||||
private String updatedBy;
|
||||
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工调动记录")
|
||||
public class CcdiStaffTransferVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@Schema(description = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 员工ID */
|
||||
@Schema(description = "员工ID")
|
||||
private Long staffId;
|
||||
|
||||
/** 员工姓名 */
|
||||
@Schema(description = "员工姓名")
|
||||
private String staffName;
|
||||
|
||||
/** 调动类型 */
|
||||
@Schema(description = "调动类型")
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
@Schema(description = "调动子类型")
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门ID */
|
||||
@Schema(description = "调动前部门ID")
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动前部门 */
|
||||
@Schema(description = "调动前部门")
|
||||
private String deptNameBefore;
|
||||
|
||||
/** 调动前职级 */
|
||||
@Schema(description = "调动前职级")
|
||||
private String gradeBefore;
|
||||
|
||||
/** 调动前岗位 */
|
||||
@Schema(description = "调动前岗位")
|
||||
private String positionBefore;
|
||||
|
||||
/** 调动前薪酬等级 */
|
||||
@Schema(description = "调动前薪酬等级")
|
||||
private String salaryLevelBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
@Schema(description = "调动后部门ID")
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动后部门 */
|
||||
@Schema(description = "调动后部门")
|
||||
private String deptNameAfter;
|
||||
|
||||
/** 调动后职级 */
|
||||
@Schema(description = "调动后职级")
|
||||
private String gradeAfter;
|
||||
|
||||
/** 调动后岗位 */
|
||||
@Schema(description = "调动后岗位")
|
||||
private String positionAfter;
|
||||
|
||||
/** 调动后薪酬等级 */
|
||||
@Schema(description = "调动后薪酬等级")
|
||||
private String salaryLevelAfter;
|
||||
|
||||
/** 调动日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "调动日期")
|
||||
private Date transferDate;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
private String updatedBy;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户实体关联信息导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-12
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户实体关联信息导入失败记录")
|
||||
public class CustEnterpriseRelationImportFailureVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 错误信息 */
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系导入失败VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户家庭关系导入失败记录")
|
||||
public class CustFmyRelationImportFailureVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 行号 */
|
||||
@Schema(description = "行号")
|
||||
private Integer rowNum;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@Schema(description = "信贷客户身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 错误消息 */
|
||||
@Schema(description = "错误消息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 枚举选项VO
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class EnumOptionVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 选项值 */
|
||||
private String value;
|
||||
|
||||
/** 选项标签 */
|
||||
private String label;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "导入失败记录")
|
||||
public class ImportFailureVO {
|
||||
|
||||
@Schema(description = "柜员号")
|
||||
private Long employeeId;
|
||||
|
||||
@Schema(description = "姓名")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "身份证号")
|
||||
private String idCard;
|
||||
|
||||
@Schema(description = "部门ID")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "电话")
|
||||
private String phone;
|
||||
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "入职时间")
|
||||
private String hireDate;
|
||||
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: wkc
|
||||
* @CreateTime: 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
public class ImportResult {
|
||||
|
||||
private Integer totalCount;
|
||||
private Integer successCount;
|
||||
private Integer failureCount;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 导入结果VO
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "导入结果")
|
||||
public class ImportResultVO {
|
||||
|
||||
@Schema(description = "任务ID")
|
||||
private String taskId;
|
||||
|
||||
@Schema(description = "状态: PROCESSING-处理中, SUCCESS-成功, PARTIAL_SUCCESS-部分成功, FAILED-失败")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "消息")
|
||||
private String message;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 导入状态VO
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "导入状态")
|
||||
public class ImportStatusVO {
|
||||
|
||||
@Schema(description = "任务ID")
|
||||
private String taskId;
|
||||
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "总记录数")
|
||||
private Integer totalCount;
|
||||
|
||||
@Schema(description = "成功数")
|
||||
private Integer successCount;
|
||||
|
||||
@Schema(description = "失败数")
|
||||
private Integer failureCount;
|
||||
|
||||
@Schema(description = "进度百分比")
|
||||
private Integer progress;
|
||||
|
||||
@Schema(description = "开始时间戳")
|
||||
private Long startTime;
|
||||
|
||||
@Schema(description = "结束时间戳")
|
||||
private Long endTime;
|
||||
|
||||
@Schema(description = "状态消息")
|
||||
private String message;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 实体中介导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "实体中介导入失败记录")
|
||||
public class IntermediaryEntityImportFailureVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "机构名称")
|
||||
private String enterpriseName;
|
||||
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "主体类型")
|
||||
private String enterpriseType;
|
||||
|
||||
@Schema(description = "企业性质")
|
||||
private String enterpriseNature;
|
||||
|
||||
@Schema(description = "法定代表人")
|
||||
private String legalRepresentative;
|
||||
|
||||
@Schema(description = "成立日期")
|
||||
private Date establishDate;
|
||||
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 个人中介导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "个人中介导入失败记录")
|
||||
public class IntermediaryPersonImportFailureVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "姓名")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "证件号码")
|
||||
private String personId;
|
||||
|
||||
@Schema(description = "人员类型")
|
||||
private String personType;
|
||||
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
@Schema(description = "手机号码")
|
||||
private String mobile;
|
||||
|
||||
@Schema(description = "所在公司")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购交易信息导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "采购交易信息导入失败记录")
|
||||
public class PurchaseTransactionImportFailureVO {
|
||||
|
||||
/** 采购事项ID */
|
||||
@Schema(description = "采购事项ID")
|
||||
private String purchaseId;
|
||||
|
||||
/** 采购类别 */
|
||||
@Schema(description = "采购类别")
|
||||
private String purchaseCategory;
|
||||
|
||||
/** 项目名称 */
|
||||
@Schema(description = "项目名称")
|
||||
private String projectName;
|
||||
|
||||
/** 标的物名称 */
|
||||
@Schema(description = "标的物名称")
|
||||
private String subjectName;
|
||||
|
||||
/** 采购方式 */
|
||||
@Schema(description = "采购方式")
|
||||
private String purchaseMethod;
|
||||
|
||||
/** 预算金额 */
|
||||
@Schema(description = "预算金额")
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/** 申请人工号 */
|
||||
@Schema(description = "申请人工号")
|
||||
private String applicantId;
|
||||
|
||||
/** 申请人姓名 */
|
||||
@Schema(description = "申请人姓名")
|
||||
private String applicantName;
|
||||
|
||||
/** 申请部门 */
|
||||
@Schema(description = "申请部门")
|
||||
private String applyDepartment;
|
||||
|
||||
/** 采购申请日期 */
|
||||
@Schema(description = "采购申请日期")
|
||||
private String applyDate;
|
||||
|
||||
/** 错误信息 */
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 招聘信息导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "招聘信息导入失败记录")
|
||||
public class RecruitmentImportFailureVO {
|
||||
|
||||
@Schema(description = "招聘项目编号")
|
||||
private String recruitId;
|
||||
|
||||
@Schema(description = "招聘项目名称")
|
||||
private String recruitName;
|
||||
|
||||
@Schema(description = "应聘人员姓名")
|
||||
private String candName;
|
||||
|
||||
@Schema(description = "证件号码")
|
||||
private String candId;
|
||||
|
||||
@Schema(description = "录用情况")
|
||||
private String admitStatus;
|
||||
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 员工实体关系信息导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工实体关系信息导入失败记录")
|
||||
public class StaffEnterpriseRelationImportFailureVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 企业名称 */
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
/** 错误信息 */
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 员工亲属关系信息导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工亲属关系信息导入失败记录")
|
||||
public class StaffFmyRelationImportFailureVO {
|
||||
|
||||
/** 员工身份证号 */
|
||||
@Schema(description = "员工身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
/** 证件类型 */
|
||||
@Schema(description = "证件类型")
|
||||
private String relationCertType;
|
||||
|
||||
/** 证件号码 */
|
||||
@Schema(description = "证件号码")
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@Schema(description = "手机号码1")
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 状态 */
|
||||
@Schema(description = "状态")
|
||||
private Integer status;
|
||||
|
||||
/** 错误信息 */
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.ruoyi.info.collection.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 员工调动记录导入失败记录VO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-10
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "员工调动记录导入失败记录")
|
||||
public class StaffTransferImportFailureVO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 员工ID */
|
||||
@Schema(description = "员工ID")
|
||||
private Long staffId;
|
||||
|
||||
/** 员工姓名 */
|
||||
@Schema(description = "员工姓名")
|
||||
private String staffName;
|
||||
|
||||
/** 调动前部门ID */
|
||||
@Schema(description = "调动前部门ID")
|
||||
private Long deptIdBefore;
|
||||
|
||||
/** 调动后部门ID */
|
||||
@Schema(description = "调动后部门ID")
|
||||
private Long deptIdAfter;
|
||||
|
||||
/** 调动类型 */
|
||||
@Schema(description = "调动类型")
|
||||
private String transferType;
|
||||
|
||||
/** 调动子类型 */
|
||||
@Schema(description = "调动子类型")
|
||||
private String transferSubType;
|
||||
|
||||
/** 调动前部门 */
|
||||
@Schema(description = "调动前部门")
|
||||
private String deptNameBefore;
|
||||
|
||||
/** 调动前职级 */
|
||||
@Schema(description = "调动前职级")
|
||||
private String gradeBefore;
|
||||
|
||||
/** 调动前岗位 */
|
||||
@Schema(description = "调动前岗位")
|
||||
private String positionBefore;
|
||||
|
||||
/** 调动前薪酬等级 */
|
||||
@Schema(description = "调动前薪酬等级")
|
||||
private String salaryLevelBefore;
|
||||
|
||||
/** 调动后部门 */
|
||||
@Schema(description = "调动后部门")
|
||||
private String deptNameAfter;
|
||||
|
||||
/** 调动后职级 */
|
||||
@Schema(description = "调动后职级")
|
||||
private String gradeAfter;
|
||||
|
||||
/** 调动后岗位 */
|
||||
@Schema(description = "调动后岗位")
|
||||
private String positionAfter;
|
||||
|
||||
/** 调动后薪酬等级 */
|
||||
@Schema(description = "调动后薪酬等级")
|
||||
private String salaryLevelAfter;
|
||||
|
||||
/** 调动日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Schema(description = "调动日期")
|
||||
private Date transferDate;
|
||||
|
||||
/** 错误信息 */
|
||||
@Schema(description = "错误信息")
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 录用状态枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum AdmitStatus {
|
||||
|
||||
/** 录用 */
|
||||
ADMITTED("录用", "已录用该候选人"),
|
||||
|
||||
/** 未录用 */
|
||||
NOT_ADMITTED("未录用", "未录用该候选人"),
|
||||
|
||||
/** 放弃 */
|
||||
WITHDRAWN("放弃", "候选人放弃");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
AdmitStatus(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (AdmitStatus status : values()) {
|
||||
if (status.getCode().equals(code)) {
|
||||
return status.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 证件类型枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum CertType {
|
||||
|
||||
/** 身份证 */
|
||||
ID_CARD("身份证", "身份证"),
|
||||
|
||||
/** 护照 */
|
||||
PASSPORT("护照", "护照"),
|
||||
|
||||
/** 港澳通行证 */
|
||||
HK_MACAU_PASS("港澳通行证", "港澳通行证"),
|
||||
|
||||
/** 台湾通行证 */
|
||||
TAIWAN_PASS("台湾通行证", "台湾通行证");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
CertType(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (CertType type : values()) {
|
||||
if (type.getCode().equals(code)) {
|
||||
return type.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 企业性质枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum CorpNature {
|
||||
|
||||
/** 国有企业 */
|
||||
STATE_OWNED("国有企业", "国有企业"),
|
||||
|
||||
/** 民营企业 */
|
||||
PRIVATE("民营企业", "民营企业"),
|
||||
|
||||
/** 外资企业 */
|
||||
FOREIGN("外资企业", "外资企业"),
|
||||
|
||||
/** 合资企业 */
|
||||
JOINT_VENTURE("合资企业", "合资企业"),
|
||||
|
||||
/** 港澳台企业 */
|
||||
HONG_KONG_MACAO_TAIWAN("港澳台企业", "港澳台企业"),
|
||||
|
||||
/** 集体企业 */
|
||||
COLLECTIVE("集体企业", "集体企业"),
|
||||
|
||||
/** 个体工商户 */
|
||||
INDIVIDUAL("个体工商户", "个体工商户"),
|
||||
|
||||
/** 其他 */
|
||||
OTHER("其他", "其他");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
CorpNature(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (CorpNature nature : values()) {
|
||||
if (nature.getCode().equals(code)) {
|
||||
return nature.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 主体类型枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum CorpType {
|
||||
|
||||
/** 有限责任公司 */
|
||||
LIMITED_LIABILITY("有限责任公司", "有限责任公司"),
|
||||
|
||||
/** 股份有限公司 */
|
||||
JOINT_STOCK("股份有限公司", "股份有限公司"),
|
||||
|
||||
/** 个体工商户 */
|
||||
INDIVIDUAL("个体工商户", "个体工商户"),
|
||||
|
||||
/** 合伙企业 */
|
||||
PARTNERSHIP("合伙企业", "合伙企业"),
|
||||
|
||||
/** 个人独资企业 */
|
||||
SOLE_PROPRIETORSHIP("个人独资企业", "个人独资企业"),
|
||||
|
||||
/** 国有企业 */
|
||||
STATE_OWNED("国有企业", "国有企业"),
|
||||
|
||||
/** 集体企业 */
|
||||
COLLECTIVE("集体企业", "集体企业"),
|
||||
|
||||
/** 外商投资企业 */
|
||||
FOREIGN_INVESTED("外商投资企业", "外商投资企业"),
|
||||
|
||||
/** 港澳台投资企业 */
|
||||
HONG_KONG_MACAO_TAIWAN("港澳台投资企业", "港澳台投资企业");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
CorpType(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (CorpType type : values()) {
|
||||
if (type.getCode().equals(code)) {
|
||||
return type.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
/**
|
||||
* 数据来源枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum DataSource {
|
||||
|
||||
/** 手动录入 */
|
||||
MANUAL("MANUAL", "手动录入"),
|
||||
|
||||
/** 系统同步 */
|
||||
SYSTEM("SYSTEM", "系统同步"),
|
||||
|
||||
/** 批量导入 */
|
||||
IMPORT("IMPORT", "批量导入"),
|
||||
|
||||
/** 接口获取 */
|
||||
API("API", "接口获取");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
DataSource(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (DataSource source : values()) {
|
||||
if (source.getCode().equals(code)) {
|
||||
return source.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 员工状态枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum EmployeeStatus {
|
||||
|
||||
/** 在职 */
|
||||
ACTIVE("0", "在职"),
|
||||
|
||||
/** 离职 */
|
||||
INACTIVE("1", "离职");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
EmployeeStatus(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (EmployeeStatus status : values()) {
|
||||
if (status.getCode().equals(code)) {
|
||||
return status.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.ruoyi.info.collection.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 性别枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum Gender {
|
||||
|
||||
/** 男 */
|
||||
MALE("M", "男"),
|
||||
|
||||
/** 女 */
|
||||
FEMALE("F", "女"),
|
||||
|
||||
/** 其他 */
|
||||
OTHER("O", "其他");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
Gender(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (Gender gender : values()) {
|
||||
if (gender.getCode().equals(code)) {
|
||||
return gender.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user