From 6101d94d824e2979334fc100cbb35096c4dd1453 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Fri, 6 Feb 2026 09:41:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=91=98=E5=B7=A5?= =?UTF-8?q?=E5=AF=BC=E5=85=A5Service=E5=B1=82=E7=9A=84=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=92=8C=E6=89=B9=E9=87=8F=E6=8F=92=E5=85=A5?= =?UTF-8?q?=E6=80=A7=E8=83=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题1: importEmployeeAsync方法缺少@Transactional注解 - 在第239行添加@Transactional注解,确保异步操作的事务一致性 问题2: saveBatch方法性能问题 - 原实现: 循环内逐条调用insert(),不是真正的批量插入 - 修复方案: 1. 在CcdiEmployeeMapper接口中新增insertBatch方法 2. 在CcdiEmployeeMapper.xml中实现真正的批量插入SQL 3. saveBatch方法改为调用insertBatch,分批次批量插入 性能提升: - 之前: 1000条数据需要1000次数据库往返 - 之后: 1000条数据只需2次数据库往返(分批次500条) Co-Authored-By: Claude Sonnet 4.5 --- .../com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java | 8 ++++++++ .../ccdi/service/impl/CcdiEmployeeServiceImpl.java | 6 +++--- .../resources/mapper/ccdi/CcdiEmployeeMapper.xml | 13 +++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java index 0dae687..725059a 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java @@ -43,4 +43,12 @@ public interface CcdiEmployeeMapper extends BaseMapper { * @return 影响行数 */ int insertOrUpdateBatch(@Param("list") List list); + + /** + * 批量插入员工信息 + * + * @param list 员工信息列表 + * @return 影响行数 + */ + int insertBatch(@Param("list") List list); } diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java index 43d8122..25dd182 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java @@ -236,6 +236,7 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { */ @Override @Async("importExecutor") + @Transactional public CompletableFuture importEmployeeAsync(List excelList, Boolean isUpdateSupport) { String taskId = UUID.randomUUID().toString(); long startTime = System.currentTimeMillis(); @@ -531,12 +532,11 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { * 批量保存 */ private void saveBatch(List list, int batchSize) { + // 使用真正的批量插入,分批次执行以提高性能 for (int i = 0; i < list.size(); i += batchSize) { int end = Math.min(i + batchSize, list.size()); List subList = list.subList(i, end); - for (CcdiEmployee employee : subList) { - employeeMapper.insert(employee); - } + employeeMapper.insertBatch(subList); } } diff --git a/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml b/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml index c1cc766..ce31d9f 100644 --- a/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml +++ b/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml @@ -66,4 +66,17 @@ update_time = NOW() + + + INSERT INTO ccdi_employee + (employee_id, name, dept_id, id_card, phone, hire_date, status, + create_time, create_by, update_by, update_time) + VALUES + + (#{item.employeeId}, #{item.name}, #{item.deptId}, #{item.idCard}, + #{item.phone}, #{item.hireDate}, #{item.status}, NOW(), + #{item.createBy}, #{item.updateBy}, NOW()) + + +