Compare commits
139 Commits
addea20fa1
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| c5b2033a3d | |||
| d45e9410ef | |||
| 457e6c1d27 | |||
| 850f97ea22 | |||
| de6e6bd628 | |||
| 3a867e5857 | |||
| 19a60c987e | |||
| 7ce721ef93 | |||
| 000e8698a5 | |||
| 9d3e8beceb | |||
| 0ea504f6b3 | |||
| a39594faf8 | |||
| 1b45296df3 | |||
| 1fadb38d99 | |||
| 9917d10e59 | |||
| be443d1b31 | |||
| b822cc202e | |||
| 598f5dec1c | |||
| 0bf73a923f | |||
| ec67794f88 | |||
| 3ef45bc398 | |||
| 37e17ac903 | |||
| d561d068d6 | |||
| 43bc0e4f65 | |||
| 3fe78d8d3a | |||
| 4c58966529 | |||
| 3bc60fedeb | |||
| 4d1acc7484 | |||
| 402a0c3e2f | |||
| 5980ed0790 | |||
| 75cb8967da | |||
| 90a5c42313 | |||
| 356bcdd6de | |||
| 9a60371a8f | |||
| 380f9b4e7a | |||
| 928f65dfca | |||
| c64146ac40 | |||
| 0541ce0ac6 | |||
| 26c639134e | |||
| 0f7b57e824 | |||
| 104e8697fe | |||
| bbc6a2050b | |||
| bf7a4c0538 | |||
| b2e177dd24 | |||
| 2071d04c08 | |||
| 4988ab5944 | |||
| c00d5475e6 | |||
| 0b64532959 | |||
| 9f0ad4ce87 | |||
| 75b5989774 | |||
| 369c682564 | |||
| d8c069a836 | |||
| 6f2ea5994a | |||
| 95ac01d7dc | |||
| be5605c98a | |||
| cf91be838f | |||
| 592c58534a | |||
| 26be75adad | |||
| e48c9b4d49 | |||
| c0eedfaaa1 | |||
| 344b115038 | |||
| de9a7b3099 | |||
| aa08ab4711 | |||
| b7db711906 | |||
| b7d020c0b2 | |||
| d444eafd5f | |||
| c9398881f3 | |||
| d79a60ab8c | |||
| e9403662e2 | |||
| fd79bfe62f | |||
| c7f4982451 | |||
| 0b2571b962 | |||
| 129e44c808 | |||
| 50c177da78 | |||
| c660025bcc | |||
| bd51991248 | |||
| a2ba044ebe | |||
| 110817abba | |||
| ff9627d0d9 | |||
| 2d1b02474c | |||
| 5a9b79d4ee | |||
| 0c5fa6b2c8 | |||
| 94507e3747 | |||
| fc6af5234d | |||
| 624b51292f | |||
| 6385778e4c | |||
| 60a7906eb3 | |||
| 49118a4418 | |||
| d2d36d75a7 | |||
| bc2a885abf | |||
| 018b085447 | |||
| 55f6eb9129 | |||
| 2b321a8621 | |||
| c278d11390 | |||
| e0629f22e5 | |||
| 03ecbbd204 | |||
| eabd38fa58 | |||
| 03a4acb63a | |||
| 3286795f98 | |||
| 4c6ca52e7e | |||
| cc1a4538af | |||
| 5aaf6c83be | |||
| cb3265e796 | |||
| 8798aa9230 | |||
| 2fdf5f1546 | |||
| a32be65bf1 | |||
| 51810a325e | |||
| 6b24e02ba9 | |||
| d831edcaa4 | |||
| af63607069 | |||
| 0abc84c571 | |||
| 7dafabf7cb | |||
| 4dca2b2b63 | |||
| 001597d5e8 | |||
| 4b5ac7388c | |||
| 1e0813a84c | |||
| c8d45416cf | |||
| 09119a2365 | |||
| 5de46eabc5 | |||
| bcb2e39099 | |||
| 09b4cfe3c4 | |||
| c5a00f26ad | |||
| d4dc66a514 | |||
| 2877e26fa5 | |||
| 1a19dcbc13 | |||
| f981dc9906 | |||
| f0e2595a2b | |||
| 37e0c231a7 | |||
| 1397f12057 | |||
| 46e476e35b | |||
| bfac1f10d2 | |||
| d01362cc72 | |||
| 2aee9ff76e | |||
| 5b91cee935 | |||
| a3f49dc176 | |||
| 127a59bf78 | |||
| 988c2d3572 | |||
| f4a72a6110 | |||
| 3741ef5fe4 |
21
.gitignore
vendored
21
.gitignore
vendored
@@ -74,9 +74,30 @@ db_config.conf
|
|||||||
|
|
||||||
# Local deployment bundles
|
# Local deployment bundles
|
||||||
.deploy/
|
.deploy/
|
||||||
|
/ccdi_????????.zip
|
||||||
|
|
||||||
output/
|
output/
|
||||||
|
|
||||||
logs/
|
logs/
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
ruoyi-ui/vue.config.js
|
||||||
|
|
||||||
|
ruoyi-ui/dist.zip
|
||||||
|
|
||||||
|
*/src/test/
|
||||||
|
|
||||||
|
.pytest_cache/
|
||||||
|
|
||||||
|
tests/
|
||||||
|
|
||||||
|
tongweb_62318.properties
|
||||||
|
|
||||||
|
.superpowers/
|
||||||
|
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
.codegraph/
|
||||||
|
|
||||||
|
.claude/
|
||||||
17
.mcp.json
17
.mcp.json
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"mysql": {
|
|
||||||
"command": "node",
|
|
||||||
"args": [
|
|
||||||
"C:/Users/wkc/.codex/mcp-tools/mysql-server/node_modules/@fhuang/mcp-mysql-server/build/index.js"
|
|
||||||
],
|
|
||||||
"env": {
|
|
||||||
"MYSQL_DATABASE": "ccdi",
|
|
||||||
"MYSQL_HOST": "116.62.17.81",
|
|
||||||
"MYSQL_PASSWORD": "Kfcx@1234",
|
|
||||||
"MYSQL_PORT": "3306",
|
|
||||||
"MYSQL_USER": "root"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
24
.opencode
24
.opencode
@@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://opencode.ai/config.json",
|
|
||||||
"plugin": [
|
|
||||||
"oh-my-opencode@latest"
|
|
||||||
],
|
|
||||||
"agent": {
|
|
||||||
"Sisyphus-Junior": {
|
|
||||||
"mode": "subagent",
|
|
||||||
"model": "glm/glm-5"
|
|
||||||
},
|
|
||||||
"oracle": {
|
|
||||||
"mode": "subagent",
|
|
||||||
"model": "gmn/gpt-5.3-codex"
|
|
||||||
},
|
|
||||||
"Metis (Plan Consultant)": {
|
|
||||||
"mode": "subagent",
|
|
||||||
"model": "gmn/gpt-5.3-codex"
|
|
||||||
},
|
|
||||||
"Momus (Plan Critic)": {
|
|
||||||
"mode": "subagent",
|
|
||||||
"model": "gmn/gpt-5.3-codex"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
129
AGENTS.md
129
AGENTS.md
@@ -1,5 +1,44 @@
|
|||||||
# AGENTS.md - AI Coding Assistant Guide
|
# AGENTS.md - AI Coding Assistant Guide
|
||||||
|
|
||||||
|
## 全局执行规则
|
||||||
|
|
||||||
|
### Git
|
||||||
|
|
||||||
|
- Git 提交时使用中文添加描述
|
||||||
|
- 无视 `.DS_Store`
|
||||||
|
|
||||||
|
### AGENT
|
||||||
|
|
||||||
|
- `using-superpowers` 只有在用户明确声明调用时才允许启用;不要因为“会话开始”“任务较复杂”或“可能适用”而自动调用
|
||||||
|
- 当用户没有明确声明 `using-superpowers` 时,按普通流程直接处理需求
|
||||||
|
- 默认不开启 subagent
|
||||||
|
- 如用户明确要求启用 subagent,所有 subagent 必须使用 `gpt-5.5`;默认推理强度为高,审查类 subagent 的推理强度为超高,测试类 subagent 的推理强度为中
|
||||||
|
|
||||||
|
### 文档
|
||||||
|
|
||||||
|
- 写完的设计文档必须要由审查类子代理进行内容审查,确保方案与实施方法符合实际需求,并检查是否还有需要明确的功能点
|
||||||
|
- 当功能设计涉及到前端和后端都有改动时,输出两份执行文档,一份为后端的实施计划,一份为前端的实施计划。如果不是前后端架构的项目不需要输出两份执行文档
|
||||||
|
- 当功能修改只涉及到前端或只涉及到后端,只需要输出对应的实施计划
|
||||||
|
- 每一次改动都需要留下实施文档,记录修改的内容
|
||||||
|
- 每次写设计文档的时候,都要检查一下保存路径是否正确
|
||||||
|
|
||||||
|
### 测试
|
||||||
|
|
||||||
|
- 测试结束后,自动结束测试时开启的前后端进程
|
||||||
|
- 前端 Node 需要使用 nvm 进行控制版本
|
||||||
|
- 在完成页面功能开发后,必须使用 `browser-use` 技能打开浏览器进行实际页面测试,禁止打开 prototype 原型页面进行测试
|
||||||
|
- 所有生成的测试文件不需要上传到 Git
|
||||||
|
|
||||||
|
### 方案规范
|
||||||
|
|
||||||
|
当需要给出方案时必须符合以下规范:
|
||||||
|
|
||||||
|
- 不允许给出兼容性或补丁性的方案,不允许过度设计,保持最短路径实现且不能违反第一条要求
|
||||||
|
- 不允许自行给出用户提供的需求以外的方案,例如一些兜底和降级方案,这可能导致业务逻辑偏移问题
|
||||||
|
- 必须确保方案的逻辑正确,必须经过全链路的逻辑验证
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 项目概述
|
## 项目概述
|
||||||
|
|
||||||
本仓库是纪检初核系统主仓库,基于若依 `v3.9.1`,当前技术栈以 `Java 21 + Spring Boot 3 + Vue 2` 为主,并包含独立的流水分析 Mock 服务、Docker 部署文件、SQL 脚本、实施文档与测试文档。
|
本仓库是纪检初核系统主仓库,基于若依 `v3.9.1`,当前技术栈以 `Java 21 + Spring Boot 3 + Vue 2` 为主,并包含独立的流水分析 Mock 服务、Docker 部署文件、SQL 脚本、实施文档与测试文档。
|
||||||
@@ -15,19 +54,59 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 协作约定
|
## 高优先级规则
|
||||||
|
|
||||||
- 使用简体中文进行思考和对话
|
- 使用简体中文进行思考和对话
|
||||||
- Git 提交说明使用中文
|
- Git 提交说明必须使用中文
|
||||||
- Git 提交前必须检查暂存区,仅允许包含本次任务相关文件
|
- 忽略 `.DS_Store` 文件,不将其视为本次任务需要处理或提交的有效变更
|
||||||
- 若暂存区存在无关文件,必须先移出暂存或与用户确认,禁止顺带提交
|
- 仅当用户明确声明调用 `using-superpowers` 时才允许启用;未明确声明时按普通流程直接处理需求
|
||||||
- 根据设计文档产出实施计划时,默认输出两份文档:
|
- Git 提交前必须检查暂存区,仅允许包含本次任务相关文件;若存在无关文件,必须先移出暂存或与用户确认
|
||||||
- 后端实施计划放 `docs/plans/backend/`
|
- 每一次改动都需要留下实施文档,记录修改内容、影响范围与验证情况
|
||||||
- 前端实施计划放 `docs/plans/frontend/`
|
- 功能设计同时涉及前端和后端改动时,必须分别输出后端与前端两份实施计划;若仅涉及单侧,则只输出对应实施计划
|
||||||
- 前端开发直接在当前分支进行,不需要额外创建 git worktree
|
- 新增或修改设计文档、实施计划、实施记录前,必须先确认保存路径是否正确
|
||||||
|
- 前端相关安装、构建、调试、测试命令执行前,必须先通过 `nvm` 切换并确认 Node 版本
|
||||||
- 测试结束后,自动关闭测试过程中启动的前后端进程
|
- 测试结束后,自动关闭测试过程中启动的前后端进程
|
||||||
|
- 重启后端时,必须优先使用 `bin/restart_java_backend.sh`
|
||||||
|
- 禁止在前端源码、配置、示例数据或页面默认值中硬编码或预填真实账号密码;登录页不得将密码保存到 Cookie、localStorage 或 sessionStorage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 协作约定
|
||||||
|
|
||||||
|
### 基础协作
|
||||||
|
|
||||||
|
- 前端开发直接在当前分支进行,不需要额外创建 git worktree
|
||||||
|
- 给出方案时,必须保持最短路径实现,不允许提供兼容性、补丁性或过度设计的方案
|
||||||
|
- 不允许自行扩展出用户需求之外的兜底、降级或变体方案,避免业务逻辑偏移
|
||||||
|
- 输出方案前必须完成全链路逻辑校验,确保方案逻辑正确、链路闭环
|
||||||
|
|
||||||
|
### Git 与变更管理
|
||||||
|
|
||||||
|
- Git 提交前必须检查暂存区,仅保留本次任务相关文件
|
||||||
|
- 若暂存区存在无关文件,必须先移出暂存或与用户确认,禁止顺带提交
|
||||||
|
- `.DS_Store` 默认忽略,不纳入任务变更范围
|
||||||
|
|
||||||
|
### 文档产出
|
||||||
|
|
||||||
|
- 若需求来自设计文档,默认同时沉淀后端与前端两份实施计划
|
||||||
|
- 功能设计同时涉及前端和后端改动时,实施计划分别放在 `docs/plans/backend/` 与 `docs/plans/frontend/`
|
||||||
|
- 功能修改只涉及前端或只涉及后端时,只输出对应的实施计划
|
||||||
|
- 非前后端架构项目不强制拆分两份实施计划
|
||||||
|
- 每一次改动都需要留下实施文档,实施记录优先放在 `docs/reports/implementation/`
|
||||||
|
- 每次新增或修改设计文档、实施计划、实施记录前,都要先确认保存路径是否正确
|
||||||
|
|
||||||
|
### 测试与运行
|
||||||
|
|
||||||
|
- 测试结束后,自动关闭测试过程中启动的前后端进程
|
||||||
|
- 重启后端时,必须优先使用 `bin/restart_java_backend.sh`,不要直接手工执行 `java -jar` 替代正式重启流程
|
||||||
|
- 前端相关安装、构建、调试、测试命令执行前,必须先通过 `nvm` 切换并确认 Node 版本
|
||||||
|
|
||||||
|
### 数据库与编码
|
||||||
|
|
||||||
- 遇到 MCP 数据库操作时,使用项目配置文件中的数据库连接信息
|
- 遇到 MCP 数据库操作时,使用项目配置文件中的数据库连接信息
|
||||||
- 执行包含中文内容的 MySQL SQL 脚本或数据库导入时,禁止直接手写 `mysql -e` 或普通重定向执行;必须优先使用 `bin/mysql_utf8_exec.sh <sql-file>`,确保会话字符集为 `utf8mb4`,避免导入或写入乱码
|
- 执行包含中文内容的 MySQL SQL 脚本或数据库导入时,禁止直接手写 `mysql -e` 或普通重定向执行;必须优先使用 `bin/mysql_utf8_exec.sh <sql-file>`,确保会话字符集为 `utf8mb4`
|
||||||
|
- 所有业务表、系统表新增或修改时,必须显式使用 `utf8mb4` 字符集与 `utf8mb4_general_ci` 排序规则
|
||||||
|
- 禁止引入 `utf8mb4_0900_ai_ci`、`utf8mb4_unicode_ci` 或其他混用排序规则
|
||||||
- 银行流水打标相关规则与参数编码需要统一使用全大写;新增或修改 `rule_code`、`indicator_code`、`param_code` 时,禁止混用大小写风格
|
- 银行流水打标相关规则与参数编码需要统一使用全大写;新增或修改 `rule_code`、`indicator_code`、`param_code` 时,禁止混用大小写风格
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -41,7 +120,7 @@
|
|||||||
mvn clean compile
|
mvn clean compile
|
||||||
|
|
||||||
# 启动主应用(Jar)
|
# 启动主应用(Jar)
|
||||||
cd ruoyi-admin/target && java -jar ruoyi-admin.jar
|
sh bin/restart_java_backend.sh
|
||||||
|
|
||||||
# 打包全部模块
|
# 打包全部模块
|
||||||
mvn clean package
|
mvn clean package
|
||||||
@@ -61,6 +140,9 @@ mvn clean package -DskipTests
|
|||||||
```bash
|
```bash
|
||||||
cd ruoyi-ui
|
cd ruoyi-ui
|
||||||
|
|
||||||
|
# 使用 nvm 切换到项目所需 Node 版本
|
||||||
|
nvm use
|
||||||
|
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
npm install --registry=https://registry.npmmirror.com
|
npm install --registry=https://registry.npmmirror.com
|
||||||
|
|
||||||
@@ -164,7 +246,10 @@ return AjaxResult.success(result);
|
|||||||
- 非业务字段如 `create_by`、`create_time` 由后端自动维护
|
- 非业务字段如 `create_by`、`create_time` 由后端自动维护
|
||||||
- 前端表单不要暴露通用审计字段
|
- 前端表单不要暴露通用审计字段
|
||||||
- 新增菜单、字典、初始化数据时,同步补充 SQL 脚本
|
- 新增菜单、字典、初始化数据时,同步补充 SQL 脚本
|
||||||
- 执行数据库脚本或导入数据库前,需确认客户端会话字符集为 `utf8mb4`;涉及中文插入、更新、导入时默认使用 `bin/mysql_utf8_exec.sh`
|
- 执行数据库脚本或导入数据库前,需确认客户端会话字符集为 `utf8mb4`
|
||||||
|
- 涉及中文插入、更新、导入时默认使用 `bin/mysql_utf8_exec.sh`
|
||||||
|
- 所有系统表和业务表的表级、字符字段级排序规则统一为 `utf8mb4_general_ci`
|
||||||
|
- 新增建表 SQL、字段追加 SQL、表结构修复 SQL 必须显式声明字符集与排序规则,避免因默认排序规则漂移导致联表或条件查询报错
|
||||||
|
|
||||||
### 前端规范
|
### 前端规范
|
||||||
|
|
||||||
@@ -173,6 +258,7 @@ return AjaxResult.success(result);
|
|||||||
- 请求统一使用 `@/utils/request`
|
- 请求统一使用 `@/utils/request`
|
||||||
- 新增页面或功能入口时,同步检查 `sys_menu`、路由、权限标识
|
- 新增页面或功能入口时,同步检查 `sys_menu`、路由、权限标识
|
||||||
- 优先延续现有 `ccdi*` 业务目录与命名方式,不随意新造平行目录
|
- 优先延续现有 `ccdi*` 业务目录与命名方式,不随意新造平行目录
|
||||||
|
- 登录页只能在用户主动选择时保存用户名,不允许保存密码或预填默认密码
|
||||||
|
|
||||||
### 导入功能规范
|
### 导入功能规范
|
||||||
|
|
||||||
@@ -180,6 +266,18 @@ return AjaxResult.success(result);
|
|||||||
- 返回结果仅展示失败数据
|
- 返回结果仅展示失败数据
|
||||||
- 大数据量导入优先采用 EasyExcel + 异步处理
|
- 大数据量导入优先采用 EasyExcel + 异步处理
|
||||||
|
|
||||||
|
### 导入页面测试规范
|
||||||
|
|
||||||
|
- 导入功能测试必须进入真实业务页面执行,先在页面内下载当前导入模板,再基于该模板生成测试文件,禁止手工凭记忆新建表头或脱离页面直接构造上传文件
|
||||||
|
- 双 Sheet 模板的导入测试必须覆盖两个 Sheet 的联动关系;除“缺少 Sheet / 空 Sheet”专项场景外,默认两个 Sheet 都要准备测试数据
|
||||||
|
- 导入测试文件优先放在 `output/spreadsheet/` 或 `output/browser-use/`,不提交到 git
|
||||||
|
- 需要按场景拆分测试文件,避免多个互斥校验互相覆盖;至少覆盖空模板、主信息必填、主信息格式与金额、主从关系异常、供应商校验、缺少/空 Sheet、成功导入、成功与失败混合、失败记录查看、导入后清理回滚
|
||||||
|
- 主从关系异常测试至少覆盖:已存在主键、供应商有数据但主信息缺失、主信息重复、供应商 Sheet 中采购事项 ID 为空
|
||||||
|
- 供应商校验测试至少覆盖:重复供应商、多条中标、供应商名称为空、名称超长、联系人超长、银行账户超长、联系电话非法、统一信用代码非法、是否中标枚举非法
|
||||||
|
- 页面上传后必须核对页面提示、导入状态、失败记录弹窗和列表总数变化;异步导入场景还要核对任务状态从 `PROCESSING` 到最终状态的变化
|
||||||
|
- 对“成功导入 + 异常数据混合”的样本,必须额外核对成功数据是否真正入库、异常数据是否被拦截,以及是否存在被静默忽略的行
|
||||||
|
- 导入测试结束后,必须删除本轮成功写入的测试数据,清理页面本地导入任务缓存,并关闭测试过程中启动的前后端进程
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 当前仓库结构
|
## 当前仓库结构
|
||||||
@@ -225,15 +323,10 @@ ccdi/
|
|||||||
### 主要业务代码分布
|
### 主要业务代码分布
|
||||||
|
|
||||||
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/`
|
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/`
|
||||||
- 含 `controller`、`domain`、`mapper`、`service`、`annotation`、`validation` 等目录
|
|
||||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/`
|
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/`
|
||||||
- 含 `config`、`controller`、`domain`、`mapper`、`service`
|
|
||||||
- `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/`
|
- `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/`
|
||||||
- 含 `client`、`config`、`constants`、`controller`、`domain/request`、`domain/response`
|
|
||||||
- `ruoyi-ui/src/views/`
|
- `ruoyi-ui/src/views/`
|
||||||
- 当前包含 `ccdi`、`ccdiBaseStaff`、`ccdiProject`、`ccdiPurchaseTransaction`、`ccdiIntermediary`、亲属关系、员工调动、招聘等业务页面
|
|
||||||
- `ruoyi-ui/src/api/ccdi/`
|
- `ruoyi-ui/src/api/ccdi/`
|
||||||
- 放置纪检初核业务 API 封装
|
|
||||||
|
|
||||||
### 添加新后端模块时
|
### 添加新后端模块时
|
||||||
|
|
||||||
@@ -294,6 +387,9 @@ ccdi/
|
|||||||
- 只有历史资料或外部原始材料才放入 `assets/`
|
- 只有历史资料或外部原始材料才放入 `assets/`
|
||||||
- 如果移动了文档,需同步修正文档内引用路径
|
- 如果移动了文档,需同步修正文档内引用路径
|
||||||
- 若需求来自设计文档,默认同时沉淀后端与前端两份实施计划
|
- 若需求来自设计文档,默认同时沉淀后端与前端两份实施计划
|
||||||
|
- 功能设计同时涉及前端和后端改动时,必须分别输出后端与前端两份实施计划;若仅涉及前端或仅涉及后端,则只输出对应实施计划;非前后端架构项目不强制拆分双文档
|
||||||
|
- 每一次改动都需要留下实施文档,记录本次修改内容、影响范围与验证情况,实施记录优先放在 `docs/reports/implementation/`
|
||||||
|
- 每次新增或修改设计文档、实施计划、实施记录前,都要先确认保存路径是否正确
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -304,3 +400,4 @@ ccdi/
|
|||||||
- `docker/backend`、`docker/frontend`、`docker/mock` 分别对应三类运行时镜像
|
- `docker/backend`、`docker/frontend`、`docker/mock` 分别对应三类运行时镜像
|
||||||
- `sql/migration/` 用于增量迁移脚本,新增修复脚本优先按日期或功能命名
|
- `sql/migration/` 用于增量迁移脚本,新增修复脚本优先按日期或功能命名
|
||||||
- 启动前后端或 Mock 服务做验证后,结束测试时要主动停止进程,避免残留占用端口
|
- 启动前后端或 Mock 服务做验证后,结束测试时要主动停止进程,避免残留占用端口
|
||||||
|
- 前端相关安装、构建、调试、测试命令执行前,必须先通过 `nvm` 切换并确认 Node 版本
|
||||||
|
|||||||
669
CLAUDE.md
669
CLAUDE.md
@@ -1,669 +0,0 @@
|
|||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## 快速参考
|
|
||||||
|
|
||||||
**启动项目:**
|
|
||||||
- 后端: `mvn spring-boot:run` 或运行 `ry.bat`
|
|
||||||
- 前端: `cd ruoyi-ui && npm run dev`
|
|
||||||
|
|
||||||
**访问地址:**
|
|
||||||
- 前端: http://localhost:80
|
|
||||||
- 后端: http://localhost:8080
|
|
||||||
- Swagger: http://localhost:8080/swagger-ui/index.html
|
|
||||||
- Druid 监控: http://localhost:8080/druid/ (ruoyi/123456)
|
|
||||||
|
|
||||||
**测试账号:**
|
|
||||||
- 用户名: `admin`
|
|
||||||
- 密码: `admin123`
|
|
||||||
|
|
||||||
**获取 Token:**
|
|
||||||
```bash
|
|
||||||
POST http://localhost:8080/login/test?username=admin&password=admin123
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 项目概述
|
|
||||||
|
|
||||||
**纪检初核系统** - 基于 **若依管理系统 v3.9.1** 构建的企业级前后端分离管理系统,用于员工异常行为风险识别。
|
|
||||||
|
|
||||||
### 技术栈版本
|
|
||||||
|
|
||||||
| 后端技术 | 版本 | 前端技术 | 版本 |
|
|
||||||
|-----------------------------|--------|------------|---------|
|
|
||||||
| Spring Boot | 3.5.8 | Vue.js | 2.6.12 |
|
|
||||||
| Java | 21 | 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
|
|
||||||
|
|
||||||
# 安装依赖 (推荐使用国内镜像)
|
|
||||||
npm install --registry=https://registry.npmmirror.com
|
|
||||||
|
|
||||||
# 开发服务器 (端口 80)
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# 生产构建
|
|
||||||
npm run build:prod
|
|
||||||
|
|
||||||
# 预览生产构建
|
|
||||||
npm run preview
|
|
||||||
```
|
|
||||||
|
|
||||||
### 数据库初始化
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 初始化若依框架基础表
|
|
||||||
mysql -u root -p < sql/ry_20250522.sql
|
|
||||||
|
|
||||||
# 初始化定时任务表
|
|
||||||
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
|
|
||||||
# ... 其他业务表脚本
|
|
||||||
```
|
|
||||||
|
|
||||||
**注意:**
|
|
||||||
- 业务表脚本文件名以 `ccdi_` 或 `dpc_` 开头
|
|
||||||
- 部分脚本包含菜单数据,需要按顺序执行
|
|
||||||
- 数据库需要先创建(数据库名: `ccdi`)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 模块架构
|
|
||||||
|
|
||||||
```
|
|
||||||
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/ # 代码生成器
|
|
||||||
├── ccdi-info-collection/ # 【核心业务模块】信息采集
|
|
||||||
├── ccdi-project/ # 【核心业务模块】项目管理
|
|
||||||
├── ccdi-lsfx/ # 【核心业务模块】流水分析对接
|
|
||||||
├── lsfx-mock-server/ # 流水分析模拟服务器 (Python)
|
|
||||||
├── ruoyi-ui/ # 前端 Vue 应用
|
|
||||||
├── sql/ # 数据库脚本
|
|
||||||
├── bin/ # 启动脚本
|
|
||||||
└── doc/ # 项目文档
|
|
||||||
```
|
|
||||||
|
|
||||||
### 模块依赖关系
|
|
||||||
|
|
||||||
```
|
|
||||||
ruoyi-admin (启动模块)
|
|
||||||
├── ruoyi-framework (核心安全配置)
|
|
||||||
├── ruoyi-system (系统核心业务)
|
|
||||||
├── ruoyi-common (共享工具)
|
|
||||||
├── ruoyi-quartz (定时任务)
|
|
||||||
├── ruoyi-generator (代码生成)
|
|
||||||
├── ccdi-info-collection (信息采集模块)
|
|
||||||
│ └── 依赖 ruoyi-common
|
|
||||||
├── ccdi-project (项目管理模块)
|
|
||||||
│ └── 依赖 ruoyi-common
|
|
||||||
└── ccdi-lsfx (流水分析对接模块)
|
|
||||||
└── 依赖 ruoyi-common
|
|
||||||
```
|
|
||||||
|
|
||||||
**添加新业务模块:**
|
|
||||||
1. 在根目录 `pom.xml` 的 `<modules>` 中添加新模块
|
|
||||||
2. 在新模块的 `pom.xml` 中添加对 `ruoyi-common` 的依赖
|
|
||||||
3. 在 `ruoyi-admin/pom.xml` 中添加对新模块的依赖
|
|
||||||
4. 在新模块中按照分层规范创建 controller/service/mapper/domain 包
|
|
||||||
|
|
||||||
### ccdi-info-collection 业务模块 (核心)
|
|
||||||
|
|
||||||
自定义业务模块,包含以下核心功能:
|
|
||||||
|
|
||||||
| 功能 | Controller | 实体类 |
|
|
||||||
|----------|---------------------------------------|-----------------------------|
|
|
||||||
| 员工基础信息 | CcdiBaseStaffController | CcdiBaseStaff |
|
|
||||||
| 中介黑名单 | CcdiIntermediaryController | CcdiBizIntermediary |
|
|
||||||
| 员工家庭关系 | CcdiStaffFmyRelationController | CcdiStaffFmyRelation |
|
|
||||||
| 员工企业关系 | CcdiStaffEnterpriseRelationController | CcdiStaffEnterpriseRelation |
|
|
||||||
| 信贷客户家庭关系 | CcdiCustFmyRelationController | CcdiCustFmyRelation |
|
|
||||||
| 信贷客户企业关系 | CcdiCustEnterpriseRelationController | CcdiCustEnterpriseRelation |
|
|
||||||
| 员工调动记录 | CcdiStaffTransferController | CcdiStaffTransfer |
|
|
||||||
| 员工招聘记录 | CcdiStaffRecruitmentController | CcdiStaffRecruitment |
|
|
||||||
| 采购交易 | CcdiPurchaseTransactionController | CcdiPurchaseTransaction |
|
|
||||||
|
|
||||||
**分层结构:**
|
|
||||||
|
|
||||||
- Controller: `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/`
|
|
||||||
- Service: `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/`
|
|
||||||
- Mapper: `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/`
|
|
||||||
- Domain: `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/`
|
|
||||||
- dto/: 数据传输对象
|
|
||||||
- vo/: 视图对象
|
|
||||||
- excel/: Excel导入导出实体
|
|
||||||
- XML映射: `ccdi-info-collection/src/main/resources/mapper/info/collection/`
|
|
||||||
|
|
||||||
### ccdi-project 业务模块 (核心)
|
|
||||||
|
|
||||||
项目管理模块,用于管理纪检初核项目的全生命周期:
|
|
||||||
|
|
||||||
**核心功能:**
|
|
||||||
- 项目创建、更新、删除、查询
|
|
||||||
- 项目状态管理 (进行中、已完成、已归档)
|
|
||||||
- 项目统计(按状态统计数量)
|
|
||||||
- 模型参数配置管理
|
|
||||||
|
|
||||||
**主要 Controller:**
|
|
||||||
- CcdiProjectController: 项目管理
|
|
||||||
- CcdiModelParamController: 模型参数配置
|
|
||||||
|
|
||||||
**分层结构:**
|
|
||||||
- Controller: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/`
|
|
||||||
- Service: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/`
|
|
||||||
- Mapper: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/`
|
|
||||||
- Domain: `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/`
|
|
||||||
- XML映射: `ccdi-project/src/main/resources/mapper/ccdi/project/`
|
|
||||||
|
|
||||||
### ccdi-lsfx 业务模块 (核心)
|
|
||||||
|
|
||||||
流水分析平台对接模块,用于与外部流水分析系统交互:
|
|
||||||
|
|
||||||
**核心功能:**
|
|
||||||
- 获取访问令牌 (Token)
|
|
||||||
- 上传流水文件并解析
|
|
||||||
- 拉取行内流水数据
|
|
||||||
- 查询解析状态和结果
|
|
||||||
- 获取银行流水明细
|
|
||||||
|
|
||||||
**主要组件:**
|
|
||||||
- LsfxAnalysisClient: 流水分析平台客户端
|
|
||||||
- LsfxTestController: 测试接口
|
|
||||||
|
|
||||||
**配置项 (application-dev.yml):**
|
|
||||||
```yaml
|
|
||||||
lsfx:
|
|
||||||
api:
|
|
||||||
base-url: http://localhost:8000 # 流水分析平台地址
|
|
||||||
app-id: your-app-id
|
|
||||||
app-secret: your-app-secret
|
|
||||||
client-id: your-client-id
|
|
||||||
endpoints:
|
|
||||||
get-token: /api/auth/token
|
|
||||||
upload-file: /api/files/upload
|
|
||||||
fetch-inner-flow: /api/flow/inner
|
|
||||||
```
|
|
||||||
|
|
||||||
**分层结构:**
|
|
||||||
- Client: `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/client/`
|
|
||||||
- Controller: `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/controller/`
|
|
||||||
- Domain: `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/domain/`
|
|
||||||
- request/: 请求对象
|
|
||||||
- response/: 响应对象
|
|
||||||
- Config: `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/config/`
|
|
||||||
|
|
||||||
### lsfx-mock-server (开发测试工具)
|
|
||||||
|
|
||||||
Python 实现的流水分析平台模拟服务器,用于本地开发和测试:
|
|
||||||
|
|
||||||
**用途:**
|
|
||||||
- 模拟流水分析平台的 API 接口
|
|
||||||
- 提供测试数据和模拟响应
|
|
||||||
- 支持错误场景模拟
|
|
||||||
|
|
||||||
**启动方式:**
|
|
||||||
```bash
|
|
||||||
cd lsfx-mock-server
|
|
||||||
python app.py # 默认监听 http://localhost:8000
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 后端开发规范
|
|
||||||
|
|
||||||
### 通用规范
|
|
||||||
|
|
||||||
- **新模块命名**: 项目英文名首字母集合 + 主要功能 (如 `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 请求定义 (与后端 Controller 对应)
|
|
||||||
├── views/ # 页面组件 (按功能模块组织)
|
|
||||||
│ ├── ccdiBaseStaff/
|
|
||||||
│ ├── ccdiIntermediary/
|
|
||||||
│ └── ...
|
|
||||||
├── components/ # 可复用组件 (复杂组件需拆分)
|
|
||||||
├── router/ # 路由配置
|
|
||||||
└── store/ # Vuex 状态管理
|
|
||||||
```
|
|
||||||
|
|
||||||
### API 调用示例
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import request from '@/utils/request'
|
|
||||||
|
|
||||||
export function listStaff(query) {
|
|
||||||
return request({
|
|
||||||
url: '/ccdi/baseStaff/list',
|
|
||||||
method: 'get',
|
|
||||||
params: query
|
|
||||||
})
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 菜单联动
|
|
||||||
|
|
||||||
添加页面和组件后,需要同步修改数据库中的菜单表 (`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));
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**导入流程:**
|
|
||||||
1. 前端上传 Excel 文件
|
|
||||||
2. 后端异步处理,返回 taskId
|
|
||||||
3. 前端轮询 `/import/status/{taskId}` 获取导入进度
|
|
||||||
4. 导入完成后,可获取成功/失败数据统计
|
|
||||||
|
|
||||||
**导入结果处理:**
|
|
||||||
- 只返回导入失败的数据(含失败原因)
|
|
||||||
- 成功数据不返回,减少响应体积
|
|
||||||
- 支持批量插入,提高性能
|
|
||||||
|
|
||||||
### EasyExcel 字典下拉框
|
|
||||||
|
|
||||||
导入模板支持字典下拉框配置,提升数据录入准确性。使用 `DictDropdownWriteHandler` 实现。
|
|
||||||
|
|
||||||
### 权限控制
|
|
||||||
|
|
||||||
基于 Spring Security + JWT 的角色菜单权限系统:
|
|
||||||
|
|
||||||
- 权限格式: `system:user:edit`, `ccdi:staff:list`
|
|
||||||
- 数据权限: 支持全部、自定义、部门等范围
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 测试与验证
|
|
||||||
|
|
||||||
### 测试账号
|
|
||||||
|
|
||||||
- **用户名**: `admin`
|
|
||||||
- **密码**: `admin123`
|
|
||||||
|
|
||||||
### 登录获取 Token
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 登录接口
|
|
||||||
POST /login/test?username=admin&password=admin123
|
|
||||||
```
|
|
||||||
|
|
||||||
### API 文档
|
|
||||||
|
|
||||||
- **Swagger UI**: `/swagger-ui/index.html`
|
|
||||||
- **API Docs**: `/v3/api-docs`
|
|
||||||
|
|
||||||
### 测试规范
|
|
||||||
|
|
||||||
- 不在命令行启动后端进行测试
|
|
||||||
- 生成可执行的测试脚本进行验证
|
|
||||||
- 测试完成后保存接口输出并生成测试用例报告
|
|
||||||
|
|
||||||
### 开发调试技巧
|
|
||||||
|
|
||||||
**使用 Swagger 测试接口:**
|
|
||||||
1. 访问 `/swagger-ui/index.html`
|
|
||||||
2. 点击接口展开详情
|
|
||||||
3. 点击 "Try it out" 进行测试
|
|
||||||
4. 填写参数后点击 "Execute" 执行
|
|
||||||
|
|
||||||
**查看 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
|
|
||||||
|
|
||||||
### 流水分析平台配置
|
|
||||||
|
|
||||||
项目集成了外部流水分析平台,配置项位于 `application-dev.yml`:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
lsfx:
|
|
||||||
api:
|
|
||||||
base-url: http://localhost:8000 # 流水分析平台基础地址
|
|
||||||
app-id: ccdi-app # 应用ID
|
|
||||||
app-secret: ccdi-secret-2024 # 应用密钥
|
|
||||||
client-id: ccdi-client # 客户端ID
|
|
||||||
endpoints:
|
|
||||||
get-token: /api/auth/token # 获取令牌接口
|
|
||||||
upload-file: /api/files/upload # 文件上传接口
|
|
||||||
fetch-inner-flow: /api/flow/inner # 拉取行内流水接口
|
|
||||||
```
|
|
||||||
|
|
||||||
**开发环境使用 Mock 服务器:**
|
|
||||||
- 本地开发时,将 `base-url` 设置为 `http://localhost:8000`
|
|
||||||
- 启动 `lsfx-mock-server` 提供模拟接口
|
|
||||||
- 生产环境替换为真实的流水分析平台地址
|
|
||||||
|
|
||||||
### MCP 配置
|
|
||||||
|
|
||||||
项目使用 MCP (Model Context Protocol) 连接数据库,配置文件: `.mcp.json`
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"mysql": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": ["-y", "@fhuang/mcp-mysql-server"],
|
|
||||||
"env": {
|
|
||||||
"MYSQL_HOST": "116.62.17.81",
|
|
||||||
"MYSQL_PORT": "3306",
|
|
||||||
"MYSQL_USER": "root",
|
|
||||||
"MYSQL_PASSWORD": "Kfcx@1234",
|
|
||||||
"MYSQL_DATABASE": "ccdi"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**使用场景:**
|
|
||||||
- 通过 MCP 工具直接查询和操作数据库
|
|
||||||
- 在开发过程中快速验证数据
|
|
||||||
- 生成测试数据和调试 SQL
|
|
||||||
|
|
||||||
### 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 | `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/` |
|
|
||||||
| 信息采集 Mapper XML | `ccdi-info-collection/src/main/resources/mapper/info/collection/` |
|
|
||||||
| 项目管理 Controller | `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/` |
|
|
||||||
| 项目管理 Mapper XML | `ccdi-project/src/main/resources/mapper/ccdi/project/` |
|
|
||||||
| 流水分析 Client | `ccdi-lsfx/src/main/java/com/ruoyi/lsfx/client/LsfxAnalysisClient.java` |
|
|
||||||
| 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. 检查必填字段是否为空
|
|
||||||
|
|
||||||
### 流水分析平台连接失败
|
|
||||||
|
|
||||||
**检查项:**
|
|
||||||
1. 确认 `lsfx-mock-server` 已启动(开发环境)
|
|
||||||
2. 检查 `application-dev.yml` 中的 `lsfx.api.base-url` 配置
|
|
||||||
3. 验证 app-id、app-secret、client-id 是否正确
|
|
||||||
4. 检查网络连接和防火墙设置
|
|
||||||
5. 查看后端日志中的 HTTP 请求错误信息
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 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>
|
|
||||||
```
|
|
||||||
@@ -51,6 +51,7 @@
|
|||||||
"msg": "查询成功",
|
"msg": "查询成功",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
|
"id": 1002,
|
||||||
"recruitId": "REC20250205001",
|
"recruitId": "REC20250205001",
|
||||||
"recruitName": "2025春季校园招聘",
|
"recruitName": "2025春季校园招聘",
|
||||||
"posName": "Java开发工程师",
|
"posName": "Java开发工程师",
|
||||||
@@ -80,19 +81,19 @@
|
|||||||
|
|
||||||
### 1.2 查询招聘信息详情
|
### 1.2 查询招聘信息详情
|
||||||
|
|
||||||
**接口描述:** 根据招聘项目编号查询详细信息
|
**接口描述:** 根据招聘信息主键ID查询详细信息
|
||||||
|
|
||||||
**请求方式:** `GET`
|
**请求方式:** `GET`
|
||||||
|
|
||||||
**接口路径:** `/ccdi/staffRecruitment/{recruitId}`
|
**接口路径:** `/ccdi/staffRecruitment/{id}`
|
||||||
|
|
||||||
**权限标识:** `ccdi:staffRecruitment:query`
|
**权限标识:** `ccdi:staffRecruitment:query`
|
||||||
|
|
||||||
**路径参数:**
|
**路径参数:**
|
||||||
|
|
||||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||||
|-----------|--------|----|--------|----------------|
|
|------|------|----|--------------|-----|
|
||||||
| recruitId | String | 是 | 招聘项目编号 | REC20250205001 |
|
| id | Long | 是 | 招聘信息主键ID | 1002 |
|
||||||
|
|
||||||
**响应示例:**
|
**响应示例:**
|
||||||
|
|
||||||
@@ -101,6 +102,7 @@
|
|||||||
"code": 200,
|
"code": 200,
|
||||||
"msg": "操作成功",
|
"msg": "操作成功",
|
||||||
"data": {
|
"data": {
|
||||||
|
"id": 1002,
|
||||||
"recruitId": "REC20250205001",
|
"recruitId": "REC20250205001",
|
||||||
"recruitName": "2025春季校园招聘",
|
"recruitName": "2025春季校园招聘",
|
||||||
"posName": "Java开发工程师",
|
"posName": "Java开发工程师",
|
||||||
@@ -237,15 +239,15 @@
|
|||||||
|
|
||||||
**请求方式:** `DELETE`
|
**请求方式:** `DELETE`
|
||||||
|
|
||||||
**接口路径:** `/ccdi/staffRecruitment/{recruitIds}`
|
**接口路径:** `/ccdi/staffRecruitment/{ids}`
|
||||||
|
|
||||||
**权限标识:** `ccdi:staffRecruitment:remove`
|
**权限标识:** `ccdi:staffRecruitment:remove`
|
||||||
|
|
||||||
**路径参数:**
|
**路径参数:**
|
||||||
|
|
||||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||||
|------------|----------|----|------------------|-------------------------------|
|
|------|------|----|-----------------------|----------|
|
||||||
| recruitIds | String[] | 是 | 招聘项目编号数组,多个用逗号分隔 | REC20250205001,REC20250205002 |
|
| ids | Long[] | 是 | 招聘信息主键ID数组,多个用逗号分隔 | 1002,1003 |
|
||||||
|
|
||||||
**响应示例:**
|
**响应示例:**
|
||||||
|
|
||||||
@@ -276,7 +278,7 @@
|
|||||||
|
|
||||||
| 序号 | 字段名 | 说明 | 必填 |
|
| 序号 | 字段名 | 说明 | 必填 |
|
||||||
|----|----------|-----------|----|
|
|----|----------|-----------|----|
|
||||||
| 1 | 招聘项目编号 | 唯一标识 | 是 |
|
| 1 | 招聘项目编号 | 允许重复 | 是 |
|
||||||
| 2 | 招聘项目名称 | - | 是 |
|
| 2 | 招聘项目名称 | - | 是 |
|
||||||
| 3 | 职位名称 | - | 是 |
|
| 3 | 职位名称 | - | 是 |
|
||||||
| 4 | 职位类别 | - | 是 |
|
| 4 | 职位类别 | - | 是 |
|
||||||
@@ -326,7 +328,7 @@
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"code": 500,
|
"code": 500,
|
||||||
"msg": "很抱歉,导入完成!成功 8 条,失败 2 条,错误如下:<br/>1、招聘项目编号 REC001 导入失败:该招聘项目编号已存在<br/>2、招聘项目编号 REC002 导入失败:证件号码格式不正确"
|
"msg": "很抱歉,导入完成!成功 8 条,失败 2 条,错误如下:<br/>1、招聘项目编号 REC001 导入失败:历史工作经历匹配到多条招聘主信息<br/>2、招聘项目编号 REC002 导入失败:证件号码格式不正确"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -375,14 +377,14 @@ Excel导入导出对象,使用EasyExcel注解。
|
|||||||
| 401 | 未授权,请先登录 |
|
| 401 | 未授权,请先登录 |
|
||||||
| 403 | 无权限访问 |
|
| 403 | 无权限访问 |
|
||||||
| 404 | 资源不存在 |
|
| 404 | 资源不存在 |
|
||||||
| 409 | 主键冲突 |
|
| 409 | 数据冲突 |
|
||||||
| 500 | 服务器内部错误 |
|
| 500 | 服务器内部错误 |
|
||||||
|
|
||||||
### 常见业务错误
|
### 常见业务错误
|
||||||
|
|
||||||
| 错误信息 | 说明 |
|
| 错误信息 | 说明 |
|
||||||
|------------|--------------------|
|
|------------|--------------------|
|
||||||
| 该招聘项目编号已存在 | 新增时recruitId重复 |
|
| 历史工作经历匹配到多条招聘主信息 | 招聘项目编号重复且候选人、项目名、职位名仍无法唯一匹配从表归属 |
|
||||||
| 招聘项目编号不能为空 | recruitId字段为空 |
|
| 招聘项目编号不能为空 | recruitId字段为空 |
|
||||||
| 证件号码格式不正确 | 身份证号格式验证失败 |
|
| 证件号码格式不正确 | 身份证号格式验证失败 |
|
||||||
| 毕业年月格式不正确 | candGrad不是YYYYMM格式 |
|
| 毕业年月格式不正确 | candGrad不是YYYYMM格式 |
|
||||||
|
|||||||
@@ -1,22 +1,23 @@
|
|||||||
4.员工招聘信息表:ccdi_staff_recruitment,,,,,,
|
4.员工招聘信息表:ccdi_staff_recruitment,,,,,,
|
||||||
序号,字段名,类型,默认值,是否可为空,是否主键,注释
|
序号,字段名,类型,默认值,是否可为空,是否主键,注释
|
||||||
1,recruit_id,VARCHAR(32),,否,是,招聘项目编号
|
1,id,BIGINT,,否,是,主键ID
|
||||||
2,recruit_name,VARCHAR(100),,否,否,招聘项目名称
|
2,recruit_id,VARCHAR(32),,否,否,招聘项目编号(允许重复)
|
||||||
3,pos_name,VARCHAR(100),,否,否,职位名称
|
3,recruit_name,VARCHAR(100),,否,否,招聘项目名称
|
||||||
4,pos_category,VARCHAR(50),,否,否,职位类别
|
4,pos_name,VARCHAR(100),,否,否,职位名称
|
||||||
5,pos_desc,TEXT,,否,否,职位描述
|
5,pos_category,VARCHAR(50),,否,否,职位类别
|
||||||
6,cand_name,VARCHAR(20),,否,否,应聘人员姓名
|
6,pos_desc,TEXT,,否,否,职位描述
|
||||||
7,cand_edu,VARCHAR(20),,否,否,应聘人员学历
|
7,cand_name,VARCHAR(20),,否,否,应聘人员姓名
|
||||||
8,cand_id,VARCHAR(18),,否,否,应聘人员证件号码
|
8,cand_edu,VARCHAR(20),,否,否,应聘人员学历
|
||||||
9,cand_school,VARCHAR(50),,否,否,应聘人员毕业院校
|
9,cand_id,VARCHAR(18),,否,否,应聘人员证件号码
|
||||||
10,cand_major,VARCHAR(30),,否,否,应聘人员专业
|
10,cand_school,VARCHAR(50),,否,否,应聘人员毕业院校
|
||||||
11,cand_grad,VARCHAR(6),,否,否,应聘人员毕业年月
|
11,cand_major,VARCHAR(30),,否,否,应聘人员专业
|
||||||
12,admit_status,VARCHAR(10),,否,否,记录录用情况:录用、未录用、放弃等
|
12,cand_grad,VARCHAR(6),,否,否,应聘人员毕业年月
|
||||||
13,interviewer_name1,VARCHAR(20),,是,否,面试官1姓名
|
13,admit_status,VARCHAR(10),,否,否,记录录用情况:录用、未录用、放弃等
|
||||||
14,interviewer_id1,VARCHAR(10),,是,否,面试官1工号
|
14,interviewer_name1,VARCHAR(20),,是,否,面试官1姓名
|
||||||
13,interviewer_name2,VARCHAR(20),,是,否,面试官2姓名
|
15,interviewer_id1,VARCHAR(10),,是,否,面试官1工号
|
||||||
14,interviewer_id2,VARCHAR(10),,是,否,面试官2工号
|
16,interviewer_name2,VARCHAR(20),,是,否,面试官2姓名
|
||||||
16,created_by,VARCHAR(20),-,否,否,记录创建人
|
17,interviewer_id2,VARCHAR(10),,是,否,面试官2工号
|
||||||
17,updated_by,VARCHAR(20),-,是,否,记录更新人
|
18,created_by,VARCHAR(20),-,否,否,记录创建人
|
||||||
18,create_time,VARCHAR(10),0000-00-00,是,否,创建时间
|
19,updated_by,VARCHAR(20),-,是,否,记录更新人
|
||||||
19,update_time,VARCHAR(10),0000-00-00,是,否,更新时间
|
20,create_time,VARCHAR(10),0000-00-00,是,否,创建时间
|
||||||
|
21,update_time,VARCHAR(10),0000-00-00,是,否,更新时间
|
||||||
|
|||||||
|
3
assets/图谱.txt
Normal file
3
assets/图谱.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
关系图谱:http://64.202.65.112:8082/atlas/refactor/#/home/graph/downloadService?id=lanxitest&mode=K_EXPAND&type=NORMAL&atlasToken=2C914E5E1FBFBC4AD15163E0AB03B800¶ms={"vId":"rel_node/15942f5b84bada01ccd25f5e5678ac22"}
|
||||||
|
|
||||||
|
资金流图谱:http://64.202.65.112:8082/atlas/refactor/#/home/graph/downloadService?id=ccdi_lanxi_trans&mode=K_EXPAND&type=NORMAL&atlasToken=F4BBA291A285858BAF4526C6EC312388¶ms={"vId":"idno_node/f2f797081494c5c0555a3bbf0f57c5e7"}
|
||||||
BIN
assets/异常账户.xlsx
Normal file
BIN
assets/异常账户.xlsx
Normal file
Binary file not shown.
@@ -83,7 +83,7 @@ collect_pids() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
marker_pids=$(pgrep -f "$APP_MARKER" 2>/dev/null || true)
|
marker_pids=$(pgrep -f -- "$APP_MARKER" 2>/dev/null || true)
|
||||||
if [ -n "${marker_pids:-}" ]; then
|
if [ -n "${marker_pids:-}" ]; then
|
||||||
for pid in $marker_pids; do
|
for pid in $marker_pids; do
|
||||||
if is_managed_backend_pid "$pid"; then
|
if is_managed_backend_pid "$pid"; then
|
||||||
@@ -92,6 +92,15 @@ collect_pids() {
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
port_pids=$(lsof -tiTCP:"$SERVER_PORT" -sTCP:LISTEN 2>/dev/null || true)
|
||||||
|
if [ -n "${port_pids:-}" ]; then
|
||||||
|
for pid in $port_pids; do
|
||||||
|
if is_managed_backend_pid "$pid"; then
|
||||||
|
all_pids="$all_pids $pid"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
unique_pids=""
|
unique_pids=""
|
||||||
for pid in $all_pids; do
|
for pid in $all_pids; do
|
||||||
case " $unique_pids " in
|
case " $unique_pids " in
|
||||||
@@ -206,7 +215,7 @@ follow_logs() {
|
|||||||
start_action() {
|
start_action() {
|
||||||
running_pids=$(collect_pids)
|
running_pids=$(collect_pids)
|
||||||
if [ -n "${running_pids:-}" ]; then
|
if [ -n "${running_pids:-}" ]; then
|
||||||
log_error "检测到已有后端进程在运行: $running_pids,请先执行 stop 或 restart"
|
log_error "检测到已有后端进程在运行: ${running_pids},请先执行 stop 或 restart"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,12 @@
|
|||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ccdi-lsfx</artifactId>
|
||||||
|
<version>3.9.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -80,18 +80,6 @@ public class CcdiAccountInfoController extends BaseController {
|
|||||||
return success(accountInfoService.selectAccountInfoById(id));
|
return success(accountInfoService.selectAccountInfoById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 导出账户库列表
|
|
||||||
*/
|
|
||||||
@Operation(summary = "导出账户库列表")
|
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:export')")
|
|
||||||
@Log(title = "账户库管理", businessType = BusinessType.EXPORT)
|
|
||||||
@PostMapping("/export")
|
|
||||||
public void export(HttpServletResponse response, CcdiAccountInfoQueryDTO queryDTO) {
|
|
||||||
List<CcdiAccountInfoExcel> list = accountInfoService.selectAccountInfoListForExport(queryDTO);
|
|
||||||
EasyExcelUtil.exportExcel(response, list, CcdiAccountInfoExcel.class, "账户库管理");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增账户
|
* 新增账户
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffAddDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffAddDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffAssetInfoExcel;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.*;
|
import com.ruoyi.info.collection.domain.vo.*;
|
||||||
import com.ruoyi.info.collection.service.ICcdiBaseStaffImportService;
|
import com.ruoyi.info.collection.service.ICcdiBaseStaffImportService;
|
||||||
@@ -70,18 +71,6 @@ public class CcdiBaseStaffController extends BaseController {
|
|||||||
return success(list);
|
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, "员工信息");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取员工详细信息
|
* 获取员工详细信息
|
||||||
*/
|
*/
|
||||||
@@ -132,7 +121,14 @@ public class CcdiBaseStaffController extends BaseController {
|
|||||||
@Operation(summary = "下载导入模板")
|
@Operation(summary = "下载导入模板")
|
||||||
@PostMapping("/importTemplate")
|
@PostMapping("/importTemplate")
|
||||||
public void importTemplate(HttpServletResponse response) {
|
public void importTemplate(HttpServletResponse response) {
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiBaseStaffExcel.class, "员工信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(
|
||||||
|
response,
|
||||||
|
CcdiBaseStaffExcel.class,
|
||||||
|
"员工信息",
|
||||||
|
CcdiBaseStaffAssetInfoExcel.class,
|
||||||
|
"员工资产信息",
|
||||||
|
"员工信息维护导入模板"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -142,21 +138,26 @@ public class CcdiBaseStaffController extends BaseController {
|
|||||||
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:import')")
|
@PreAuthorize("@ss.hasPermi('ccdi:baseStaff:import')")
|
||||||
@Log(title = "员工信息", businessType = BusinessType.IMPORT)
|
@Log(title = "员工信息", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
|
public AjaxResult importData(MultipartFile file) throws Exception {
|
||||||
List<CcdiBaseStaffExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiBaseStaffExcel.class);
|
List<CcdiBaseStaffExcel> staffList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiBaseStaffExcel.class,
|
||||||
|
"员工信息"
|
||||||
|
);
|
||||||
|
List<CcdiBaseStaffAssetInfoExcel> assetList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiBaseStaffAssetInfoExcel.class,
|
||||||
|
"员工资产信息"
|
||||||
|
);
|
||||||
|
|
||||||
if (list == null || list.isEmpty()) {
|
boolean hasStaffRows = staffList != null && !staffList.isEmpty();
|
||||||
|
boolean hasAssetRows = assetList != null && !assetList.isEmpty();
|
||||||
|
|
||||||
|
if (!hasStaffRows && !hasAssetRows) {
|
||||||
return error("至少需要一条数据");
|
return error("至少需要一条数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交异步任务
|
BaseStaffImportSubmitResultVO result = baseStaffService.importBaseStaffWithAssets(staffList, assetList);
|
||||||
String taskId = baseStaffService.importBaseStaff(list, updateSupport);
|
|
||||||
|
|
||||||
// 立即返回,不等待后台任务完成
|
|
||||||
ImportResultVO result = new ImportResultVO();
|
|
||||||
result.setTaskId(taskId);
|
|
||||||
result.setStatus("PROCESSING");
|
|
||||||
result.setMessage("导入任务已提交,正在后台处理");
|
|
||||||
|
|
||||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||||
}
|
}
|
||||||
@@ -202,4 +203,5 @@ public class CcdiBaseStaffController extends BaseController {
|
|||||||
|
|
||||||
return getDataTable(pageData, failures.size());
|
return getDataTable(pageData, failures.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,18 +63,6 @@ public class CcdiCustEnterpriseRelationController extends BaseController {
|
|||||||
return getDataTable(result.getRecords(), result.getTotal());
|
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, "信贷客户实体关联信息");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取信贷客户实体关联详细信息
|
* 获取信贷客户实体关联详细信息
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -103,17 +103,6 @@ public class CcdiCustFmyRelationController extends BaseController {
|
|||||||
return toAjax(relationService.deleteRelationByIds(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注解自动添加下拉框
|
* 使用@DictDropdown注解自动添加下拉框
|
||||||
|
|||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package com.ruoyi.info.collection.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
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 com.ruoyi.info.collection.domain.dto.CcdiEnterpriseBaseInfoAddDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiEnterpriseBaseInfoEditDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiEnterpriseBaseInfoQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiEnterpriseBaseInfoExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiEnterpriseBaseInfoVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.EnterpriseBaseInfoImportFailureVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||||
|
import com.ruoyi.info.collection.service.ICcdiEnterpriseBaseInfoImportService;
|
||||||
|
import com.ruoyi.info.collection.service.ICcdiEnterpriseBaseInfoService;
|
||||||
|
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||||
|
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.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实体库管理 Controller
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-17
|
||||||
|
*/
|
||||||
|
@Tag(name = "实体库管理")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/ccdi/enterpriseBaseInfo")
|
||||||
|
public class CcdiEnterpriseBaseInfoController extends BaseController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ICcdiEnterpriseBaseInfoService enterpriseBaseInfoService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ICcdiEnterpriseBaseInfoImportService enterpriseBaseInfoImportService;
|
||||||
|
|
||||||
|
@Operation(summary = "查询实体库列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:list')")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo list(CcdiEnterpriseBaseInfoQueryDTO queryDTO) {
|
||||||
|
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||||
|
Page<CcdiEnterpriseBaseInfoVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||||
|
Page<CcdiEnterpriseBaseInfoVO> result = enterpriseBaseInfoService.selectEnterpriseBaseInfoPage(page, queryDTO);
|
||||||
|
return getDataTable(result.getRecords(), result.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "获取实体库详细信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:query')")
|
||||||
|
@GetMapping("/{socialCreditCode}")
|
||||||
|
public AjaxResult getInfo(@PathVariable String socialCreditCode) {
|
||||||
|
return success(enterpriseBaseInfoService.selectEnterpriseBaseInfoById(socialCreditCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "新增实体库信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:add')")
|
||||||
|
@Log(title = "实体库管理", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping
|
||||||
|
public AjaxResult add(@Validated @RequestBody CcdiEnterpriseBaseInfoAddDTO addDTO) {
|
||||||
|
return toAjax(enterpriseBaseInfoService.insertEnterpriseBaseInfo(addDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "修改实体库信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:edit')")
|
||||||
|
@Log(title = "实体库管理", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping
|
||||||
|
public AjaxResult edit(@Validated @RequestBody CcdiEnterpriseBaseInfoEditDTO editDTO) {
|
||||||
|
return toAjax(enterpriseBaseInfoService.updateEnterpriseBaseInfo(editDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "删除实体库信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:remove')")
|
||||||
|
@Log(title = "实体库管理", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{socialCreditCodes}")
|
||||||
|
public AjaxResult remove(@PathVariable String[] socialCreditCodes) {
|
||||||
|
return toAjax(enterpriseBaseInfoService.deleteEnterpriseBaseInfoByIds(socialCreditCodes));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "下载导入模板")
|
||||||
|
@PostMapping("/importTemplate")
|
||||||
|
public void importTemplate(HttpServletResponse response) {
|
||||||
|
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiEnterpriseBaseInfoExcel.class, "实体库管理");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "导入实体库信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:import')")
|
||||||
|
@Log(title = "实体库管理", businessType = BusinessType.IMPORT)
|
||||||
|
@PostMapping("/importData")
|
||||||
|
public AjaxResult importData(MultipartFile file) throws Exception {
|
||||||
|
List<CcdiEnterpriseBaseInfoExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiEnterpriseBaseInfoExcel.class);
|
||||||
|
if (list == null || list.isEmpty()) {
|
||||||
|
return error("至少需要一条数据");
|
||||||
|
}
|
||||||
|
|
||||||
|
String taskId = enterpriseBaseInfoService.importEnterpriseBaseInfo(list);
|
||||||
|
ImportResultVO result = new ImportResultVO();
|
||||||
|
result.setTaskId(taskId);
|
||||||
|
result.setStatus("PROCESSING");
|
||||||
|
result.setMessage("导入任务已提交,正在后台处理");
|
||||||
|
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "查询导入状态")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:import')")
|
||||||
|
@GetMapping("/importStatus/{taskId}")
|
||||||
|
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||||
|
ImportStatusVO status = enterpriseBaseInfoImportService.getImportStatus(taskId);
|
||||||
|
return success(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "查询导入失败记录")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:enterpriseBaseInfo:import')")
|
||||||
|
@GetMapping("/importFailures/{taskId}")
|
||||||
|
public TableDataInfo getImportFailures(@PathVariable String taskId,
|
||||||
|
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||||
|
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||||
|
List<EnterpriseBaseInfoImportFailureVO> failures = enterpriseBaseInfoImportService.getImportFailures(taskId);
|
||||||
|
int fromIndex = (pageNum - 1) * pageSize;
|
||||||
|
if (fromIndex >= failures.size()) {
|
||||||
|
return getDataTable(new ArrayList<>(), failures.size());
|
||||||
|
}
|
||||||
|
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||||
|
return getDataTable(failures.subList(fromIndex, toIndex), failures.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -138,4 +138,30 @@ public class CcdiEnumController {
|
|||||||
}
|
}
|
||||||
return AjaxResult.success(options);
|
return AjaxResult.success(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取实体风险等级选项
|
||||||
|
*/
|
||||||
|
@Operation(summary = "获取实体风险等级选项")
|
||||||
|
@GetMapping("/enterpriseRiskLevel")
|
||||||
|
public AjaxResult getEnterpriseRiskLevelOptions() {
|
||||||
|
List<EnumOptionVO> options = new ArrayList<>();
|
||||||
|
for (EnterpriseRiskLevel level : EnterpriseRiskLevel.values()) {
|
||||||
|
options.add(new EnumOptionVO(level.getCode(), level.getDesc()));
|
||||||
|
}
|
||||||
|
return AjaxResult.success(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取企业来源选项
|
||||||
|
*/
|
||||||
|
@Operation(summary = "获取企业来源选项")
|
||||||
|
@GetMapping("/enterpriseSource")
|
||||||
|
public AjaxResult getEnterpriseSourceOptions() {
|
||||||
|
List<EnumOptionVO> options = new ArrayList<>();
|
||||||
|
for (EnterpriseSource source : EnterpriseSource.values()) {
|
||||||
|
options.add(new EnumOptionVO(source.getCode(), source.getDesc()));
|
||||||
|
}
|
||||||
|
return AjaxResult.success(options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.ruoyi.info.collection.controller;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.info.collection.domain.dto.*;
|
import com.ruoyi.info.collection.domain.dto.*;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryEntityExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryEnterpriseRelationExcel;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryPersonExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryPersonExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.*;
|
import com.ruoyi.info.collection.domain.vo.*;
|
||||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryEntityImportService;
|
import com.ruoyi.info.collection.service.ICcdiIntermediaryEnterpriseRelationImportService;
|
||||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryPersonImportService;
|
import com.ruoyi.info.collection.service.ICcdiIntermediaryPersonImportService;
|
||||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryService;
|
import com.ruoyi.info.collection.service.ICcdiIntermediaryService;
|
||||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||||
@@ -46,7 +46,7 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
private ICcdiIntermediaryPersonImportService personImportService;
|
private ICcdiIntermediaryPersonImportService personImportService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ICcdiIntermediaryEntityImportService entityImportService;
|
private ICcdiIntermediaryEnterpriseRelationImportService enterpriseRelationImportService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询中介列表
|
* 查询中介列表
|
||||||
@@ -72,6 +72,26 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
return success(vo);
|
return success(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询中介亲属列表
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询中介亲属列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
|
||||||
|
@GetMapping("/{bizId}/relatives")
|
||||||
|
public AjaxResult getRelativeList(@PathVariable String bizId) {
|
||||||
|
return success(intermediaryService.selectIntermediaryRelativeList(bizId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询中介亲属详情
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询中介亲属详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
|
||||||
|
@GetMapping("/relative/{relativeBizId}")
|
||||||
|
public AjaxResult getRelativeInfo(@PathVariable String relativeBizId) {
|
||||||
|
return success(intermediaryService.selectIntermediaryRelativeDetail(relativeBizId));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询实体中介详情
|
* 查询实体中介详情
|
||||||
*/
|
*/
|
||||||
@@ -105,6 +125,28 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
return toAjax(intermediaryService.updateIntermediaryPerson(editDTO));
|
return toAjax(intermediaryService.updateIntermediaryPerson(editDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增中介亲属
|
||||||
|
*/
|
||||||
|
@Operation(summary = "新增中介亲属")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
|
||||||
|
@Log(title = "中介亲属", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping("/{bizId}/relative")
|
||||||
|
public AjaxResult addRelative(@PathVariable String bizId, @Validated @RequestBody CcdiIntermediaryRelativeAddDTO addDTO) {
|
||||||
|
return toAjax(intermediaryService.insertIntermediaryRelative(bizId, addDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改中介亲属
|
||||||
|
*/
|
||||||
|
@Operation(summary = "修改中介亲属")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
|
||||||
|
@Log(title = "中介亲属", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping("/relative")
|
||||||
|
public AjaxResult editRelative(@Validated @RequestBody CcdiIntermediaryRelativeEditDTO editDTO) {
|
||||||
|
return toAjax(intermediaryService.updateIntermediaryRelative(editDTO));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增实体中介
|
* 新增实体中介
|
||||||
*/
|
*/
|
||||||
@@ -127,6 +169,49 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
return toAjax(intermediaryService.updateIntermediaryEntity(editDTO));
|
return toAjax(intermediaryService.updateIntermediaryEntity(editDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询中介关联机构列表
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询中介关联机构列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
|
||||||
|
@GetMapping("/{bizId}/enterprise-relations")
|
||||||
|
public AjaxResult getEnterpriseRelationList(@PathVariable String bizId) {
|
||||||
|
return success(intermediaryService.selectIntermediaryEnterpriseRelationList(bizId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询中介关联机构详情
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询中介关联机构详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
|
||||||
|
@GetMapping("/enterprise-relation/{id}")
|
||||||
|
public AjaxResult getEnterpriseRelationInfo(@PathVariable Long id) {
|
||||||
|
return success(intermediaryService.selectIntermediaryEnterpriseRelationDetail(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增中介关联机构
|
||||||
|
*/
|
||||||
|
@Operation(summary = "新增中介关联机构")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
|
||||||
|
@Log(title = "中介关联机构", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping("/{bizId}/enterprise-relation")
|
||||||
|
public AjaxResult addEnterpriseRelation(@PathVariable String bizId,
|
||||||
|
@Validated @RequestBody CcdiIntermediaryEnterpriseRelationAddDTO addDTO) {
|
||||||
|
return toAjax(intermediaryService.insertIntermediaryEnterpriseRelation(bizId, addDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改中介关联机构
|
||||||
|
*/
|
||||||
|
@Operation(summary = "修改中介关联机构")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
|
||||||
|
@Log(title = "中介关联机构", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping("/enterprise-relation")
|
||||||
|
public AjaxResult editEnterpriseRelation(@Validated @RequestBody CcdiIntermediaryEnterpriseRelationEditDTO editDTO) {
|
||||||
|
return toAjax(intermediaryService.updateIntermediaryEnterpriseRelation(editDTO));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除中介
|
* 删除中介
|
||||||
*/
|
*/
|
||||||
@@ -138,6 +223,28 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
return toAjax(intermediaryService.deleteIntermediaryByIds(ids));
|
return toAjax(intermediaryService.deleteIntermediaryByIds(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除中介亲属
|
||||||
|
*/
|
||||||
|
@Operation(summary = "删除中介亲属")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:remove')")
|
||||||
|
@Log(title = "中介亲属", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/relative/{relativeBizId}")
|
||||||
|
public AjaxResult removeRelative(@PathVariable String relativeBizId) {
|
||||||
|
return toAjax(intermediaryService.deleteIntermediaryRelative(relativeBizId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除中介关联机构
|
||||||
|
*/
|
||||||
|
@Operation(summary = "删除中介关联机构")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:remove')")
|
||||||
|
@Log(title = "中介关联机构", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/enterprise-relation/{id}")
|
||||||
|
public AjaxResult removeEnterpriseRelation(@PathVariable Long id) {
|
||||||
|
return toAjax(intermediaryService.deleteIntermediaryEnterpriseRelation(id));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验人员ID唯一性
|
* 校验人员ID唯一性
|
||||||
*/
|
*/
|
||||||
@@ -170,10 +277,10 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
/**
|
/**
|
||||||
* 下载实体中介导入模板
|
* 下载实体中介导入模板
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "下载实体中介导入模板")
|
@Operation(summary = "下载中介实体关联关系导入模板")
|
||||||
@PostMapping("/importEntityTemplate")
|
@PostMapping("/importEnterpriseRelationTemplate")
|
||||||
public void importEntityTemplate(HttpServletResponse response) {
|
public void importEnterpriseRelationTemplate(HttpServletResponse response) {
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryEntityExcel.class, "实体中介信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryEnterpriseRelationExcel.class, "中介实体关联关系信息");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -206,20 +313,19 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
/**
|
/**
|
||||||
* 导入实体中介数据(异步)
|
* 导入实体中介数据(异步)
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "导入实体中介数据")
|
@Operation(summary = "导入中介实体关联关系数据")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||||
@Log(title = "实体中介", businessType = BusinessType.IMPORT)
|
@Log(title = "中介实体关联关系", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importEntityData")
|
@PostMapping("/importEnterpriseRelationData")
|
||||||
public AjaxResult importEntityData(MultipartFile file) throws Exception {
|
public AjaxResult importEnterpriseRelationData(MultipartFile file) throws Exception {
|
||||||
List<CcdiIntermediaryEntityExcel> list = EasyExcelUtil.importExcel(
|
List<CcdiIntermediaryEnterpriseRelationExcel> list = EasyExcelUtil.importExcel(
|
||||||
file.getInputStream(), CcdiIntermediaryEntityExcel.class);
|
file.getInputStream(), CcdiIntermediaryEnterpriseRelationExcel.class);
|
||||||
|
|
||||||
if (list == null || list.isEmpty()) {
|
if (list == null || list.isEmpty()) {
|
||||||
return error("至少需要一条数据");
|
return error("至少需要一条数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交异步任务
|
String taskId = intermediaryService.importIntermediaryEnterpriseRelation(list);
|
||||||
String taskId = intermediaryService.importIntermediaryEntity(list);
|
|
||||||
|
|
||||||
// 立即返回,不等待后台任务完成
|
// 立即返回,不等待后台任务完成
|
||||||
ImportResultVO result = new ImportResultVO();
|
ImportResultVO result = new ImportResultVO();
|
||||||
@@ -276,12 +382,12 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
/**
|
/**
|
||||||
* 查询实体中介导入状态
|
* 查询实体中介导入状态
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "查询实体中介导入状态")
|
@Operation(summary = "查询中介实体关联关系导入状态")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||||
@GetMapping("/importEntityStatus/{taskId}")
|
@GetMapping("/importEnterpriseRelationStatus/{taskId}")
|
||||||
public AjaxResult getEntityImportStatus(@PathVariable String taskId) {
|
public AjaxResult getEnterpriseRelationImportStatus(@PathVariable String taskId) {
|
||||||
try {
|
try {
|
||||||
ImportStatusVO status = entityImportService.getImportStatus(taskId);
|
ImportStatusVO status = enterpriseRelationImportService.getImportStatus(taskId);
|
||||||
return success(status);
|
return success(status);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return error(e.getMessage());
|
return error(e.getMessage());
|
||||||
@@ -289,18 +395,18 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询实体中介导入失败记录
|
* 查询中介实体关联关系导入失败记录
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "查询实体中介导入失败记录")
|
@Operation(summary = "查询中介实体关联关系导入失败记录")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
@PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
|
||||||
@GetMapping("/importEntityFailures/{taskId}")
|
@GetMapping("/importEnterpriseRelationFailures/{taskId}")
|
||||||
public TableDataInfo getEntityImportFailures(
|
public TableDataInfo getEnterpriseRelationImportFailures(
|
||||||
@PathVariable String taskId,
|
@PathVariable String taskId,
|
||||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||||
@RequestParam(defaultValue = "10") Integer pageSize) {
|
@RequestParam(defaultValue = "10") Integer pageSize) {
|
||||||
|
|
||||||
List<IntermediaryEntityImportFailureVO> failures =
|
List<IntermediaryEnterpriseRelationImportFailureVO> failures =
|
||||||
entityImportService.getImportFailures(taskId);
|
enterpriseRelationImportService.getImportFailures(taskId);
|
||||||
|
|
||||||
// 手动分页
|
// 手动分页
|
||||||
int fromIndex = (pageNum - 1) * pageSize;
|
int fromIndex = (pageNum - 1) * pageSize;
|
||||||
@@ -311,7 +417,7 @@ public class CcdiIntermediaryController extends BaseController {
|
|||||||
return getDataTable(new ArrayList<>(), failures.size());
|
return getDataTable(new ArrayList<>(), failures.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<IntermediaryEntityImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
List<IntermediaryEnterpriseRelationImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
|
||||||
|
|
||||||
return getDataTable(pageData, failures.size());
|
return getDataTable(pageData, failures.size());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionAddDTO;
|
|||||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionQueryDTO;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionSupplierExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.CcdiPurchaseTransactionVO;
|
import com.ruoyi.info.collection.domain.vo.CcdiPurchaseTransactionVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||||
@@ -33,12 +34,12 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息Controller
|
* 招投标信息维护Controller
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
*/
|
*/
|
||||||
@Tag(name = "采购交易信息管理")
|
@Tag(name = "招投标信息维护")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/ccdi/purchaseTransaction")
|
@RequestMapping("/ccdi/purchaseTransaction")
|
||||||
public class CcdiPurchaseTransactionController extends BaseController {
|
public class CcdiPurchaseTransactionController extends BaseController {
|
||||||
@@ -50,9 +51,9 @@ public class CcdiPurchaseTransactionController extends BaseController {
|
|||||||
private ICcdiPurchaseTransactionImportService transactionImportService;
|
private ICcdiPurchaseTransactionImportService transactionImportService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询采购交易列表
|
* 查询招投标信息列表
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "查询采购交易列表")
|
@Operation(summary = "查询招投标信息列表")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:list')")
|
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:list')")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(CcdiPurchaseTransactionQueryDTO queryDTO) {
|
public TableDataInfo list(CcdiPurchaseTransactionQueryDTO queryDTO) {
|
||||||
@@ -64,21 +65,9 @@ public class CcdiPurchaseTransactionController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出采购交易列表
|
* 获取招投标信息详细信息
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "导出采购交易列表")
|
@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)
|
@Parameter(name = "purchaseId", description = "采购事项ID", required = true)
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:query')")
|
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:query')")
|
||||||
@GetMapping(value = "/{purchaseId}")
|
@GetMapping(value = "/{purchaseId}")
|
||||||
@@ -87,66 +76,81 @@ public class CcdiPurchaseTransactionController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增采购交易
|
* 新增招投标信息
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "新增采购交易")
|
@Operation(summary = "新增招投标信息")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:add')")
|
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:add')")
|
||||||
@Log(title = "采购交易信息", businessType = BusinessType.INSERT)
|
@Log(title = "招投标信息维护", businessType = BusinessType.INSERT)
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public AjaxResult add(@Validated @RequestBody CcdiPurchaseTransactionAddDTO addDTO) {
|
public AjaxResult add(@Validated @RequestBody CcdiPurchaseTransactionAddDTO addDTO) {
|
||||||
return toAjax(transactionService.insertTransaction(addDTO));
|
return toAjax(transactionService.insertTransaction(addDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改采购交易
|
* 修改招投标信息
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "修改采购交易")
|
@Operation(summary = "修改招投标信息")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:edit')")
|
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:edit')")
|
||||||
@Log(title = "采购交易信息", businessType = BusinessType.UPDATE)
|
@Log(title = "招投标信息维护", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public AjaxResult edit(@Validated @RequestBody CcdiPurchaseTransactionEditDTO editDTO) {
|
public AjaxResult edit(@Validated @RequestBody CcdiPurchaseTransactionEditDTO editDTO) {
|
||||||
return toAjax(transactionService.updateTransaction(editDTO));
|
return toAjax(transactionService.updateTransaction(editDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除采购交易
|
* 删除招投标信息
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "删除采购交易")
|
@Operation(summary = "删除招投标信息")
|
||||||
@Parameter(name = "purchaseIds", description = "采购事项ID数组", required = true)
|
@Parameter(name = "purchaseIds", description = "采购事项ID数组", required = true)
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:remove')")
|
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:remove')")
|
||||||
@Log(title = "采购交易信息", businessType = BusinessType.DELETE)
|
@Log(title = "招投标信息维护", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{purchaseIds}")
|
@DeleteMapping("/{purchaseIds}")
|
||||||
public AjaxResult remove(@PathVariable String[] purchaseIds) {
|
public AjaxResult remove(@PathVariable String[] purchaseIds) {
|
||||||
return toAjax(transactionService.deleteTransactionByIds(purchaseIds));
|
return toAjax(transactionService.deleteTransactionByIds(purchaseIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载带字典下拉框的导入模板
|
* 下载双Sheet导入模板
|
||||||
* 使用@DictDropdown注解自动添加下拉框
|
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "下载导入模板")
|
@Operation(summary = "下载导入模板")
|
||||||
@PostMapping("/importTemplate")
|
@PostMapping("/importTemplate")
|
||||||
public void importTemplate(HttpServletResponse response) {
|
public void importTemplate(HttpServletResponse response) {
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiPurchaseTransactionExcel.class, "采购交易信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(
|
||||||
|
response,
|
||||||
|
CcdiPurchaseTransactionExcel.class,
|
||||||
|
"招投标主信息",
|
||||||
|
CcdiPurchaseTransactionSupplierExcel.class,
|
||||||
|
"供应商明细",
|
||||||
|
"招投标信息维护导入模板"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步导入采购交易
|
* 异步导入招投标信息
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "异步导入采购交易")
|
@Operation(summary = "异步导入招投标信息")
|
||||||
@Parameter(name = "file", description = "导入文件", required = true)
|
@Parameter(name = "file", description = "导入文件", required = true)
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:import')")
|
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:import')")
|
||||||
@Log(title = "采购交易信息", businessType = BusinessType.IMPORT)
|
@Log(title = "招投标信息维护", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||||
List<CcdiPurchaseTransactionExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiPurchaseTransactionExcel.class);
|
List<CcdiPurchaseTransactionExcel> mainList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiPurchaseTransactionExcel.class,
|
||||||
|
"招投标主信息"
|
||||||
|
);
|
||||||
|
List<CcdiPurchaseTransactionSupplierExcel> supplierList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiPurchaseTransactionSupplierExcel.class,
|
||||||
|
"供应商明细"
|
||||||
|
);
|
||||||
|
|
||||||
if (list == null || list.isEmpty()) {
|
if ((mainList == null || mainList.isEmpty()) && (supplierList == null || supplierList.isEmpty())) {
|
||||||
return error("至少需要一条数据");
|
return error("至少需要一条数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交异步任务
|
// 提交异步任务
|
||||||
String taskId = transactionService.importTransaction(list);
|
String taskId = transactionService.importTransaction(mainList, supplierList);
|
||||||
|
|
||||||
// 立即返回,不等待后台任务完成
|
// 立即返回,不等待后台任务完成
|
||||||
ImportResultVO result = new ImportResultVO();
|
ImportResultVO result = new ImportResultVO();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationAddDTO;
|
|||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationQueryDTO;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffEnterpriseRelationExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffEnterpriseRelationExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiStaffEnterpriseRelationOptionVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffEnterpriseRelationVO;
|
import com.ruoyi.info.collection.domain.vo.CcdiStaffEnterpriseRelationVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||||
@@ -33,12 +34,12 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息Controller
|
* 员工亲属实体关联Controller
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Tag(name = "员工实体关系信息管理")
|
@Tag(name = "员工亲属实体关联管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/ccdi/staffEnterpriseRelation")
|
@RequestMapping("/ccdi/staffEnterpriseRelation")
|
||||||
public class CcdiStaffEnterpriseRelationController extends BaseController {
|
public class CcdiStaffEnterpriseRelationController extends BaseController {
|
||||||
@@ -50,9 +51,9 @@ public class CcdiStaffEnterpriseRelationController extends BaseController {
|
|||||||
private ICcdiStaffEnterpriseRelationImportService relationImportService;
|
private ICcdiStaffEnterpriseRelationImportService relationImportService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询员工实体关系列表
|
* 查询员工亲属实体关联列表
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "查询员工实体关系列表")
|
@Operation(summary = "查询员工亲属实体关联列表")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:list')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:list')")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(CcdiStaffEnterpriseRelationQueryDTO queryDTO) {
|
public TableDataInfo list(CcdiStaffEnterpriseRelationQueryDTO queryDTO) {
|
||||||
@@ -64,21 +65,20 @@ public class CcdiStaffEnterpriseRelationController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出员工实体关系列表
|
* 查询有效员工亲属下拉列表
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "导出员工实体关系列表")
|
@Operation(summary = "查询有效员工亲属下拉列表")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:export')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:list')")
|
||||||
@Log(title = "员工实体关系信息", businessType = BusinessType.EXPORT)
|
@GetMapping("/familyOptions")
|
||||||
@PostMapping("/export")
|
public AjaxResult familyOptions(@RequestParam(required = false) String query) {
|
||||||
public void export(HttpServletResponse response, CcdiStaffEnterpriseRelationQueryDTO queryDTO) {
|
List<CcdiStaffEnterpriseRelationOptionVO> list = relationService.selectFamilyOptions(query);
|
||||||
List<CcdiStaffEnterpriseRelationExcel> list = relationService.selectRelationListForExport(queryDTO);
|
return success(list);
|
||||||
EasyExcelUtil.exportExcel(response, list, CcdiStaffEnterpriseRelationExcel.class, "员工实体关系信息");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取员工实体关系详细信息
|
* 获取员工亲属实体关联详细信息
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "获取员工实体关系详细信息")
|
@Operation(summary = "获取员工亲属实体关联详细信息")
|
||||||
@Parameter(name = "id", description = "主键ID", required = true)
|
@Parameter(name = "id", description = "主键ID", required = true)
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:query')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:query')")
|
||||||
@GetMapping(value = "/{id}")
|
@GetMapping(value = "/{id}")
|
||||||
@@ -87,34 +87,34 @@ public class CcdiStaffEnterpriseRelationController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增员工实体关系
|
* 新增员工亲属实体关联
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "新增员工实体关系")
|
@Operation(summary = "新增员工亲属实体关联")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:add')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:add')")
|
||||||
@Log(title = "员工实体关系信息", businessType = BusinessType.INSERT)
|
@Log(title = "员工亲属实体关联", businessType = BusinessType.INSERT)
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public AjaxResult add(@Validated @RequestBody CcdiStaffEnterpriseRelationAddDTO addDTO) {
|
public AjaxResult add(@Validated @RequestBody CcdiStaffEnterpriseRelationAddDTO addDTO) {
|
||||||
return toAjax(relationService.insertRelation(addDTO));
|
return toAjax(relationService.insertRelation(addDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改员工实体关系
|
* 修改员工亲属实体关联
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "修改员工实体关系")
|
@Operation(summary = "修改员工亲属实体关联")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:edit')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:edit')")
|
||||||
@Log(title = "员工实体关系信息", businessType = BusinessType.UPDATE)
|
@Log(title = "员工亲属实体关联", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public AjaxResult edit(@Validated @RequestBody CcdiStaffEnterpriseRelationEditDTO editDTO) {
|
public AjaxResult edit(@Validated @RequestBody CcdiStaffEnterpriseRelationEditDTO editDTO) {
|
||||||
return toAjax(relationService.updateRelation(editDTO));
|
return toAjax(relationService.updateRelation(editDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除员工实体关系
|
* 删除员工亲属实体关联
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "删除员工实体关系")
|
@Operation(summary = "删除员工亲属实体关联")
|
||||||
@Parameter(name = "ids", description = "主键ID数组", required = true)
|
@Parameter(name = "ids", description = "主键ID数组", required = true)
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:remove')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:remove')")
|
||||||
@Log(title = "员工实体关系信息", businessType = BusinessType.DELETE)
|
@Log(title = "员工亲属实体关联", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{ids}")
|
@DeleteMapping("/{ids}")
|
||||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||||
return toAjax(relationService.deleteRelationByIds(ids));
|
return toAjax(relationService.deleteRelationByIds(ids));
|
||||||
@@ -127,16 +127,16 @@ public class CcdiStaffEnterpriseRelationController extends BaseController {
|
|||||||
@Operation(summary = "下载导入模板")
|
@Operation(summary = "下载导入模板")
|
||||||
@PostMapping("/importTemplate")
|
@PostMapping("/importTemplate")
|
||||||
public void importTemplate(HttpServletResponse response) {
|
public void importTemplate(HttpServletResponse response) {
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffEnterpriseRelationExcel.class, "员工实体关系信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffEnterpriseRelationExcel.class, "员工亲属实体关联");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步导入员工实体关系
|
* 异步导入员工亲属实体关联
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "异步导入员工实体关系")
|
@Operation(summary = "异步导入员工亲属实体关联")
|
||||||
@Parameter(name = "file", description = "导入文件", required = true)
|
@Parameter(name = "file", description = "导入文件", required = true)
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:import')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffEnterpriseRelation:import')")
|
||||||
@Log(title = "员工实体关系信息", businessType = BusinessType.IMPORT)
|
@Log(title = "员工亲属实体关联", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||||
List<CcdiStaffEnterpriseRelationExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffEnterpriseRelationExcel.class);
|
List<CcdiStaffEnterpriseRelationExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffEnterpriseRelationExcel.class);
|
||||||
@@ -152,9 +152,9 @@ public class CcdiStaffEnterpriseRelationController extends BaseController {
|
|||||||
ImportResultVO result = new ImportResultVO();
|
ImportResultVO result = new ImportResultVO();
|
||||||
result.setTaskId(taskId);
|
result.setTaskId(taskId);
|
||||||
result.setStatus("PROCESSING");
|
result.setStatus("PROCESSING");
|
||||||
result.setMessage("导入任务已提交,正在后台处理");
|
result.setMessage("员工亲属实体关联导入任务已提交,正在后台处理");
|
||||||
|
|
||||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
return AjaxResult.success("员工亲属实体关联导入任务已提交,正在后台处理", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationAddDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationAddDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiAssetInfoExcel;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffFmyRelationExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffFmyRelationExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffFmyRelationVO;
|
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.ImportStatusVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.StaffFmyRelationImportFailureVO;
|
import com.ruoyi.info.collection.domain.vo.StaffFmyRelationImportFailureVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.StaffFmyRelationImportSubmitResultVO;
|
||||||
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationImportService;
|
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationImportService;
|
||||||
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationService;
|
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationService;
|
||||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||||
@@ -63,18 +64,6 @@ public class CcdiStaffFmyRelationController extends BaseController {
|
|||||||
return getDataTable(result.getRecords(), result.getTotal());
|
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, "员工亲属关系信息");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取员工亲属关系详细信息
|
* 获取员工亲属关系详细信息
|
||||||
*/
|
*/
|
||||||
@@ -127,7 +116,14 @@ public class CcdiStaffFmyRelationController extends BaseController {
|
|||||||
@Operation(summary = "下载导入模板")
|
@Operation(summary = "下载导入模板")
|
||||||
@PostMapping("/importTemplate")
|
@PostMapping("/importTemplate")
|
||||||
public void importTemplate(HttpServletResponse response) {
|
public void importTemplate(HttpServletResponse response) {
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffFmyRelationExcel.class, "员工亲属关系信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(
|
||||||
|
response,
|
||||||
|
CcdiStaffFmyRelationExcel.class,
|
||||||
|
"员工亲属关系信息",
|
||||||
|
CcdiAssetInfoExcel.class,
|
||||||
|
"亲属资产信息",
|
||||||
|
"员工亲属关系维护导入模板"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -139,21 +135,25 @@ public class CcdiStaffFmyRelationController extends BaseController {
|
|||||||
@Log(title = "员工亲属关系", businessType = BusinessType.IMPORT)
|
@Log(title = "员工亲属关系", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||||
List<CcdiStaffFmyRelationExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffFmyRelationExcel.class);
|
List<CcdiStaffFmyRelationExcel> relationList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiStaffFmyRelationExcel.class,
|
||||||
|
"员工亲属关系信息"
|
||||||
|
);
|
||||||
|
List<CcdiAssetInfoExcel> assetList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiAssetInfoExcel.class,
|
||||||
|
"亲属资产信息"
|
||||||
|
);
|
||||||
|
|
||||||
if (list == null || list.isEmpty()) {
|
boolean hasRelationRows = relationList != null && !relationList.isEmpty();
|
||||||
|
boolean hasAssetRows = assetList != null && !assetList.isEmpty();
|
||||||
|
|
||||||
|
if (!hasRelationRows && !hasAssetRows) {
|
||||||
return error("至少需要一条数据");
|
return error("至少需要一条数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交异步任务
|
StaffFmyRelationImportSubmitResultVO result = relationService.importRelationWithAssets(relationList, assetList);
|
||||||
String taskId = relationService.importRelation(list);
|
|
||||||
|
|
||||||
// 立即返回,不等待后台任务完成
|
|
||||||
ImportResultVO result = new ImportResultVO();
|
|
||||||
result.setTaskId(taskId);
|
|
||||||
result.setStatus("PROCESSING");
|
|
||||||
result.setMessage("导入任务已提交,正在后台处理");
|
|
||||||
|
|
||||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,4 +198,5 @@ public class CcdiStaffFmyRelationController extends BaseController {
|
|||||||
|
|
||||||
return getDataTable(pageData, failures.size());
|
return getDataTable(pageData, failures.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,26 +64,14 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
return getDataTable(result.getRecords(), result.getTotal());
|
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 = "获取招聘信息详细信息")
|
@Operation(summary = "获取招聘信息详细信息")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:query')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:query')")
|
||||||
@GetMapping(value = "/{recruitId}")
|
@GetMapping(value = "/{id}")
|
||||||
public AjaxResult getInfo(@PathVariable String recruitId) {
|
public AjaxResult getInfo(@PathVariable Long id) {
|
||||||
return success(recruitmentService.selectRecruitmentById(recruitId));
|
return success(recruitmentService.selectRecruitmentById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -114,9 +102,9 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
@Operation(summary = "删除招聘信息")
|
@Operation(summary = "删除招聘信息")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:remove')")
|
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:remove')")
|
||||||
@Log(title = "员工招聘信息", businessType = BusinessType.DELETE)
|
@Log(title = "员工招聘信息", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{recruitIds}")
|
@DeleteMapping("/{ids}")
|
||||||
public AjaxResult remove(@PathVariable String[] recruitIds) {
|
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||||
return toAjax(recruitmentService.deleteRecruitmentByIds(recruitIds));
|
return toAjax(recruitmentService.deleteRecruitmentByIds(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -126,16 +114,14 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
@Operation(summary = "下载导入模板")
|
@Operation(summary = "下载导入模板")
|
||||||
@PostMapping("/importTemplate")
|
@PostMapping("/importTemplate")
|
||||||
public void importTemplate(HttpServletResponse response) {
|
public void importTemplate(HttpServletResponse response) {
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffRecruitmentExcel.class, "员工招聘信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(
|
||||||
}
|
response,
|
||||||
|
CcdiStaffRecruitmentExcel.class,
|
||||||
/**
|
"招聘信息",
|
||||||
* 下载历史工作经历导入模板
|
CcdiStaffRecruitmentWorkExcel.class,
|
||||||
*/
|
"历史工作经历",
|
||||||
@Operation(summary = "下载历史工作经历导入模板")
|
"招聘信息管理导入模板"
|
||||||
@PostMapping("/workImportTemplate")
|
);
|
||||||
public void workImportTemplate(HttpServletResponse response) {
|
|
||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffRecruitmentWorkExcel.class, "历史工作经历");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -147,16 +133,25 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
@Log(title = "员工招聘信息", businessType = BusinessType.IMPORT)
|
@Log(title = "员工招聘信息", businessType = BusinessType.IMPORT)
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
public AjaxResult importData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||||
List<CcdiStaffRecruitmentExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffRecruitmentExcel.class);
|
List<CcdiStaffRecruitmentExcel> recruitmentList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiStaffRecruitmentExcel.class,
|
||||||
|
"招聘信息"
|
||||||
|
);
|
||||||
|
List<CcdiStaffRecruitmentWorkExcel> workList = EasyExcelUtil.importExcel(
|
||||||
|
file.getInputStream(),
|
||||||
|
CcdiStaffRecruitmentWorkExcel.class,
|
||||||
|
"历史工作经历"
|
||||||
|
);
|
||||||
|
|
||||||
if (list == null || list.isEmpty()) {
|
boolean hasRecruitmentRows = recruitmentList != null && !recruitmentList.isEmpty();
|
||||||
|
boolean hasWorkRows = workList != null && !workList.isEmpty();
|
||||||
|
if (!hasRecruitmentRows && !hasWorkRows) {
|
||||||
return error("至少需要一条数据");
|
return error("至少需要一条数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交异步任务
|
String taskId = recruitmentService.importRecruitment(recruitmentList, workList);
|
||||||
String taskId = recruitmentService.importRecruitment(list);
|
|
||||||
|
|
||||||
// 立即返回,不等待后台任务完成
|
|
||||||
ImportResultVO result = new ImportResultVO();
|
ImportResultVO result = new ImportResultVO();
|
||||||
result.setTaskId(taskId);
|
result.setTaskId(taskId);
|
||||||
result.setStatus("PROCESSING");
|
result.setStatus("PROCESSING");
|
||||||
@@ -165,31 +160,6 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 异步导入历史工作经历
|
|
||||||
*/
|
|
||||||
@Operation(summary = "异步导入历史工作经历")
|
|
||||||
@Parameter(name = "file", description = "导入文件", required = true)
|
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:import')")
|
|
||||||
@Log(title = "员工招聘历史工作经历", businessType = BusinessType.IMPORT)
|
|
||||||
@PostMapping("/importWorkData")
|
|
||||||
public AjaxResult importWorkData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
|
||||||
List<CcdiStaffRecruitmentWorkExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffRecruitmentWorkExcel.class);
|
|
||||||
|
|
||||||
if (list == null || list.isEmpty()) {
|
|
||||||
return error("至少需要一条数据");
|
|
||||||
}
|
|
||||||
|
|
||||||
String taskId = recruitmentService.importRecruitmentWork(list);
|
|
||||||
|
|
||||||
ImportResultVO result = new ImportResultVO();
|
|
||||||
result.setTaskId(taskId);
|
|
||||||
result.setStatus("PROCESSING");
|
|
||||||
result.setMessage("历史工作经历导入任务已提交,正在后台处理");
|
|
||||||
|
|
||||||
return AjaxResult.success("历史工作经历导入任务已提交,正在后台处理", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询导入状态
|
* 查询导入状态
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -63,18 +63,6 @@ public class CcdiStaffTransferController extends BaseController {
|
|||||||
return getDataTable(result.getRecords(), result.getTotal());
|
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, "员工调动记录信息");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取员工调动记录详细信息
|
* 获取员工调动记录详细信息
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,6 +57,42 @@ public class CcdiAccountInfo implements Serializable {
|
|||||||
/** 币种 */
|
/** 币种 */
|
||||||
private String currency;
|
private String currency;
|
||||||
|
|
||||||
|
/** 是否实控账户:0-否 1-是 */
|
||||||
|
@TableField("is_self_account")
|
||||||
|
private Integer isActualControl;
|
||||||
|
|
||||||
|
/** 月均交易笔数 */
|
||||||
|
@TableField("monthly_avg_trans_count")
|
||||||
|
private Integer avgMonthTxnCount;
|
||||||
|
|
||||||
|
/** 月均交易金额 */
|
||||||
|
@TableField("monthly_avg_trans_amount")
|
||||||
|
private BigDecimal avgMonthTxnAmount;
|
||||||
|
|
||||||
|
/** 交易频率等级 */
|
||||||
|
@TableField("trans_freq_type")
|
||||||
|
private String txnFrequencyLevel;
|
||||||
|
|
||||||
|
/** 借方单笔最高额 */
|
||||||
|
@TableField("dr_max_single_amount")
|
||||||
|
private BigDecimal debitSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方单笔最高额 */
|
||||||
|
@TableField("cr_max_single_amount")
|
||||||
|
private BigDecimal creditSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 借方日累计最高额 */
|
||||||
|
@TableField("dr_max_daily_amount")
|
||||||
|
private BigDecimal debitDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方日累计最高额 */
|
||||||
|
@TableField("cr_max_daily_amount")
|
||||||
|
private BigDecimal creditDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 风险等级 */
|
||||||
|
@TableField("trans_risk_level")
|
||||||
|
private String txnRiskLevel;
|
||||||
|
|
||||||
/** 状态:1-正常 2-已销户 */
|
/** 状态:1-正常 2-已销户 */
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
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.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 账户分析结果对象 ccdi_account_result
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-04-13
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@TableName("ccdi_account_result")
|
|
||||||
public class CcdiAccountResult implements Serializable {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/** 主键ID */
|
|
||||||
@TableId(value = "result_id", type = IdType.AUTO)
|
|
||||||
private Long resultId;
|
|
||||||
|
|
||||||
/** 账户号码 */
|
|
||||||
private String accountNo;
|
|
||||||
|
|
||||||
/** 是否实控账户:0-否 1-是 */
|
|
||||||
@TableField("is_self_account")
|
|
||||||
private Integer isActualControl;
|
|
||||||
|
|
||||||
/** 月均交易笔数 */
|
|
||||||
@TableField("monthly_avg_trans_count")
|
|
||||||
private Integer avgMonthTxnCount;
|
|
||||||
|
|
||||||
/** 月均交易金额 */
|
|
||||||
@TableField("monthly_avg_trans_amount")
|
|
||||||
private BigDecimal avgMonthTxnAmount;
|
|
||||||
|
|
||||||
/** 交易频率等级 */
|
|
||||||
@TableField("trans_freq_type")
|
|
||||||
private String txnFrequencyLevel;
|
|
||||||
|
|
||||||
/** 借方单笔最高额 */
|
|
||||||
@TableField("dr_max_single_amount")
|
|
||||||
private BigDecimal debitSingleMaxAmount;
|
|
||||||
|
|
||||||
/** 贷方单笔最高额 */
|
|
||||||
@TableField("cr_max_single_amount")
|
|
||||||
private BigDecimal creditSingleMaxAmount;
|
|
||||||
|
|
||||||
/** 借方日累计最高额 */
|
|
||||||
@TableField("dr_max_daily_amount")
|
|
||||||
private BigDecimal debitDailyMaxAmount;
|
|
||||||
|
|
||||||
/** 贷方日累计最高额 */
|
|
||||||
@TableField("cr_max_daily_amount")
|
|
||||||
private BigDecimal creditDailyMaxAmount;
|
|
||||||
|
|
||||||
/** 风险等级 */
|
|
||||||
@TableField("trans_risk_level")
|
|
||||||
private String txnRiskLevel;
|
|
||||||
|
|
||||||
/** 创建者 */
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
@@ -43,6 +43,10 @@ public class CcdiBaseStaff implements Serializable {
|
|||||||
/** 入职时间 */
|
/** 入职时间 */
|
||||||
private Date hireDate;
|
private Date hireDate;
|
||||||
|
|
||||||
|
/** 是否党员:0-否 1-是 */
|
||||||
|
@TableField("is_party_member")
|
||||||
|
private Integer partyMember;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class CcdiBizIntermediary implements Serializable {
|
|||||||
/** 职位 */
|
/** 职位 */
|
||||||
private String position;
|
private String position;
|
||||||
|
|
||||||
/** 关联人员ID */
|
/** 关联中介本人证件号码 */
|
||||||
private String relatedNumId;
|
private String relatedNumId;
|
||||||
|
|
||||||
/** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, IMPORT:批量导入, API:接口获取 */
|
/** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, IMPORT:批量导入, API:接口获取 */
|
||||||
|
|||||||
@@ -94,6 +94,6 @@ public class CcdiEnterpriseBaseInfo implements Serializable {
|
|||||||
/** 风险等级:1-高风险, 2-中风险, 3-低风险 */
|
/** 风险等级:1-高风险, 2-中风险, 3-低风险 */
|
||||||
private String riskLevel;
|
private String riskLevel;
|
||||||
|
|
||||||
/** 企业来源:GENERAL-一般企业, EMP_RELATION-员工关系人, CREDIT_CUSTOMER-信贷客户, INTERMEDIARY-中介, BOTH-兼有 */
|
/** 企业来源:GENERAL-一般企业, EMP_RELATION-员工关系人, CREDIT_CUSTOMER-信贷客户, SUPPLIER-供应商, INTERMEDIARY-中介, BOTH-兼有 */
|
||||||
private String entSource;
|
private String entSource;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
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_intermediary_enterprise_relation
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("ccdi_intermediary_enterprise_relation")
|
||||||
|
public class CcdiIntermediaryEnterpriseRelation implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String intermediaryBizId;
|
||||||
|
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
private String relationPersonPost;
|
||||||
|
|
||||||
|
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,64 @@
|
|||||||
|
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_purchase_transaction_supplier
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiPurchaseTransactionSupplier implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 采购事项ID */
|
||||||
|
private String purchaseId;
|
||||||
|
|
||||||
|
/** 供应商名称 */
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
/** 供应商统一信用代码 */
|
||||||
|
private String supplierUscc;
|
||||||
|
|
||||||
|
/** 供应商联系人 */
|
||||||
|
private String contactPerson;
|
||||||
|
|
||||||
|
/** 供应商联系电话 */
|
||||||
|
private String contactPhone;
|
||||||
|
|
||||||
|
/** 供应商银行账户 */
|
||||||
|
private String supplierBankAccount;
|
||||||
|
|
||||||
|
/** 是否中标:1-是,0-否 */
|
||||||
|
private Integer isBidWinner;
|
||||||
|
|
||||||
|
/** 排序 */
|
||||||
|
private Integer sortOrder;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
@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;
|
||||||
|
}
|
||||||
@@ -22,8 +22,11 @@ public class CcdiStaffRecruitment implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
/** 招聘记录编号 */
|
/** 招聘记录编号 */
|
||||||
@TableId(type = IdType.INPUT)
|
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 招聘项目名称 */
|
/** 招聘项目名称 */
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ public class CcdiStaffRecruitmentWork implements Serializable {
|
|||||||
@TableId(type = IdType.AUTO)
|
@TableId(type = IdType.AUTO)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
/** 关联招聘信息主键ID */
|
||||||
|
private Long recruitmentId;
|
||||||
|
|
||||||
/** 关联招聘记录编号 */
|
/** 关联招聘记录编号 */
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ public class CcdiBaseStaffAddDTO implements Serializable {
|
|||||||
/** 入职时间 */
|
/** 入职时间 */
|
||||||
private Date hireDate;
|
private Date hireDate;
|
||||||
|
|
||||||
|
/** 是否党员:0-否 1-是 */
|
||||||
|
@NotNull(message = "是否党员不能为空")
|
||||||
|
private Integer partyMember;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
@NotBlank(message = "状态不能为空")
|
@NotBlank(message = "状态不能为空")
|
||||||
private String status;
|
private String status;
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ public class CcdiBaseStaffEditDTO implements Serializable {
|
|||||||
/** 入职时间 */
|
/** 入职时间 */
|
||||||
private Date hireDate;
|
private Date hireDate;
|
||||||
|
|
||||||
|
/** 是否党员:0-否 1-是 */
|
||||||
|
@NotNull(message = "是否党员不能为空")
|
||||||
|
private Integer partyMember;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,10 @@ public class CcdiCustFmyRelationQueryDTO implements Serializable {
|
|||||||
@Schema(description = "关系人姓名")
|
@Schema(description = "关系人姓名")
|
||||||
private String relationName;
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关系人身份证号 */
|
||||||
|
@Schema(description = "关系人身份证号")
|
||||||
|
private String relationCertNo;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
@Schema(description = "状态:0-无效,1-有效")
|
@Schema(description = "状态:0-无效,1-有效")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
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;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实体库管理新增 DTO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "实体库管理新增DTO")
|
||||||
|
public class CcdiEnterpriseBaseInfoAddDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
@NotBlank(message = "统一社会信用代码不能为空")
|
||||||
|
@Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", 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 = 50, message = "经营状态长度不能超过50个字符")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
@NotBlank(message = "风险等级不能为空")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@Schema(description = "企业来源")
|
||||||
|
@NotBlank(message = "企业来源不能为空")
|
||||||
|
private String entSource;
|
||||||
|
|
||||||
|
@Schema(description = "数据来源")
|
||||||
|
private String dataSource;
|
||||||
|
}
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
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;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实体库管理编辑 DTO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "实体库管理编辑DTO")
|
||||||
|
public class CcdiEnterpriseBaseInfoEditDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
@NotBlank(message = "统一社会信用代码不能为空")
|
||||||
|
@Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", 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 = 50, message = "经营状态长度不能超过50个字符")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
@NotBlank(message = "风险等级不能为空")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@Schema(description = "企业来源")
|
||||||
|
@NotBlank(message = "企业来源不能为空")
|
||||||
|
private String entSource;
|
||||||
|
|
||||||
|
@Schema(description = "数据来源")
|
||||||
|
@NotBlank(message = "数据来源不能为空")
|
||||||
|
private String dataSource;
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
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-04-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "实体库管理查询DTO")
|
||||||
|
public class CcdiEnterpriseBaseInfoQueryDTO 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 industryClass;
|
||||||
|
|
||||||
|
@Schema(description = "经营状态")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@Schema(description = "企业来源")
|
||||||
|
private String entSource;
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介关联机构新增DTO")
|
||||||
|
public class CcdiIntermediaryEnterpriseRelationAddDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
@NotBlank(message = "统一社会信用代码不能为空")
|
||||||
|
@Size(max = 18, message = "统一社会信用代码长度不能超过18个字符")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@Schema(description = "关联角色/职务")
|
||||||
|
@Size(max = 100, message = "关联角色/职务长度不能超过100个字符")
|
||||||
|
private String relationPersonPost;
|
||||||
|
|
||||||
|
@Schema(description = "备注")
|
||||||
|
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介关联机构编辑DTO")
|
||||||
|
public class CcdiIntermediaryEnterpriseRelationEditDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
@NotNull(message = "主键ID不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
@NotBlank(message = "统一社会信用代码不能为空")
|
||||||
|
@Size(max = 18, message = "统一社会信用代码长度不能超过18个字符")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@Schema(description = "关联角色/职务")
|
||||||
|
@Size(max = 100, message = "关联角色/职务长度不能超过100个字符")
|
||||||
|
private String relationPersonPost;
|
||||||
|
|
||||||
|
@Schema(description = "备注")
|
||||||
|
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -67,8 +67,8 @@ public class CcdiIntermediaryPersonAddDTO implements Serializable {
|
|||||||
@Size(max = 100, message = "职位长度不能超过100个字符")
|
@Size(max = 100, message = "职位长度不能超过100个字符")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
||||||
@Schema(description = "关联人员ID")
|
@Schema(description = "关联中介本人证件号码")
|
||||||
@Size(max = 50, message = "关联人员ID长度不能超过50个字符")
|
@Size(max = 50, message = "关联中介本人证件号码长度不能超过50个字符")
|
||||||
private String relatedNumId;
|
private String relatedNumId;
|
||||||
|
|
||||||
@Schema(description = "关联关系")
|
@Schema(description = "关联关系")
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ public class CcdiIntermediaryPersonEditDTO implements Serializable {
|
|||||||
@Size(max = 100, message = "职位长度不能超过100个字符")
|
@Size(max = 100, message = "职位长度不能超过100个字符")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
||||||
@Schema(description = "关联人员ID")
|
@Schema(description = "关联中介本人证件号码")
|
||||||
@Size(max = 50, message = "关联人员ID长度不能超过50个字符")
|
@Size(max = 50, message = "关联中介本人证件号码长度不能超过50个字符")
|
||||||
private String relatedNumId;
|
private String relatedNumId;
|
||||||
|
|
||||||
@Schema(description = "关联关系")
|
@Schema(description = "关联关系")
|
||||||
|
|||||||
@@ -19,12 +19,15 @@ public class CcdiIntermediaryQueryDTO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Schema(description = "姓名/机构名称")
|
@Schema(description = "名称")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@Schema(description = "证件号/统一社会信用代码")
|
@Schema(description = "证件号")
|
||||||
private String certificateNo;
|
private String certificateNo;
|
||||||
|
|
||||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
@Schema(description = "记录类型(INTERMEDIARY/RELATIVE/ENTERPRISE_RELATION)")
|
||||||
private String intermediaryType;
|
private String recordType;
|
||||||
|
|
||||||
|
@Schema(description = "关联中介信息(姓名或证件号)")
|
||||||
|
private String relatedIntermediaryKeyword;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介亲属新增DTO")
|
||||||
|
public class CcdiIntermediaryRelativeAddDTO 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 = "亲属关系")
|
||||||
|
@NotBlank(message = "亲属关系不能为空")
|
||||||
|
@Size(max = 50, message = "亲属关系长度不能超过50个字符")
|
||||||
|
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 = "备注")
|
||||||
|
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介亲属编辑DTO")
|
||||||
|
public class CcdiIntermediaryRelativeEditDTO 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 = "亲属关系")
|
||||||
|
@NotBlank(message = "亲属关系不能为空")
|
||||||
|
@Size(max = 50, message = "亲属关系长度不能超过50个字符")
|
||||||
|
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 = "备注")
|
||||||
|
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.ruoyi.info.collection.domain.dto;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.*;
|
import jakarta.validation.constraints.*;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -9,15 +10,16 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息新增DTO
|
* 招投标信息新增DTO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "采购交易信息新增")
|
@Schema(description = "招投标信息新增")
|
||||||
public class CcdiPurchaseTransactionAddDTO implements Serializable {
|
public class CcdiPurchaseTransactionAddDTO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
@@ -88,30 +90,10 @@ public class CcdiPurchaseTransactionAddDTO implements Serializable {
|
|||||||
@Schema(description = "采购方式")
|
@Schema(description = "采购方式")
|
||||||
private String purchaseMethod;
|
private String purchaseMethod;
|
||||||
|
|
||||||
/** 中标供应商名称 */
|
/** 供应商明细 */
|
||||||
@Size(max = 200, message = "中标供应商名称长度不能超过200个字符")
|
@Valid
|
||||||
@Schema(description = "中标供应商名称")
|
@Schema(description = "供应商明细列表")
|
||||||
private String supplierName;
|
private List<CcdiPurchaseTransactionSupplierDTO> supplierList;
|
||||||
|
|
||||||
/** 供应商联系人 */
|
|
||||||
@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 = "采购申请日期不能为空")
|
@NotNull(message = "采购申请日期不能为空")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.ruoyi.info.collection.domain.dto;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.*;
|
import jakarta.validation.constraints.*;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -9,15 +10,16 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息编辑DTO
|
* 招投标信息编辑DTO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "采购交易信息编辑")
|
@Schema(description = "招投标信息编辑")
|
||||||
public class CcdiPurchaseTransactionEditDTO implements Serializable {
|
public class CcdiPurchaseTransactionEditDTO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
@@ -88,30 +90,10 @@ public class CcdiPurchaseTransactionEditDTO implements Serializable {
|
|||||||
@Schema(description = "采购方式")
|
@Schema(description = "采购方式")
|
||||||
private String purchaseMethod;
|
private String purchaseMethod;
|
||||||
|
|
||||||
/** 中标供应商名称 */
|
/** 供应商明细 */
|
||||||
@Size(max = 200, message = "中标供应商名称长度不能超过200个字符")
|
@Valid
|
||||||
@Schema(description = "中标供应商名称")
|
@Schema(description = "供应商明细列表")
|
||||||
private String supplierName;
|
private List<CcdiPurchaseTransactionSupplierDTO> supplierList;
|
||||||
|
|
||||||
/** 供应商联系人 */
|
|
||||||
@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 = "采购申请日期不能为空")
|
@NotNull(message = "采购申请日期不能为空")
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ import java.io.Serializable;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息查询DTO
|
* 招投标信息查询DTO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "采购交易信息查询条件")
|
@Schema(description = "招投标信息查询条件")
|
||||||
public class CcdiPurchaseTransactionQueryDTO implements Serializable {
|
public class CcdiPurchaseTransactionQueryDTO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.dto;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招投标供应商明细DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "招投标供应商明细")
|
||||||
|
public class CcdiPurchaseTransactionSupplierDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@NotBlank(message = "供应商名称不能为空")
|
||||||
|
@Schema(description = "供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@NotBlank(message = "供应商统一信用代码不能为空")
|
||||||
|
@Schema(description = "供应商统一信用代码")
|
||||||
|
private String supplierUscc;
|
||||||
|
|
||||||
|
@Schema(description = "供应商联系人")
|
||||||
|
private String contactPerson;
|
||||||
|
|
||||||
|
@Schema(description = "供应商联系电话")
|
||||||
|
private String contactPhone;
|
||||||
|
|
||||||
|
@Schema(description = "供应商银行账户")
|
||||||
|
private String supplierBankAccount;
|
||||||
|
|
||||||
|
@Schema(description = "是否中标:1-是,0-否")
|
||||||
|
private Integer isBidWinner;
|
||||||
|
|
||||||
|
@Schema(description = "排序")
|
||||||
|
private Integer sortOrder;
|
||||||
|
}
|
||||||
@@ -10,22 +10,22 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息新增DTO
|
* 员工亲属实体关联新增DTO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "员工实体关系信息新增")
|
@Schema(description = "员工亲属实体关联新增")
|
||||||
public class CcdiStaffEnterpriseRelationAddDTO implements Serializable {
|
public class CcdiStaffEnterpriseRelationAddDTO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 亲属身份证号 */
|
||||||
@NotBlank(message = "身份证号不能为空")
|
@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 = "身份证号格式不正确")
|
@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 = "身份证号")
|
@Schema(description = "亲属身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 关联人在企业的职务 */
|
/** 关联人在企业的职务 */
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息编辑DTO
|
* 员工亲属实体关联编辑DTO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "员工实体关系信息编辑")
|
@Schema(description = "员工亲属实体关联编辑")
|
||||||
public class CcdiStaffEnterpriseRelationEditDTO implements Serializable {
|
public class CcdiStaffEnterpriseRelationEditDTO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
@@ -27,8 +27,8 @@ public class CcdiStaffEnterpriseRelationEditDTO implements Serializable {
|
|||||||
@Schema(description = "主键ID")
|
@Schema(description = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 亲属身份证号 */
|
||||||
@Schema(description = "身份证号(不可修改)")
|
@Schema(description = "亲属身份证号(不可修改)")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 关联人在企业的职务 */
|
/** 关联人在企业的职务 */
|
||||||
|
|||||||
@@ -7,22 +7,30 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息查询DTO
|
* 员工亲属实体关联查询DTO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "员工实体关系信息查询条件")
|
@Schema(description = "员工亲属实体关联查询条件")
|
||||||
public class CcdiStaffEnterpriseRelationQueryDTO implements Serializable {
|
public class CcdiStaffEnterpriseRelationQueryDTO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 亲属身份证号 */
|
||||||
@Schema(description = "身份证号")
|
@Schema(description = "亲属身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
|
/** 亲属姓名 */
|
||||||
|
@Schema(description = "亲属姓名")
|
||||||
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关联员工 */
|
||||||
|
@Schema(description = "关联员工")
|
||||||
|
private String staffPersonName;
|
||||||
|
|
||||||
/** 统一社会信用代码 */
|
/** 统一社会信用代码 */
|
||||||
@Schema(description = "统一社会信用代码")
|
@Schema(description = "统一社会信用代码")
|
||||||
private String socialCreditCode;
|
private String socialCreditCode;
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ public class CcdiStaffFmyRelationQueryDTO implements Serializable {
|
|||||||
@Schema(description = "关系人姓名")
|
@Schema(description = "关系人姓名")
|
||||||
private String relationName;
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关系人身份证号 */
|
||||||
|
@Schema(description = "关系人身份证号")
|
||||||
|
private String relationCertNo;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
@Schema(description = "状态:0-无效,1-有效")
|
@Schema(description = "状态:0-无效,1-有效")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.dto;
|
|||||||
import com.ruoyi.info.collection.annotation.EnumValid;
|
import com.ruoyi.info.collection.annotation.EnumValid;
|
||||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||||
import com.ruoyi.info.collection.enums.RecruitType;
|
import com.ruoyi.info.collection.enums.RecruitType;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.Pattern;
|
import jakarta.validation.constraints.Pattern;
|
||||||
import jakarta.validation.constraints.Size;
|
import jakarta.validation.constraints.Size;
|
||||||
@@ -10,6 +11,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工招聘信息新增DTO
|
* 员工招聘信息新增DTO
|
||||||
@@ -102,4 +104,8 @@ public class CcdiStaffRecruitmentAddDTO implements Serializable {
|
|||||||
/** 面试官2工号 */
|
/** 面试官2工号 */
|
||||||
@Size(max = 10, message = "面试官2工号长度不能超过10个字符")
|
@Size(max = 10, message = "面试官2工号长度不能超过10个字符")
|
||||||
private String interviewerId2;
|
private String interviewerId2;
|
||||||
|
|
||||||
|
/** 历史工作经历列表 */
|
||||||
|
@Valid
|
||||||
|
private List<CcdiStaffRecruitmentWorkEditDTO> workExperienceList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ import jakarta.validation.constraints.NotBlank;
|
|||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import jakarta.validation.constraints.Pattern;
|
import jakarta.validation.constraints.Pattern;
|
||||||
import jakarta.validation.constraints.Size;
|
import jakarta.validation.constraints.Size;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工招聘信息编辑DTO
|
* 员工招聘信息编辑DTO
|
||||||
@@ -24,8 +26,13 @@ public class CcdiStaffRecruitmentEditDTO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@NotNull(message = "招聘信息ID不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
/** 招聘记录编号 */
|
/** 招聘记录编号 */
|
||||||
@NotNull(message = "招聘记录编号不能为空")
|
@NotBlank(message = "招聘记录编号不能为空")
|
||||||
|
@Size(max = 32, message = "招聘记录编号长度不能超过32个字符")
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 招聘项目名称 */
|
/** 招聘项目名称 */
|
||||||
@@ -91,4 +98,8 @@ public class CcdiStaffRecruitmentEditDTO implements Serializable {
|
|||||||
/** 面试官2工号 */
|
/** 面试官2工号 */
|
||||||
@Size(max = 10, message = "面试官2工号长度不能超过10个字符")
|
@Size(max = 10, message = "面试官2工号长度不能超过10个字符")
|
||||||
private String interviewerId2;
|
private String interviewerId2;
|
||||||
|
|
||||||
|
/** 历史工作经历列表 */
|
||||||
|
@Valid
|
||||||
|
private List<CcdiStaffRecruitmentWorkEditDTO> workExperienceList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.dto;
|
||||||
|
|
||||||
|
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-04-22
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiStaffRecruitmentWorkEditDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 排序号 */
|
||||||
|
private Integer sortOrder;
|
||||||
|
|
||||||
|
/** 工作单位 */
|
||||||
|
@Size(max = 200, message = "工作单位长度不能超过200个字符")
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/** 所属部门 */
|
||||||
|
@Size(max = 100, message = "所属部门长度不能超过100个字符")
|
||||||
|
private String departmentName;
|
||||||
|
|
||||||
|
/** 岗位名称 */
|
||||||
|
@Size(max = 100, message = "岗位名称长度不能超过100个字符")
|
||||||
|
private String positionName;
|
||||||
|
|
||||||
|
/** 入职年月 */
|
||||||
|
@Pattern(regexp = "^$|^((19|20)\\d{2})-(0[1-9]|1[0-2])$", message = "入职年月格式不正确,应为YYYY-MM")
|
||||||
|
private String jobStartMonth;
|
||||||
|
|
||||||
|
/** 离职年月 */
|
||||||
|
@Pattern(regexp = "^$|^((19|20)\\d{2})-(0[1-9]|1[0-2])$", message = "离职年月格式不正确,应为YYYY-MM")
|
||||||
|
private String jobEndMonth;
|
||||||
|
|
||||||
|
/** 离职原因 */
|
||||||
|
@Size(max = 500, message = "离职原因长度不能超过500个字符")
|
||||||
|
private String departureReason;
|
||||||
|
|
||||||
|
/** 主要工作内容 */
|
||||||
|
@Size(max = 1000, message = "主要工作内容长度不能超过1000个字符")
|
||||||
|
private String workContent;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -25,6 +26,7 @@ public class CcdiAccountInfoExcel implements Serializable {
|
|||||||
|
|
||||||
@ExcelProperty(value = "证件号*", index = 1)
|
@ExcelProperty(value = "证件号*", index = 1)
|
||||||
@ColumnWidth(24)
|
@ColumnWidth(24)
|
||||||
|
@TextFormat
|
||||||
private String ownerId;
|
private String ownerId;
|
||||||
|
|
||||||
@ExcelProperty(value = "账户姓名*", index = 2)
|
@ExcelProperty(value = "账户姓名*", index = 2)
|
||||||
@@ -33,6 +35,7 @@ public class CcdiAccountInfoExcel implements Serializable {
|
|||||||
|
|
||||||
@ExcelProperty(value = "账户号码*", index = 3)
|
@ExcelProperty(value = "账户号码*", index = 3)
|
||||||
@ColumnWidth(28)
|
@ColumnWidth(28)
|
||||||
|
@TextFormat
|
||||||
private String accountNo;
|
private String accountNo;
|
||||||
|
|
||||||
@ExcelProperty(value = "账户类型*", index = 4)
|
@ExcelProperty(value = "账户类型*", index = 4)
|
||||||
@@ -49,6 +52,7 @@ public class CcdiAccountInfoExcel implements Serializable {
|
|||||||
|
|
||||||
@ExcelProperty(value = "银行代码", index = 7)
|
@ExcelProperty(value = "银行代码", index = 7)
|
||||||
@ColumnWidth(16)
|
@ColumnWidth(16)
|
||||||
|
@TextFormat
|
||||||
private String bankCode;
|
private String bankCode;
|
||||||
|
|
||||||
@ExcelProperty(value = "币种", index = 8)
|
@ExcelProperty(value = "币种", index = 8)
|
||||||
|
|||||||
@@ -26,14 +26,14 @@ public class CcdiBaseStaffAssetInfoExcel implements Serializable {
|
|||||||
|
|
||||||
/** 员工身份证号 */
|
/** 员工身份证号 */
|
||||||
@ExcelProperty(value = "员工身份证号*", index = 0)
|
@ExcelProperty(value = "员工身份证号*", index = 0)
|
||||||
@ColumnWidth(22)
|
@ColumnWidth(24)
|
||||||
@Required
|
@Required
|
||||||
@TextFormat
|
@TextFormat
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 资产大类 */
|
/** 资产大类 */
|
||||||
@ExcelProperty(value = "资产大类*", index = 1)
|
@ExcelProperty(value = "资产大类*", index = 1)
|
||||||
@ColumnWidth(16)
|
@ColumnWidth(18)
|
||||||
@Required
|
@Required
|
||||||
private String assetMainType;
|
private String assetMainType;
|
||||||
|
|
||||||
@@ -51,39 +51,39 @@ public class CcdiBaseStaffAssetInfoExcel implements Serializable {
|
|||||||
|
|
||||||
/** 产权占比 */
|
/** 产权占比 */
|
||||||
@ExcelProperty(value = "产权占比", index = 4)
|
@ExcelProperty(value = "产权占比", index = 4)
|
||||||
@ColumnWidth(12)
|
@ColumnWidth(14)
|
||||||
private BigDecimal ownershipRatio;
|
private BigDecimal ownershipRatio;
|
||||||
|
|
||||||
/** 购买/评估日期 */
|
/** 购买/评估日期 */
|
||||||
@ExcelProperty(value = "购买/评估日期", index = 5)
|
@ExcelProperty(value = "购买/评估日期", index = 5)
|
||||||
@ColumnWidth(16)
|
@ColumnWidth(20)
|
||||||
private Date purchaseEvalDate;
|
private Date purchaseEvalDate;
|
||||||
|
|
||||||
/** 资产原值 */
|
/** 资产原值 */
|
||||||
@ExcelProperty(value = "资产原值", index = 6)
|
@ExcelProperty(value = "资产原值", index = 6)
|
||||||
@ColumnWidth(16)
|
@ColumnWidth(18)
|
||||||
private BigDecimal originalValue;
|
private BigDecimal originalValue;
|
||||||
|
|
||||||
/** 当前估值 */
|
/** 当前估值 */
|
||||||
@ExcelProperty(value = "当前估值*", index = 7)
|
@ExcelProperty(value = "当前估值*", index = 7)
|
||||||
@ColumnWidth(16)
|
@ColumnWidth(18)
|
||||||
@Required
|
@Required
|
||||||
private BigDecimal currentValue;
|
private BigDecimal currentValue;
|
||||||
|
|
||||||
/** 估值截止日期 */
|
/** 估值截止日期 */
|
||||||
@ExcelProperty(value = "估值截止日期", index = 8)
|
@ExcelProperty(value = "估值截止日期", index = 8)
|
||||||
@ColumnWidth(16)
|
@ColumnWidth(20)
|
||||||
private Date valuationDate;
|
private Date valuationDate;
|
||||||
|
|
||||||
/** 资产状态 */
|
/** 资产状态 */
|
||||||
@ExcelProperty(value = "资产状态*", index = 9)
|
@ExcelProperty(value = "资产状态*", index = 9)
|
||||||
@ColumnWidth(14)
|
@ColumnWidth(16)
|
||||||
@DictDropdown(dictType = "ccdi_asset_status")
|
@DictDropdown(dictType = "ccdi_asset_status")
|
||||||
@Required
|
@Required
|
||||||
private String assetStatus;
|
private String assetStatus;
|
||||||
|
|
||||||
/** 备注 */
|
/** 备注 */
|
||||||
@ExcelProperty(value = "备注", index = 10)
|
@ExcelProperty(value = "备注", index = 10)
|
||||||
@ColumnWidth(28)
|
@ColumnWidth(32)
|
||||||
private String remarks;
|
private String remarks;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
|||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.DictDropdown;
|
import com.ruoyi.common.annotation.DictDropdown;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -25,47 +26,56 @@ public class CcdiBaseStaffExcel implements Serializable {
|
|||||||
|
|
||||||
/** 姓名 */
|
/** 姓名 */
|
||||||
@ExcelProperty(value = "姓名", index = 0)
|
@ExcelProperty(value = "姓名", index = 0)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(16)
|
||||||
@Required
|
@Required
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/** 员工ID */
|
/** 员工ID */
|
||||||
@ExcelProperty(value = "员工ID", index = 1)
|
@ExcelProperty(value = "员工ID", index = 1)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(18)
|
||||||
@Required
|
@Required
|
||||||
private Long staffId;
|
private Long staffId;
|
||||||
|
|
||||||
/** 所属部门ID */
|
/** 所属部门ID */
|
||||||
@ExcelProperty(value = "所属部门ID", index = 2)
|
@ExcelProperty(value = "所属部门ID", index = 2)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
private Long deptId;
|
private Long deptId;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 身份证号 */
|
||||||
@ExcelProperty(value = "身份证号", index = 3)
|
@ExcelProperty(value = "身份证号", index = 3)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(24)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String idCard;
|
private String idCard;
|
||||||
|
|
||||||
/** 电话 */
|
/** 电话 */
|
||||||
@ExcelProperty(value = "电话", index = 4)
|
@ExcelProperty(value = "电话", index = 4)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(18)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
/** 年收入 */
|
/** 年收入 */
|
||||||
@ExcelProperty(value = "年收入(元/年)", index = 5)
|
@ExcelProperty(value = "年收入(元/年)", index = 5)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(20)
|
||||||
private BigDecimal annualIncome;
|
private BigDecimal annualIncome;
|
||||||
|
|
||||||
/** 入职时间 */
|
/** 入职时间 */
|
||||||
@ExcelProperty(value = "入职时间", index = 6)
|
@ExcelProperty(value = "入职时间", index = 6)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(18)
|
||||||
private Date hireDate;
|
private Date hireDate;
|
||||||
|
|
||||||
|
/** 是否党员 */
|
||||||
|
@ExcelProperty(value = "是否党员", index = 7)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
@DictDropdown(dictType = "ccdi_yes_no_flag")
|
||||||
|
@Required
|
||||||
|
private Integer partyMember;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
@ExcelProperty(value = "状态", index = 7)
|
@ExcelProperty(value = "状态", index = 8)
|
||||||
@ColumnWidth(10)
|
@ColumnWidth(14)
|
||||||
@DictDropdown(dictType = "ccdi_employee_status")
|
@DictDropdown(dictType = "ccdi_employee_status")
|
||||||
@Required
|
@Required
|
||||||
private String status;
|
private String status;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -26,6 +27,7 @@ public class CcdiCustEnterpriseRelationExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "身份证号", index = 0)
|
@ExcelProperty(value = "身份证号", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
@Schema(description = "身份证号")
|
@Schema(description = "身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
@@ -33,6 +35,7 @@ public class CcdiCustEnterpriseRelationExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
||||||
@ColumnWidth(25)
|
@ColumnWidth(25)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
@Schema(description = "统一社会信用代码")
|
@Schema(description = "统一社会信用代码")
|
||||||
private String socialCreditCode;
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
|||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.DictDropdown;
|
import com.ruoyi.common.annotation.DictDropdown;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -26,6 +27,7 @@ public class CcdiCustFmyRelationExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "信贷客户身份证号*", index = 0)
|
@ExcelProperty(value = "信贷客户身份证号*", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 关系类型 */
|
/** 关系类型 */
|
||||||
@@ -63,16 +65,19 @@ public class CcdiCustFmyRelationExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "关系人证件号码*", index = 6)
|
@ExcelProperty(value = "关系人证件号码*", index = 6)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String relationCertNo;
|
private String relationCertNo;
|
||||||
|
|
||||||
/** 手机号码1 */
|
/** 手机号码1 */
|
||||||
@ExcelProperty(value = "手机号码1", index = 7)
|
@ExcelProperty(value = "手机号码1", index = 7)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String mobilePhone1;
|
private String mobilePhone1;
|
||||||
|
|
||||||
/** 手机号码2 */
|
/** 手机号码2 */
|
||||||
@ExcelProperty(value = "手机号码2", index = 8)
|
@ExcelProperty(value = "手机号码2", index = 8)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String mobilePhone2;
|
private String mobilePhone2;
|
||||||
|
|
||||||
/** 微信名称1 */
|
/** 微信名称1 */
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
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.TextFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实体库管理 Excel 导入模板对象
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiEnterpriseBaseInfoExcel implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "统一社会信用代码*", index = 0)
|
||||||
|
@ColumnWidth(24)
|
||||||
|
@TextFormat
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "企业名称*", index = 1)
|
||||||
|
@ColumnWidth(30)
|
||||||
|
private String enterpriseName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "企业类型", index = 2)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
@DictDropdown(dictType = "ccdi_entity_type")
|
||||||
|
private String enterpriseType;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "企业性质", index = 3)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
@DictDropdown(dictType = "ccdi_enterprise_nature")
|
||||||
|
private String enterpriseNature;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "行业分类", index = 4)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String industryClass;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "所属行业", index = 5)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String industryName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "成立日期", index = 6)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private Date establishDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "注册地址", index = 7)
|
||||||
|
@ColumnWidth(36)
|
||||||
|
private String registerAddress;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "法定代表人", index = 8)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String legalRepresentative;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "法定代表人证件类型", index = 9)
|
||||||
|
@ColumnWidth(22)
|
||||||
|
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||||
|
private String legalCertType;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "法定代表人证件号码", index = 10)
|
||||||
|
@ColumnWidth(24)
|
||||||
|
@TextFormat
|
||||||
|
private String legalCertNo;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "股东1", index = 11)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String shareholder1;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "股东2", index = 12)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String shareholder2;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "股东3", index = 13)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String shareholder3;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "股东4", index = 14)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String shareholder4;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "股东5", index = 15)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String shareholder5;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "经营状态", index = 16)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "风险等级*", index = 17)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "企业来源*", index = 18)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String entSource;
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
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 com.ruoyi.common.annotation.TextFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中介实体关联关系导入对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiIntermediaryEnterpriseRelationExcel implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 中介本人证件号码 */
|
||||||
|
@ExcelProperty(value = "中介本人证件号码", index = 0)
|
||||||
|
@ColumnWidth(24)
|
||||||
|
@Required
|
||||||
|
@TextFormat
|
||||||
|
private String ownerPersonId;
|
||||||
|
|
||||||
|
/** 统一社会信用代码 */
|
||||||
|
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
||||||
|
@ColumnWidth(24)
|
||||||
|
@Required
|
||||||
|
@TextFormat
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
/** 关联职务 */
|
||||||
|
@ExcelProperty(value = "关联职务", index = 2)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
private String relationPersonPost;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
@ExcelProperty(value = "备注", index = 3)
|
||||||
|
@ColumnWidth(30)
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.DictDropdown;
|
import com.ruoyi.common.annotation.DictDropdown;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -29,6 +30,7 @@ public class CcdiIntermediaryEntityExcel implements Serializable {
|
|||||||
/** 统一社会信用代码 */
|
/** 统一社会信用代码 */
|
||||||
@ExcelProperty(value = "统一社会信用代码*", index = 1)
|
@ExcelProperty(value = "统一社会信用代码*", index = 1)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
|
@TextFormat
|
||||||
private String socialCreditCode;
|
private String socialCreditCode;
|
||||||
|
|
||||||
/** 主体类型 */
|
/** 主体类型 */
|
||||||
@@ -77,6 +79,7 @@ public class CcdiIntermediaryEntityExcel implements Serializable {
|
|||||||
/** 法定代表人证件号码 */
|
/** 法定代表人证件号码 */
|
||||||
@ExcelProperty(value = "法定代表人证件号码", index = 10)
|
@ExcelProperty(value = "法定代表人证件号码", index = 10)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
|
@TextFormat
|
||||||
private String legalCertNo;
|
private String legalCertNo;
|
||||||
|
|
||||||
/** 股东1 */
|
/** 股东1 */
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.DictDropdown;
|
import com.ruoyi.common.annotation.DictDropdown;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -34,6 +35,7 @@ public class CcdiIntermediaryPersonExcel implements Serializable {
|
|||||||
/** 人员子类型 */
|
/** 人员子类型 */
|
||||||
@ExcelProperty(value = "人员子类型", index = 2)
|
@ExcelProperty(value = "人员子类型", index = 2)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@DictDropdown(dictType = "ccdi_person_sub_type")
|
||||||
private String personSubType;
|
private String personSubType;
|
||||||
|
|
||||||
/** 性别 */
|
/** 性别 */
|
||||||
@@ -51,11 +53,13 @@ public class CcdiIntermediaryPersonExcel implements Serializable {
|
|||||||
/** 证件号码 */
|
/** 证件号码 */
|
||||||
@ExcelProperty(value = "证件号码*", index = 5)
|
@ExcelProperty(value = "证件号码*", index = 5)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
|
@TextFormat
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 手机号码 */
|
/** 手机号码 */
|
||||||
@ExcelProperty(value = "手机号码", index = 6)
|
@ExcelProperty(value = "手机号码", index = 6)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String mobile;
|
private String mobile;
|
||||||
|
|
||||||
/** 微信号 */
|
/** 微信号 */
|
||||||
@@ -76,6 +80,7 @@ public class CcdiIntermediaryPersonExcel implements Serializable {
|
|||||||
/** 企业统一信用码 */
|
/** 企业统一信用码 */
|
||||||
@ExcelProperty(value = "企业统一信用码", index = 10)
|
@ExcelProperty(value = "企业统一信用码", index = 10)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
|
@TextFormat
|
||||||
private String socialCreditCode;
|
private String socialCreditCode;
|
||||||
|
|
||||||
/** 职位 */
|
/** 职位 */
|
||||||
@@ -83,19 +88,14 @@ public class CcdiIntermediaryPersonExcel implements Serializable {
|
|||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
private String position;
|
private String position;
|
||||||
|
|
||||||
/** 关联人员ID */
|
/** 关联中介本人证件号码 */
|
||||||
@ExcelProperty(value = "关联人员ID", index = 12)
|
@ExcelProperty(value = "关联中介本人证件号码", index = 12)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(24)
|
||||||
|
@TextFormat
|
||||||
private String relatedNumId;
|
private String relatedNumId;
|
||||||
|
|
||||||
/** 关系类型 */
|
|
||||||
@ExcelProperty(value = "关系类型", index = 13)
|
|
||||||
@ColumnWidth(15)
|
|
||||||
@DictDropdown(dictType = "ccdi_relation_type")
|
|
||||||
private String relationType;
|
|
||||||
|
|
||||||
/** 备注 */
|
/** 备注 */
|
||||||
@ExcelProperty(value = "备注", index = 14)
|
@ExcelProperty(value = "备注", index = 13)
|
||||||
@ColumnWidth(30)
|
@ColumnWidth(30)
|
||||||
private String remark;
|
private String remark;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -11,7 +12,7 @@ import java.math.BigDecimal;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息Excel导入导出对象
|
* 招投标主信息Excel导入导出对象
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
@@ -26,6 +27,7 @@ public class CcdiPurchaseTransactionExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "采购事项ID", index = 0)
|
@ExcelProperty(value = "采购事项ID", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String purchaseId;
|
private String purchaseId;
|
||||||
|
|
||||||
/** 采购类别 */
|
/** 采购类别 */
|
||||||
@@ -88,107 +90,84 @@ public class CcdiPurchaseTransactionExcel implements Serializable {
|
|||||||
@Required
|
@Required
|
||||||
private String purchaseMethod;
|
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)
|
@ExcelProperty(value = "采购申请日期", index = 12)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
@Required
|
@Required
|
||||||
private Date applyDate;
|
private Date applyDate;
|
||||||
|
|
||||||
/** 采购计划批准日期 */
|
/** 采购计划批准日期 */
|
||||||
@ExcelProperty(value = "采购计划批准日期", index = 18)
|
@ExcelProperty(value = "采购计划批准日期", index = 13)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date planApproveDate;
|
private Date planApproveDate;
|
||||||
|
|
||||||
/** 采购公告发布日期 */
|
/** 采购公告发布日期 */
|
||||||
@ExcelProperty(value = "采购公告发布日期", index = 19)
|
@ExcelProperty(value = "采购公告发布日期", index = 14)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date announceDate;
|
private Date announceDate;
|
||||||
|
|
||||||
/** 开标日期 */
|
/** 开标日期 */
|
||||||
@ExcelProperty(value = "开标日期", index = 20)
|
@ExcelProperty(value = "开标日期", index = 15)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date bidOpenDate;
|
private Date bidOpenDate;
|
||||||
|
|
||||||
/** 合同签订日期 */
|
/** 合同签订日期 */
|
||||||
@ExcelProperty(value = "合同签订日期", index = 21)
|
@ExcelProperty(value = "合同签订日期", index = 16)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date contractSignDate;
|
private Date contractSignDate;
|
||||||
|
|
||||||
/** 预计交货日期 */
|
/** 预计交货日期 */
|
||||||
@ExcelProperty(value = "预计交货日期", index = 22)
|
@ExcelProperty(value = "预计交货日期", index = 17)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date expectedDeliveryDate;
|
private Date expectedDeliveryDate;
|
||||||
|
|
||||||
/** 实际交货日期 */
|
/** 实际交货日期 */
|
||||||
@ExcelProperty(value = "实际交货日期", index = 23)
|
@ExcelProperty(value = "实际交货日期", index = 18)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date actualDeliveryDate;
|
private Date actualDeliveryDate;
|
||||||
|
|
||||||
/** 验收日期 */
|
/** 验收日期 */
|
||||||
@ExcelProperty(value = "验收日期", index = 24)
|
@ExcelProperty(value = "验收日期", index = 19)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date acceptanceDate;
|
private Date acceptanceDate;
|
||||||
|
|
||||||
/** 结算日期 */
|
/** 结算日期 */
|
||||||
@ExcelProperty(value = "结算日期", index = 25)
|
@ExcelProperty(value = "结算日期", index = 20)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private Date settlementDate;
|
private Date settlementDate;
|
||||||
|
|
||||||
/** 申请人工号 */
|
/** 申请人工号 */
|
||||||
@ExcelProperty(value = "申请人工号", index = 26)
|
@ExcelProperty(value = "申请人工号", index = 21)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String applicantId;
|
private String applicantId;
|
||||||
|
|
||||||
/** 申请人姓名 */
|
/** 申请人姓名 */
|
||||||
@ExcelProperty(value = "申请人姓名", index = 27)
|
@ExcelProperty(value = "申请人姓名", index = 22)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
@Required
|
@Required
|
||||||
private String applicantName;
|
private String applicantName;
|
||||||
|
|
||||||
/** 申请部门 */
|
/** 申请部门 */
|
||||||
@ExcelProperty(value = "申请部门", index = 28)
|
@ExcelProperty(value = "申请部门", index = 23)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
@Required
|
@Required
|
||||||
private String applyDepartment;
|
private String applyDepartment;
|
||||||
|
|
||||||
/** 采购负责人工号 */
|
/** 采购负责人工号 */
|
||||||
@ExcelProperty(value = "采购负责人工号", index = 29)
|
@ExcelProperty(value = "采购负责人工号", index = 24)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String purchaseLeaderId;
|
private String purchaseLeaderId;
|
||||||
|
|
||||||
/** 采购负责人姓名 */
|
/** 采购负责人姓名 */
|
||||||
@ExcelProperty(value = "采购负责人姓名", index = 30)
|
@ExcelProperty(value = "采购负责人姓名", index = 25)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
private String purchaseLeaderName;
|
private String purchaseLeaderName;
|
||||||
|
|
||||||
/** 采购部门 */
|
/** 采购部门 */
|
||||||
@ExcelProperty(value = "采购部门", index = 31)
|
@ExcelProperty(value = "采购部门", index = 26)
|
||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private String purchaseDepartment;
|
private String purchaseDepartment;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
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 com.ruoyi.common.annotation.TextFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招投标供应商明细Excel对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiPurchaseTransactionSupplierExcel implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "采购事项ID", index = 0)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@Required
|
||||||
|
@TextFormat
|
||||||
|
private String purchaseId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供应商名称", index = 1)
|
||||||
|
@ColumnWidth(25)
|
||||||
|
@Required
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供应商统一信用代码", index = 2)
|
||||||
|
@ColumnWidth(25)
|
||||||
|
@TextFormat
|
||||||
|
private String supplierUscc;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供应商联系人", index = 3)
|
||||||
|
@ColumnWidth(15)
|
||||||
|
private String contactPerson;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供应商联系电话", index = 4)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
@TextFormat
|
||||||
|
private String contactPhone;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供应商银行账户", index = 5)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@TextFormat
|
||||||
|
private String supplierBankAccount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "是否中标", index = 6)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
@DictDropdown(dictType = "ccdi_yes_no_flag")
|
||||||
|
private String isBidWinner;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "排序", index = 7)
|
||||||
|
@ColumnWidth(10)
|
||||||
|
private Integer sortOrder;
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -10,29 +11,31 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息Excel导入导出对象
|
* 员工亲属实体关联Excel导入导出对象
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "员工实体关系信息Excel导入导出对象")
|
@Schema(description = "员工亲属实体关联Excel导入导出对象")
|
||||||
public class CcdiStaffEnterpriseRelationExcel implements Serializable {
|
public class CcdiStaffEnterpriseRelationExcel implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 亲属身份证号 */
|
||||||
@ExcelProperty(value = "身份证号", index = 0)
|
@ExcelProperty(value = "亲属身份证号", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
@Schema(description = "身份证号")
|
@TextFormat
|
||||||
|
@Schema(description = "亲属身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 统一社会信用代码 */
|
/** 统一社会信用代码 */
|
||||||
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
||||||
@ColumnWidth(25)
|
@ColumnWidth(25)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
@Schema(description = "统一社会信用代码")
|
@Schema(description = "统一社会信用代码")
|
||||||
private String socialCreditCode;
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public class CcdiStaffFmyRelationExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "员工身份证号*", index = 0)
|
@ExcelProperty(value = "员工身份证号*", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 关系类型 */
|
/** 关系类型 */
|
||||||
@@ -71,11 +72,13 @@ public class CcdiStaffFmyRelationExcel implements Serializable {
|
|||||||
/** 手机号码1 */
|
/** 手机号码1 */
|
||||||
@ExcelProperty(value = "手机号码1", index = 7)
|
@ExcelProperty(value = "手机号码1", index = 7)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String mobilePhone1;
|
private String mobilePhone1;
|
||||||
|
|
||||||
/** 手机号码2 */
|
/** 手机号码2 */
|
||||||
@ExcelProperty(value = "手机号码2", index = 8)
|
@ExcelProperty(value = "手机号码2", index = 8)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String mobilePhone2;
|
private String mobilePhone2;
|
||||||
|
|
||||||
/** 家庭成员年收入 */
|
/** 家庭成员年收入 */
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
|||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.DictDropdown;
|
import com.ruoyi.common.annotation.DictDropdown;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -21,10 +22,11 @@ public class CcdiStaffRecruitmentExcel implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 招聘项目编号 */
|
/** 招聘记录编号 */
|
||||||
@ExcelProperty(value = "招聘项目编号", index = 0)
|
@ExcelProperty(value = "招聘记录编号", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 招聘项目名称 */
|
/** 招聘项目名称 */
|
||||||
@@ -51,66 +53,76 @@ public class CcdiStaffRecruitmentExcel implements Serializable {
|
|||||||
@Required
|
@Required
|
||||||
private String posDesc;
|
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)
|
@ExcelProperty(value = "录用情况", index = 5)
|
||||||
@ColumnWidth(10)
|
@ColumnWidth(10)
|
||||||
@DictDropdown(dictType = "ccdi_admit_status")
|
@DictDropdown(dictType = "ccdi_admit_status")
|
||||||
@Required
|
@Required
|
||||||
private String admitStatus;
|
private String admitStatus;
|
||||||
|
|
||||||
|
/** 候选人姓名 */
|
||||||
|
@ExcelProperty(value = "候选人姓名", index = 6)
|
||||||
|
@ColumnWidth(15)
|
||||||
|
@Required
|
||||||
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘类型 */
|
||||||
|
@ExcelProperty(value = "招聘类型", index = 7)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
@DictDropdown(dictType = "ccdi_recruit_type")
|
||||||
|
@Required
|
||||||
|
private String recruitType;
|
||||||
|
|
||||||
|
/** 应聘人员学历 */
|
||||||
|
@ExcelProperty(value = "学历", index = 8)
|
||||||
|
@ColumnWidth(15)
|
||||||
|
@Required
|
||||||
|
private String candEdu;
|
||||||
|
|
||||||
|
/** 应聘人员证件号码 */
|
||||||
|
@ExcelProperty(value = "证件号码", index = 9)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@Required
|
||||||
|
@TextFormat
|
||||||
|
private String candId;
|
||||||
|
|
||||||
|
/** 应聘人员毕业年月 */
|
||||||
|
@ExcelProperty(value = "毕业年月", index = 10)
|
||||||
|
@ColumnWidth(15)
|
||||||
|
@Required
|
||||||
|
private String candGrad;
|
||||||
|
|
||||||
|
/** 应聘人员毕业院校 */
|
||||||
|
@ExcelProperty(value = "毕业院校", index = 11)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@Required
|
||||||
|
private String candSchool;
|
||||||
|
|
||||||
|
/** 应聘人员专业 */
|
||||||
|
@ExcelProperty(value = "专业", index = 12)
|
||||||
|
@ColumnWidth(15)
|
||||||
|
@Required
|
||||||
|
private String candMajor;
|
||||||
|
|
||||||
/** 面试官1姓名 */
|
/** 面试官1姓名 */
|
||||||
@ExcelProperty(value = "面试官1姓名", index = 12)
|
@ExcelProperty(value = "面试官1姓名", index = 13)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
private String interviewerName1;
|
private String interviewerName1;
|
||||||
|
|
||||||
/** 面试官1工号 */
|
/** 面试官1工号 */
|
||||||
@ExcelProperty(value = "面试官1工号", index = 13)
|
@ExcelProperty(value = "面试官1工号", index = 14)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String interviewerId1;
|
private String interviewerId1;
|
||||||
|
|
||||||
/** 面试官2姓名 */
|
/** 面试官2姓名 */
|
||||||
@ExcelProperty(value = "面试官2姓名", index = 14)
|
@ExcelProperty(value = "面试官2姓名", index = 15)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
private String interviewerName2;
|
private String interviewerName2;
|
||||||
|
|
||||||
/** 面试官2工号 */
|
/** 面试官2工号 */
|
||||||
@ExcelProperty(value = "面试官2工号", index = 15)
|
@ExcelProperty(value = "面试官2工号", index = 16)
|
||||||
@ColumnWidth(15)
|
@ColumnWidth(15)
|
||||||
|
@TextFormat
|
||||||
private String interviewerId2;
|
private String interviewerId2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ruoyi.info.collection.domain.excel;
|
|||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import com.ruoyi.common.annotation.TextFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@@ -24,6 +25,7 @@ public class CcdiStaffRecruitmentWorkExcel implements Serializable {
|
|||||||
@ExcelProperty(value = "招聘记录编号", index = 0)
|
@ExcelProperty(value = "招聘记录编号", index = 0)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
|
@TextFormat
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 候选人姓名 */
|
/** 候选人姓名 */
|
||||||
@@ -61,20 +63,20 @@ public class CcdiStaffRecruitmentWorkExcel implements Serializable {
|
|||||||
@ColumnWidth(18)
|
@ColumnWidth(18)
|
||||||
private String departmentName;
|
private String departmentName;
|
||||||
|
|
||||||
/** 岗位 */
|
/** 岗位名称 */
|
||||||
@ExcelProperty(value = "岗位", index = 7)
|
@ExcelProperty(value = "岗位名称", index = 7)
|
||||||
@ColumnWidth(20)
|
@ColumnWidth(20)
|
||||||
@Required
|
@Required
|
||||||
private String positionName;
|
private String positionName;
|
||||||
|
|
||||||
/** 入职年月 */
|
/** 入职年月 */
|
||||||
@ExcelProperty(value = "入职年月", index = 8)
|
@ExcelProperty(value = "入职时间", index = 8)
|
||||||
@ColumnWidth(12)
|
@ColumnWidth(12)
|
||||||
@Required
|
@Required
|
||||||
private String jobStartMonth;
|
private String jobStartMonth;
|
||||||
|
|
||||||
/** 离职年月 */
|
/** 离职年月 */
|
||||||
@ExcelProperty(value = "离职年月", index = 9)
|
@ExcelProperty(value = "离职时间", index = 9)
|
||||||
@ColumnWidth(12)
|
@ColumnWidth(12)
|
||||||
private String jobEndMonth;
|
private String jobEndMonth;
|
||||||
|
|
||||||
@@ -83,8 +85,8 @@ public class CcdiStaffRecruitmentWorkExcel implements Serializable {
|
|||||||
@ColumnWidth(30)
|
@ColumnWidth(30)
|
||||||
private String departureReason;
|
private String departureReason;
|
||||||
|
|
||||||
/** 工作内容 */
|
/** 主要工作内容 */
|
||||||
@ExcelProperty(value = "工作内容", index = 11)
|
@ExcelProperty(value = "主要工作内容", index = 11)
|
||||||
@ColumnWidth(35)
|
@ColumnWidth(35)
|
||||||
private String workContent;
|
private String workContent;
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,14 @@ import java.math.BigDecimal;
|
|||||||
@Schema(description = "亲属资产信息导入失败记录")
|
@Schema(description = "亲属资产信息导入失败记录")
|
||||||
public class AssetImportFailureVO {
|
public class AssetImportFailureVO {
|
||||||
|
|
||||||
|
/** Sheet名称 */
|
||||||
|
@Schema(description = "Sheet名称")
|
||||||
|
private String sheetName;
|
||||||
|
|
||||||
|
/** Excel行号 */
|
||||||
|
@Schema(description = "Excel行号")
|
||||||
|
private Integer rowNum;
|
||||||
|
|
||||||
/** 亲属证件号 */
|
/** 亲属证件号 */
|
||||||
@Schema(description = "亲属证件号")
|
@Schema(description = "亲属证件号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|||||||
@@ -15,6 +15,14 @@ import java.math.BigDecimal;
|
|||||||
@Schema(description = "员工资产信息导入失败记录")
|
@Schema(description = "员工资产信息导入失败记录")
|
||||||
public class BaseStaffAssetImportFailureVO {
|
public class BaseStaffAssetImportFailureVO {
|
||||||
|
|
||||||
|
/** Sheet名称 */
|
||||||
|
@Schema(description = "Sheet名称")
|
||||||
|
private String sheetName;
|
||||||
|
|
||||||
|
/** Excel行号 */
|
||||||
|
@Schema(description = "Excel行号")
|
||||||
|
private Integer rowNum;
|
||||||
|
|
||||||
/** 员工身份证号 */
|
/** 员工身份证号 */
|
||||||
@Schema(description = "员工身份证号")
|
@Schema(description = "员工身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 员工双Sheet导入提交结果
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "员工双Sheet导入提交结果")
|
||||||
|
public class BaseStaffImportSubmitResultVO {
|
||||||
|
|
||||||
|
@Schema(description = "员工信息导入任务ID")
|
||||||
|
private String staffTaskId;
|
||||||
|
|
||||||
|
@Schema(description = "员工资产信息导入任务ID")
|
||||||
|
private String assetTaskId;
|
||||||
|
|
||||||
|
@Schema(description = "提交说明")
|
||||||
|
private String message;
|
||||||
|
}
|
||||||
@@ -44,6 +44,9 @@ public class CcdiBaseStaffVO implements Serializable {
|
|||||||
/** 入职时间 */
|
/** 入职时间 */
|
||||||
private Date hireDate;
|
private Date hireDate;
|
||||||
|
|
||||||
|
/** 是否党员:0-否 1-是 */
|
||||||
|
private Integer partyMember;
|
||||||
|
|
||||||
/** 状态 */
|
/** 状态 */
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
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-04-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "实体库管理VO")
|
||||||
|
public class CcdiEnterpriseBaseInfoVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@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 = "成立日期")
|
||||||
|
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 status;
|
||||||
|
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@Schema(description = "企业来源")
|
||||||
|
private String entSource;
|
||||||
|
|
||||||
|
@Schema(description = "数据来源")
|
||||||
|
private String dataSource;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介关联机构VO")
|
||||||
|
public class CcdiIntermediaryEnterpriseRelationVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "所属中介ID")
|
||||||
|
private String intermediaryBizId;
|
||||||
|
|
||||||
|
@Schema(description = "所属中介姓名")
|
||||||
|
private String intermediaryName;
|
||||||
|
|
||||||
|
@Schema(description = "所属中介证件号")
|
||||||
|
private String intermediaryPersonId;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@Schema(description = "机构名称")
|
||||||
|
private String enterpriseName;
|
||||||
|
|
||||||
|
@Schema(description = "关联角色/职务")
|
||||||
|
private String relationPersonPost;
|
||||||
|
|
||||||
|
@Schema(description = "备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private Date createTime;
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@ public class CcdiIntermediaryPersonDetailVO implements Serializable {
|
|||||||
@Schema(description = "职位")
|
@Schema(description = "职位")
|
||||||
private String position;
|
private String position;
|
||||||
|
|
||||||
@Schema(description = "关联人员ID")
|
@Schema(description = "关联中介本人证件号码")
|
||||||
private String relatedNumId;
|
private String relatedNumId;
|
||||||
|
|
||||||
@Schema(description = "关联关系")
|
@Schema(description = "关联关系")
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介亲属VO")
|
||||||
|
public class CcdiIntermediaryRelativeVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "人员ID")
|
||||||
|
private String bizId;
|
||||||
|
|
||||||
|
@Schema(description = "关联中介本人证件号码")
|
||||||
|
private String relatedNumId;
|
||||||
|
|
||||||
|
@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 = "备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private Date createTime;
|
||||||
|
}
|
||||||
@@ -21,32 +21,25 @@ public class CcdiIntermediaryVO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Schema(description = "ID")
|
@Schema(description = "记录类型")
|
||||||
private String id;
|
private String recordType;
|
||||||
|
|
||||||
@Schema(description = "姓名/机构名称")
|
@Schema(description = "记录ID")
|
||||||
|
private String recordId;
|
||||||
|
|
||||||
|
@Schema(description = "名称")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@Schema(description = "证件号/统一社会信用代码")
|
@Schema(description = "证件号")
|
||||||
private String certificateNo;
|
private String certificateNo;
|
||||||
|
|
||||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
@Schema(description = "关联中介姓名")
|
||||||
private String intermediaryType;
|
private String relatedIntermediaryName;
|
||||||
|
|
||||||
@Schema(description = "人员类型")
|
@Schema(description = "关联关系")
|
||||||
private String personType;
|
private String relationText;
|
||||||
|
|
||||||
@Schema(description = "公司")
|
|
||||||
private String company;
|
|
||||||
|
|
||||||
@Schema(description = "数据来源")
|
|
||||||
private String dataSource;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
@Schema(description = "创建时间")
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
@Schema(description = "修改时间")
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private Date updateTime;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
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
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "招投标供应商明细")
|
||||||
|
public class CcdiPurchaseTransactionSupplierVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "采购事项ID")
|
||||||
|
private String purchaseId;
|
||||||
|
|
||||||
|
@Schema(description = "供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@Schema(description = "供应商统一信用代码")
|
||||||
|
private String supplierUscc;
|
||||||
|
|
||||||
|
@Schema(description = "供应商联系人")
|
||||||
|
private String contactPerson;
|
||||||
|
|
||||||
|
@Schema(description = "供应商联系电话")
|
||||||
|
private String contactPhone;
|
||||||
|
|
||||||
|
@Schema(description = "供应商银行账户")
|
||||||
|
private String supplierBankAccount;
|
||||||
|
|
||||||
|
@Schema(description = "是否中标:1-是,0-否")
|
||||||
|
private Integer isBidWinner;
|
||||||
|
|
||||||
|
@Schema(description = "排序")
|
||||||
|
private Integer sortOrder;
|
||||||
|
}
|
||||||
@@ -8,15 +8,16 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息VO
|
* 招投标信息VO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "采购交易信息")
|
@Schema(description = "招投标信息")
|
||||||
public class CcdiPurchaseTransactionVO implements Serializable {
|
public class CcdiPurchaseTransactionVO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
@@ -90,6 +91,14 @@ public class CcdiPurchaseTransactionVO implements Serializable {
|
|||||||
@Schema(description = "供应商银行账户")
|
@Schema(description = "供应商银行账户")
|
||||||
private String supplierBankAccount;
|
private String supplierBankAccount;
|
||||||
|
|
||||||
|
/** 参与供应商数 */
|
||||||
|
@Schema(description = "参与供应商数")
|
||||||
|
private Integer supplierCount;
|
||||||
|
|
||||||
|
/** 供应商明细 */
|
||||||
|
@Schema(description = "供应商明细列表")
|
||||||
|
private List<CcdiPurchaseTransactionSupplierVO> supplierList;
|
||||||
|
|
||||||
/** 采购申请日期(或立项日期) */
|
/** 采购申请日期(或立项日期) */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
@Schema(description = "采购申请日期")
|
@Schema(description = "采购申请日期")
|
||||||
|
|||||||
@@ -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-04-23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "员工亲属实体关联下拉选项")
|
||||||
|
public class CcdiStaffEnterpriseRelationOptionVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 亲属身份证号 */
|
||||||
|
@Schema(description = "亲属身份证号")
|
||||||
|
private String relationCertNo;
|
||||||
|
|
||||||
|
/** 亲属姓名 */
|
||||||
|
@Schema(description = "亲属姓名")
|
||||||
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关联员工身份证号 */
|
||||||
|
@Schema(description = "关联员工身份证号")
|
||||||
|
private String staffPersonId;
|
||||||
|
|
||||||
|
/** 关联员工姓名 */
|
||||||
|
@Schema(description = "关联员工姓名")
|
||||||
|
private String staffPersonName;
|
||||||
|
}
|
||||||
@@ -9,13 +9,13 @@ import java.io.Serializable;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息VO
|
* 员工亲属实体关联VO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "员工实体关系信息")
|
@Schema(description = "员工亲属实体关联")
|
||||||
public class CcdiStaffEnterpriseRelationVO implements Serializable {
|
public class CcdiStaffEnterpriseRelationVO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
@@ -25,13 +25,21 @@ public class CcdiStaffEnterpriseRelationVO implements Serializable {
|
|||||||
@Schema(description = "主键ID")
|
@Schema(description = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 亲属身份证号 */
|
||||||
@Schema(description = "身份证号")
|
@Schema(description = "亲属身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
/** 员工姓名 */
|
/** 亲属姓名 */
|
||||||
@Schema(description = "员工姓名")
|
@Schema(description = "亲属姓名")
|
||||||
private String personName;
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关联员工身份证号 */
|
||||||
|
@Schema(description = "关联员工身份证号")
|
||||||
|
private String staffPersonId;
|
||||||
|
|
||||||
|
/** 关联员工姓名 */
|
||||||
|
@Schema(description = "关联员工姓名")
|
||||||
|
private String staffPersonName;
|
||||||
|
|
||||||
/** 关联人在企业的职务 */
|
/** 关联人在企业的职务 */
|
||||||
@Schema(description = "关联人在企业的职务")
|
@Schema(description = "关联人在企业的职务")
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ public class CcdiStaffRecruitmentVO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
private Long id;
|
||||||
|
|
||||||
/** 招聘记录编号 */
|
/** 招聘记录编号 */
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
|
|||||||
@@ -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-04-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "实体库导入失败记录")
|
||||||
|
public class EnterpriseBaseInfoImportFailureVO {
|
||||||
|
|
||||||
|
@Schema(description = "企业名称")
|
||||||
|
private String enterpriseName;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@Schema(description = "企业类型")
|
||||||
|
private String enterpriseType;
|
||||||
|
|
||||||
|
@Schema(description = "企业性质")
|
||||||
|
private String enterpriseNature;
|
||||||
|
|
||||||
|
@Schema(description = "行业分类")
|
||||||
|
private String industryClass;
|
||||||
|
|
||||||
|
@Schema(description = "所属行业")
|
||||||
|
private String industryName;
|
||||||
|
|
||||||
|
@Schema(description = "法定代表人")
|
||||||
|
private String legalRepresentative;
|
||||||
|
|
||||||
|
@Schema(description = "经营状态")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@Schema(description = "企业来源")
|
||||||
|
private String entSource;
|
||||||
|
|
||||||
|
@Schema(description = "数据来源")
|
||||||
|
private String dataSource;
|
||||||
|
|
||||||
|
@Schema(description = "错误信息")
|
||||||
|
private String errorMessage;
|
||||||
|
}
|
||||||
@@ -14,8 +14,14 @@ import java.math.BigDecimal;
|
|||||||
@Schema(description = "导入失败记录")
|
@Schema(description = "导入失败记录")
|
||||||
public class ImportFailureVO {
|
public class ImportFailureVO {
|
||||||
|
|
||||||
|
@Schema(description = "Sheet名称")
|
||||||
|
private String sheetName;
|
||||||
|
|
||||||
|
@Schema(description = "Excel行号")
|
||||||
|
private Integer rowNum;
|
||||||
|
|
||||||
@Schema(description = "柜员号")
|
@Schema(description = "柜员号")
|
||||||
private Long employeeId;
|
private Long staffId;
|
||||||
|
|
||||||
@Schema(description = "姓名")
|
@Schema(description = "姓名")
|
||||||
private String name;
|
private String name;
|
||||||
@@ -32,6 +38,9 @@ public class ImportFailureVO {
|
|||||||
@Schema(description = "年收入")
|
@Schema(description = "年收入")
|
||||||
private BigDecimal annualIncome;
|
private BigDecimal annualIncome;
|
||||||
|
|
||||||
|
@Schema(description = "是否党员:0-否 1-是")
|
||||||
|
private Integer partyMember;
|
||||||
|
|
||||||
@Schema(description = "状态")
|
@Schema(description = "状态")
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中介实体关联关系导入失败记录
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "中介实体关联关系导入失败记录")
|
||||||
|
public class IntermediaryEnterpriseRelationImportFailureVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "中介本人证件号码")
|
||||||
|
private String ownerPersonId;
|
||||||
|
|
||||||
|
@Schema(description = "统一社会信用代码")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@Schema(description = "关联职务")
|
||||||
|
private String relationPersonPost;
|
||||||
|
|
||||||
|
@Schema(description = "备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "错误信息")
|
||||||
|
private String errorMessage;
|
||||||
|
}
|
||||||
@@ -22,21 +22,45 @@ public class IntermediaryPersonImportFailureVO implements Serializable {
|
|||||||
@Schema(description = "姓名")
|
@Schema(description = "姓名")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@Schema(description = "证件号码")
|
|
||||||
private String personId;
|
|
||||||
|
|
||||||
@Schema(description = "人员类型")
|
@Schema(description = "人员类型")
|
||||||
private String personType;
|
private String personType;
|
||||||
|
|
||||||
|
@Schema(description = "人员子类型")
|
||||||
|
private String personSubType;
|
||||||
|
|
||||||
@Schema(description = "性别")
|
@Schema(description = "性别")
|
||||||
private String gender;
|
private String gender;
|
||||||
|
|
||||||
|
@Schema(description = "证件类型")
|
||||||
|
private String idType;
|
||||||
|
|
||||||
|
@Schema(description = "证件号码")
|
||||||
|
private String personId;
|
||||||
|
|
||||||
@Schema(description = "手机号码")
|
@Schema(description = "手机号码")
|
||||||
private String mobile;
|
private String mobile;
|
||||||
|
|
||||||
|
@Schema(description = "微信号")
|
||||||
|
private String wechatNo;
|
||||||
|
|
||||||
|
@Schema(description = "联系地址")
|
||||||
|
private String contactAddress;
|
||||||
|
|
||||||
@Schema(description = "所在公司")
|
@Schema(description = "所在公司")
|
||||||
private String company;
|
private String company;
|
||||||
|
|
||||||
|
@Schema(description = "企业统一信用码")
|
||||||
|
private String socialCreditCode;
|
||||||
|
|
||||||
|
@Schema(description = "职位")
|
||||||
|
private String position;
|
||||||
|
|
||||||
|
@Schema(description = "关联中介本人证件号码")
|
||||||
|
private String relatedNumId;
|
||||||
|
|
||||||
|
@Schema(description = "备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
@Schema(description = "错误信息")
|
@Schema(description = "错误信息")
|
||||||
private String errorMessage;
|
private String errorMessage;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,15 +6,23 @@ import lombok.Data;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购交易信息导入失败记录VO
|
* 招投标信息导入失败记录VO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-06
|
* @date 2026-02-06
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "采购交易信息导入失败记录")
|
@Schema(description = "招投标信息导入失败记录")
|
||||||
public class PurchaseTransactionImportFailureVO {
|
public class PurchaseTransactionImportFailureVO {
|
||||||
|
|
||||||
|
/** 失败来源Sheet */
|
||||||
|
@Schema(description = "失败来源Sheet")
|
||||||
|
private String sheetName;
|
||||||
|
|
||||||
|
/** 失败行号 */
|
||||||
|
@Schema(description = "失败行号")
|
||||||
|
private String sheetRowNum;
|
||||||
|
|
||||||
/** 采购事项ID */
|
/** 采购事项ID */
|
||||||
@Schema(description = "采购事项ID")
|
@Schema(description = "采购事项ID")
|
||||||
private String purchaseId;
|
private String purchaseId;
|
||||||
|
|||||||
@@ -13,6 +13,12 @@ import lombok.Data;
|
|||||||
@Schema(description = "招聘信息导入失败记录")
|
@Schema(description = "招聘信息导入失败记录")
|
||||||
public class RecruitmentImportFailureVO {
|
public class RecruitmentImportFailureVO {
|
||||||
|
|
||||||
|
@Schema(description = "失败Sheet")
|
||||||
|
private String sheetName;
|
||||||
|
|
||||||
|
@Schema(description = "失败行号")
|
||||||
|
private String sheetRowNum;
|
||||||
|
|
||||||
@Schema(description = "招聘项目编号")
|
@Schema(description = "招聘项目编号")
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
|
|||||||
@@ -7,22 +7,26 @@ import java.io.Serial;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工实体关系信息导入失败记录VO
|
* 员工亲属实体关联导入失败记录VO
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2026-02-09
|
* @date 2026-02-09
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "员工实体关系信息导入失败记录")
|
@Schema(description = "员工亲属实体关联导入失败记录")
|
||||||
public class StaffEnterpriseRelationImportFailureVO implements Serializable {
|
public class StaffEnterpriseRelationImportFailureVO implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 身份证号 */
|
/** 亲属身份证号 */
|
||||||
@Schema(description = "身份证号")
|
@Schema(description = "亲属身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|
||||||
|
/** 亲属姓名 */
|
||||||
|
@Schema(description = "亲属姓名")
|
||||||
|
private String relationName;
|
||||||
|
|
||||||
/** 统一社会信用代码 */
|
/** 统一社会信用代码 */
|
||||||
@Schema(description = "统一社会信用代码")
|
@Schema(description = "统一社会信用代码")
|
||||||
private String socialCreditCode;
|
private String socialCreditCode;
|
||||||
|
|||||||
@@ -15,6 +15,14 @@ import java.math.BigDecimal;
|
|||||||
@Schema(description = "员工亲属关系信息导入失败记录")
|
@Schema(description = "员工亲属关系信息导入失败记录")
|
||||||
public class StaffFmyRelationImportFailureVO {
|
public class StaffFmyRelationImportFailureVO {
|
||||||
|
|
||||||
|
/** Sheet名称 */
|
||||||
|
@Schema(description = "Sheet名称")
|
||||||
|
private String sheetName;
|
||||||
|
|
||||||
|
/** Excel行号 */
|
||||||
|
@Schema(description = "Excel行号")
|
||||||
|
private Integer rowNum;
|
||||||
|
|
||||||
/** 员工身份证号 */
|
/** 员工身份证号 */
|
||||||
@Schema(description = "员工身份证号")
|
@Schema(description = "员工身份证号")
|
||||||
private String personId;
|
private String personId;
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 员工亲属关系双Sheet导入提交结果
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-22
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "员工亲属关系双Sheet导入提交结果")
|
||||||
|
public class StaffFmyRelationImportSubmitResultVO {
|
||||||
|
|
||||||
|
@Schema(description = "员工亲属关系导入任务ID")
|
||||||
|
private String relationTaskId;
|
||||||
|
|
||||||
|
@Schema(description = "亲属资产信息导入任务ID")
|
||||||
|
private String assetTaskId;
|
||||||
|
|
||||||
|
@Schema(description = "提交结果提示")
|
||||||
|
private String message;
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.ruoyi.info.collection.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实体风险等级枚举
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public enum EnterpriseRiskLevel {
|
||||||
|
|
||||||
|
HIGH("1", "高风险"),
|
||||||
|
MEDIUM("2", "中风险"),
|
||||||
|
LOW("3", "低风险");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
EnterpriseRiskLevel(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 (EnterpriseRiskLevel value : values()) {
|
||||||
|
if (value.code.equals(code)) {
|
||||||
|
return value.desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean contains(String code) {
|
||||||
|
for (EnterpriseRiskLevel value : values()) {
|
||||||
|
if (value.code.equals(code)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String resolveCode(String value) {
|
||||||
|
for (EnterpriseRiskLevel item : values()) {
|
||||||
|
if (item.code.equals(value) || item.desc.equals(value)) {
|
||||||
|
return item.code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package com.ruoyi.info.collection.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 企业来源枚举
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public enum EnterpriseSource {
|
||||||
|
|
||||||
|
GENERAL("GENERAL", "一般企业"),
|
||||||
|
EMP_RELATION("EMP_RELATION", "员工关系人"),
|
||||||
|
CREDIT_CUSTOMER("CREDIT_CUSTOMER", "信贷客户"),
|
||||||
|
SUPPLIER("SUPPLIER", "供应商"),
|
||||||
|
INTERMEDIARY("INTERMEDIARY", "中介"),
|
||||||
|
BOTH("BOTH", "兼有");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
EnterpriseSource(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 (EnterpriseSource value : values()) {
|
||||||
|
if (value.code.equals(code)) {
|
||||||
|
return value.desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean contains(String code) {
|
||||||
|
for (EnterpriseSource value : values()) {
|
||||||
|
if (value.code.equals(code)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String resolveCode(String value) {
|
||||||
|
for (EnterpriseSource item : values()) {
|
||||||
|
if (item.code.equals(value) || item.desc.equals(value)) {
|
||||||
|
return item.code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,28 @@
|
|||||||
package com.ruoyi.info.collection.handler;
|
package com.ruoyi.info.collection.handler;
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.write.handler.SheetWriteHandler;
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
|
import com.alibaba.excel.write.handler.CellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
|
|
||||||
import com.ruoyi.common.annotation.Required;
|
import com.ruoyi.common.annotation.Required;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.CellStyle;
|
||||||
|
import org.apache.poi.ss.usermodel.Font;
|
||||||
|
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||||
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||||
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EasyExcel必填字段标注处理器
|
* EasyExcel必填字段标注处理器
|
||||||
@@ -18,13 +31,18 @@ import java.util.*;
|
|||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class RequiredFieldWriteHandler implements SheetWriteHandler {
|
public class RequiredFieldWriteHandler implements CellWriteHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 实体类Class对象
|
* 实体类Class对象
|
||||||
*/
|
*/
|
||||||
private final Class<?> modelClass;
|
private final Class<?> modelClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 必填字段列索引集合
|
||||||
|
*/
|
||||||
|
private final Set<Integer> requiredColumns;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造函数
|
* 构造函数
|
||||||
*
|
*
|
||||||
@@ -32,39 +50,30 @@ public class RequiredFieldWriteHandler implements SheetWriteHandler {
|
|||||||
*/
|
*/
|
||||||
public RequiredFieldWriteHandler(Class<?> modelClass) {
|
public RequiredFieldWriteHandler(Class<?> modelClass) {
|
||||||
this.modelClass = modelClass;
|
this.modelClass = modelClass;
|
||||||
|
this.requiredColumns = parseRequiredFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
|
public void afterCellDispose(WriteSheetHolder writeSheetHolder,
|
||||||
// 获取工作表
|
WriteTableHolder writeTableHolder,
|
||||||
Sheet sheet = writeSheetHolder.getSheet();
|
List<WriteCellData<?>> cellDataList,
|
||||||
|
Cell cell,
|
||||||
// 获取表头行(第1行,索引为0)
|
Head head,
|
||||||
Row headerRow = sheet.getRow(0);
|
Integer relativeRowIndex,
|
||||||
if (headerRow == null) {
|
Boolean isHead) {
|
||||||
log.warn("表头行不存在,跳过必填字段标注");
|
if (!Boolean.TRUE.equals(isHead) || cell == null || !requiredColumns.contains(cell.getColumnIndex())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建红色字体样式
|
Workbook workbook = cell.getSheet().getWorkbook();
|
||||||
Workbook workbook = writeWorkbookHolder.getWorkbook();
|
|
||||||
CellStyle redStyle = createRedFontStyle(workbook);
|
CellStyle redStyle = createRedFontStyle(workbook);
|
||||||
|
|
||||||
// 解析实体类中的必填字段
|
String originalValue = cell.getStringCellValue();
|
||||||
Set<Integer> requiredColumns = parseRequiredFields();
|
if (originalValue != null && !originalValue.endsWith("*")) {
|
||||||
|
cell.setCellValue(originalValue + "*");
|
||||||
// 为必填字段的表头添加红色星号
|
|
||||||
for (Integer columnIndex : requiredColumns) {
|
|
||||||
Cell cell = headerRow.getCell(columnIndex);
|
|
||||||
if (cell != null) {
|
|
||||||
String originalValue = cell.getStringCellValue();
|
|
||||||
// 添加红色星号
|
|
||||||
cell.setCellValue(originalValue + "*");
|
|
||||||
// 应用红色样式到星号
|
|
||||||
cell.setCellStyle(redStyle);
|
|
||||||
log.info("为列[{}]的表头添加必填标记(*)", columnIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
cell.setCellStyle(redStyle);
|
||||||
|
log.info("为列[{}]的表头添加必填标记(*)", cell.getColumnIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
package com.ruoyi.info.collection.mapper;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import com.ruoyi.info.collection.domain.CcdiAccountResult;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 账户分析结果数据层
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-04-13
|
|
||||||
*/
|
|
||||||
public interface CcdiAccountResultMapper extends BaseMapper<CcdiAccountResult> {
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user