Commit Graph

148 Commits

Author SHA1 Message Date
wkc
886176ed7e 除员工外 取消导入更新 2026-02-09 02:18:56 +08:00
wkc
f96d10d2e8 feat: 移除招聘信和采购交易的导入更新支持功能
## 变更内容
- 移除招聘信和采购交易导入功能中的isUpdateSupport参数
- 遇到已存在的数据直接报错,不再支持更新操作
- 前端移除"是否更新"复选框

## 后端修改
- CcdiStaffRecruitmentController: 移除updateSupport参数
- ICcdiStaffRecruitmentService: 移除updateSupport参数
- CcdiStaffRecruitmentServiceImpl: 简化导入逻辑,移除更新支持
- CcdiPurchaseTransactionController: 移除updateSupport参数
- ICcdiPurchaseTransactionService: 移除updateSupport参数
- ICcdiPurchaseTransactionImportService: 移除updateSupport参数
- CcdiPurchaseTransactionServiceImpl: 移除updateSupport参数
- CcdiPurchaseTransactionImportServiceImpl: 简化导入逻辑,移除更新支持

## 前端修改
- ccdiStaffRecruitment/index.vue: 移除"是否更新"复选框和相关参数
- ccdiPurchaseTransaction/index.vue: 移除"是否更新"复选框和相关参数

## 影响范围
- 导入时遇到已存在的招聘项目编号或采购事项ID将直接报错
- 错误提示显示具体的重复ID
- 不再支持通过导入文件更新已存在的数据
2026-02-09 01:12:22 +08:00
wkc
26a225298a 导入测试 2026-02-09 00:13:32 +08:00
wkc
cf5e435992 docs: 添加中介导入历史清除功能完成报告
- 添加功能设计文档
- 添加功能完成总结报告
- 包含代码审查结果和后续优化建议

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 18:52:44 +08:00
wkc
b35d05a9c5 feat: 实现清除导入历史记录方法 2026-02-08 18:43:28 +08:00
wkc
51dc466d8e feat: 监听清除导入历史记录事件 2026-02-08 18:37:36 +08:00
wkc
1216ba98c9 feat: 导入时触发清除历史记录事件 2026-02-08 18:34:52 +08:00
wkc
ddc06b876a fix: 修复importPersonBatch方法返回类型
将Mapper接口的importPersonBatch返回类型从void改为int,
以正确返回ON DUPLICATE KEY UPDATE的影响行数。
2026-02-08 17:20:45 +08:00
wkc
5ec5913759 fix: 修复中介导入成功条数计算错误
问题:
- 导入成功条数显示为负数
- 原因:成功数量计算使用 validRecords.size() - failures.size()
- 但没有使用实际的数据库操作返回值

修复:
- saveBatchWithUpsert 和 saveBatch 方法现在返回 int
- 累加实际的数据库影响行数
- 使用 actualSuccessCount 变量跟踪真实成功数量

影响范围:
- CcdiIntermediaryPersonImportServiceImpl
- CcdiIntermediaryEntityImportServiceImpl
2026-02-08 17:18:18 +08:00
wkc
bb0d68c41d 合并中介导入功能优化
使用ON DUPLICATE KEY UPDATE优化中介信息批量导入功能:
- Mapper层: 添加importPersonBatch和importEntityBatch方法
- Service层: 重构导入逻辑,移除'先删除再插入'
- 性能提升: 更新模式下减少50%数据库操作
- 数据库: 创建person_id唯一索引

详见: doc/plans/2026-02-08-intermediary-import-on-duplicate-key-update-design.md

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:27:42 +08:00
wkc
717bfb67c5 docs: 添加Task 5&6完成报告
- 详细记录Service层重构过程
- 代码对比和性能分析
- 测试覆盖和验证点
- 后续建议和风险评估

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:25:08 +08:00
wkc
daf03e1ef0 test: 添加中介导入功能测试脚本和报告模板
- 添加自动化测试脚本 test-import-upsert.js
- 覆盖5个测试场景(首次导入、重复导入、更新等)
- 添加测试报告模板 TEST-REPORT-TEMPLATE.md

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:24:02 +08:00
wkc
7d534de54f refactor: 重构Service层使用ON DUPLICATE KEY UPDATE
- 更新模式直接调用importPersonBatch/importEntityBatch
- 移除'先删除再插入'逻辑,代码简化约50%
- 添加辅助方法saveBatchWithUpsert/getExistingPersonIdsFromDb
- 添加createFailureVO重载方法简化失败记录创建

变更详情:
- CcdiIntermediaryPersonImportServiceImpl: 重构importPersonAsync方法
- CcdiIntermediaryEntityImportServiceImpl: 重构importEntityAsync方法
- 两个Service均采用统一的处理模式

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:21:22 +08:00
wkc
161b2c880f refactor: 优化importEntityBatch方法签名
- 修改返回值类型从void改为int,与项目其他批量方法保持一致
- 更新JavaDoc注释,描述行为而不是实现细节
- 在XML中添加importEntityBatch的完整实现
- 使用ON DUPLICATE KEY UPDATE实现存在则更新,不存在则插入的功能

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:18:30 +08:00
wkc
894e376c9e docs: 补充importEntityBatch方法的JavaDoc @return标签
规范审查发现Task 3的JavaDoc注释不够完整,补充了@return标签说明无返回值。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:13:43 +08:00
wkc
198ac91696 feat: 添加实体中介批量导入方法签名
添加importEntityBatch方法到Mapper接口,用于支持ON DUPLICATE KEY UPDATE的批量导入操作。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:12:18 +08:00
wkc
de3f1abb09 fix: 修正importPersonBatch SQL的UPSERT逻辑
- 添加person_id字段到UPDATE部分,支持身份证号更新
- 修正gender枚举字段的空字符串判断,移除不必要的空字符串检查

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:06:36 +08:00
wkc
2f3ad08813 feat: 实现个人中介批量导入ON DUPLICATE KEY UPDATE SQL
使用INSERT ... ON DUPLICATE KEY UPDATE实现单次SQL完成插入或更新操作。
- 仅更新Excel中非空的字段
- 自动更新update_time和update_by
- 保留created_by和create_time等审计字段

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:03:58 +08:00
wkc
048e97e331 feat: 添加个人中介批量导入方法签名
添加importPersonBatch方法到Mapper接口,用于支持ON DUPLICATE KEY UPDATE的批量导入操作。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:58:08 +08:00
wkc
c86733c929 docs: 完善数据库索引验证报告格式
- 添加完整索引列表表格
- 修正文档结构
- 更新审核状态

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:53:59 +08:00
wkc
a6a872b478 docs: 添加数据库唯一索引验证报告
- 验证 ccdi_biz_intermediary.person_id 唯一索引
- 创建 uk_person_id 唯一索引
- 确认 ccdi_enterprise_base_info.social_credit_code 主键
- 为 INSERT ... ON DUPLICATE KEY UPDATE 提供基础支持

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:53:35 +08:00
wkc
34357b1f38 chore: 添加.worktrees/到gitignore
为使用git worktree功能做准备,防止意外提交worktree内容。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:49:18 +08:00
wkc
5bd76e99d4 fix: 修复采购交易申请日期查询条件未生效问题
问题描述:
- 前后端参数格式不匹配导致日期查询条件无法生效
- 后端期望 applyDateStart/applyDateEnd,前端发送 params.beginApplyDate/params.endApplyDate
- Mapper XML 中同时存在两套参数导致混乱

修复方案:
统一使用扁平化参数格式 applyDateStart/applyDateEnd

前端修改:
1. 新增 addDateRangeFlat 工具方法 (ruoyi-ui/src/utils/ruoyi.js)
   - 支持扁平化日期参数格式,不使用 params 包装
   - 参数: addDateRangeFlat(params, dateRange, startPropName, endPropName)

2. 全局注册新方法 (ruoyi-ui/src/main.js)
   - 导入并挂载到 Vue.prototype.addDateRangeFlat

3. 采购交易页面使用新方法 (ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue)
   - 将 addDateRange() 改为 addDateRangeFlat()
   - 传入参数: 'applyDateStart', 'applyDateEnd'

后端修改:
- 删除 Mapper XML 中 params.beginApplyDate/params.endApplyDate 相关条件
- 保留 applyDateStart/applyDateEnd 条件

测试:
- 添加测试脚本 doc/test-data/purchase_transaction/test-date-query.js
- 支持多种日期范围查询场景测试

影响范围:
- 仅影响采购交易管理模块
- 保留原有 addDateRange 方法,其他模块不受影响

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:05:12 +08:00
wkc
5b4c1247dd refactor: 统一采购交易导入接口返回值
- 添加ImportResultVO导入
- 添加数据验证(至少需要一条数据)
- 修改返回结构为ImportResultVO对象
- 与员工信息导入接口保持一致

返回值包含:
- taskId: 任务ID
- status: PROCESSING状态
- message: 提示消息

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:11:43 +08:00
wkc
5f86d378ef docs: 添加采购交易导入功能优化完成标记
- 所有任务已完成
- 代码验证通过
- 文档完善
- 功能ready

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:05:32 +08:00
wkc
60e836163e docs: 添加采购交易导入功能优化变更日志
- 详细的前端交互变更说明
- 技术实现细节
- 测试验证结果
- 后续优化建议

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:04:48 +08:00
wkc
22514b6509 docs: 更新API文档,添加导入交互说明
- 详细的前端交互流程
- 状态持久化说明
- 与员工信息导入的对比

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:04:25 +08:00
wkc
591e8b9ebb test: 添加导入功能测试脚本
- 测试流程框架
- 包含主要测试步骤

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:04:07 +08:00
wkc
e3dfc08cc7 test: 添加测试环境信息文档
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:03:56 +08:00
wkc
fcb7d0bdfe test: 语法验证通过
- Vue文件语法检查通过
- 无未定义变量
- 所有方法已正确添加

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:03:03 +08:00
wkc
084d1b2915 feat: 添加导入失败记录对话框
- 添加独立的失败记录对话框组件
- 包含失败记录表格展示(采购事项ID、项目名称、标的物名称、失败原因)
- 支持分页查询失败记录
- 提供清除历史记录功能
- 显示导入摘要信息(总数、成功数、失败数)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:02:10 +08:00
wkc
29bd21094a feat: 添加查看导入失败记录按钮
- 在导出按钮后添加"查看导入失败记录"按钮
- 按钮仅在存在失败记录时显示(v-if="showFailureButton")
- 使用tooltip显示上次导入时间信息

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:02:03 +08:00
wkc
253471f3f9 feat: 移除导入对话框loading属性
- 移除 v-loading 绑定
- 移除 element-loading-text
- 移除 element-loading-spinner
- 移除 element-loading-background

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:01:57 +08:00
wkc
2d9cd7c2f6 feat(purchase-transaction): 添加clearImportHistory方法
- 添加用户手动清除导入历史功能
- 确认对话框防止误操作
- 清除localStorage中的任务记录
- 重置失败按钮、任务ID和对话框状态
- 操作成功后显示提示消息

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:01:19 +08:00
wkc
e38413cb2e feat(purchase-transaction): 添加getFailureList方法
- 调用API获取失败记录列表
- 支持分页查询
- 完善错误处理机制:
  - 404: 记录过期,清除本地状态
  - 500: 服务器错误提示
  - 网络错误: 检查网络连接
  - 其他错误: 显示详细错误信息

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:00:51 +08:00
wkc
a987aa9264 feat(purchase-transaction): 添加viewImportFailures方法
- 打开失败记录对话框
- 调用getFailureList获取失败记录列表

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:00:43 +08:00
wkc
cbff94a223 feat(purchase-transaction): 添加handleImportComplete方法
- 更新localStorage中的任务状态和统计信息
- 全部成功时显示成功通知并隐藏失败按钮
- 部分失败时显示警告通知并显示失败按钮
- 保存当前任务ID用于查看失败记录
- 导入完成后刷新列表数据

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:00:35 +08:00
wkc
9ae817dc41 feat(purchase-transaction): 添加startImportStatusPolling方法
- 实现轮询检查导入任务状态
- 设置最多150次轮询(5分钟超时)
- 使用async/await处理异步请求
- 超时后自动停止轮询并提示用户
- 非PROCESSING状态时调用handleImportComplete处理结果

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:00:18 +08:00
wkc
c620dc8b6d feat(purchase-transaction): 重构handleFileSuccess方法实现异步导入优化
- 增强响应数据验证,确保taskId存在
- 清理旧的轮询定时器,避免内存泄漏
- 保存导入任务初始状态到localStorage
- 使用$notify通知替代弹窗提示
- 重置失败按钮和任务ID状态
- 调用startImportStatusPolling开始轮询

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 14:00:10 +08:00
wkc
8699559436 feat: 添加getLastImportTooltip方法获取上次导入提示信息
在restoreImportState之后添加getLastImportTooltip方法:
- 从localStorage读取保存的导入任务时间
- 格式化时间为易读格式(年-月-日 时:分)
- 返回上次导入时间的提示文本

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:59:17 +08:00
wkc
619b9cca7a feat: 添加restoreImportState方法恢复导入状态
在methods中添加restoreImportState方法,用于在页面加载时恢复之前的导入状态:
- 从localStorage读取保存的导入任务
- 如果有失败记录,恢复显示失败记录按钮
- 恢复当前任务ID

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:59:09 +08:00
wkc
cb5a896fcd feat: 在created钩子中恢复导入状态
- 页面加载时从localStorage恢复导入状态
- 如果有失败记录则显示查看按钮

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:57:55 +08:00
wkc
ee73380faa fix: 提前实现localStorage管理方法
- 添加saveImportTaskToStorage方法
- 添加getImportTaskFromStorage方法
- 添加clearImportTaskFromStorage方法
- 修复lastImportInfo计算属性无法运行的问题

这些方法原本计划在Task 5-7实现,提前到现在以修复Task 2的审查问题。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:55:25 +08:00
wkc
c3ffccfbf3 feat: 添加lastImportInfo计算属性
- 显示上次导入的信息摘要
- 包含导入时间、总数、成功数、失败数

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:51:06 +08:00
wkc
9bba22a720 feat: 添加导入轮询相关data属性
- 添加importPollingTimer定时器
- 添加showFailureButton失败记录按钮显示状态
- 添加currentTaskId当前任务ID
- 添加失败记录对话框相关属性(failureDialogVisible等)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:49:12 +08:00
wkc
d4f2f01d20 docs: 添加采购交易导入功能优化实施计划
实施计划包含:
- 24个详细任务,每个任务2-5分钟完成
- 分11个阶段:前置准备、data属性、computed属性、生命周期、
  localStorage管理、状态恢复、上传逻辑、轮询机制、
  失败记录查看、UI修改、验证测试、文档更新
- 每个任务包含:文件路径、完整代码、验证步骤、提交命令
- TDD原则、频繁提交、完整文档

预期工作量: 2-3小时

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:44:13 +08:00
wkc
e120f836b2 docs: 添加采购交易导入功能优化设计文档
设计目标:
- 采用后台异步处理+通知提示,避免弹窗阻塞用户操作
- 完全复用员工信息维护的导入逻辑
- 支持查看导入失败记录
- 实现状态持久化

主要设计内容:
- 整体架构和用户交互流程
- 前端组件结构和状态管理
- UI组件修改方案
- 核心方法实现(10个方法)
- 完整修改清单和测试要点

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 13:40:32 +08:00
wkc
89399cab67 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	doc/plans/2026-02-06-ccdi_purchase_transaction.md
2026-02-06 17:23:59 +08:00
wkc
f659913b2f 员工采购 2026-02-06 17:22:59 +08:00
wkc
b38c1121e6 docs: 添加采购交易最终验证清单
- 功能测试清单(前端8大功能模块详细检查点)
  - 页面访问、查询、新增、编辑、详情、删除、导出、导入
  - 后端10个接口测试要点
  - 权限测试(菜单权限、按钮权限、数据权限)
- 代码审查清单(后端7个方面、前端6个方面、数据库3个方面)
- 性能测试建议(查询/写入/导入导出/并发/压力测试)
- 部署前检查项(代码/配置/数据/文档/测试/部署)
- 验收标准(7个维度)
- 验收流程(4个阶段)
- Bug分级标准

文件路径: doc/plans/2026-02-06-ccdi_purchase_transaction-verification.md

Task 21: 最终验证清单

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:52:20 +08:00