From f37e0eb53a4d39b1a59a233c3cb62e339c5200f3 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 8 Sep 2025 15:56:55 +0800 Subject: [PATCH] =?UTF-8?q?(ofeata):=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=8F=92=E5=85=A5=E5=B7=A5=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IOaSalaryDetailService 中添加 insertBatchByBo 方法 - 在 IOaSalaryMasterService 中添加 batchInsertDetails 方法 - 实现 OaSalaryDetailServiceImpl 和 OaSalaryMasterServiceImpl 中的批量插入逻辑 - 更新OaSalaryMasterBo 和 OaSalaryMasterController 以支持批量插入功能 --- .../controller/OaSalaryMasterController.java | 15 ++++++- .../ruoyi/oa/domain/bo/OaSalaryMasterBo.java | 6 +++ .../oa/service/IOaSalaryDetailService.java | 5 +++ .../oa/service/IOaSalaryMasterService.java | 5 +++ .../impl/OaSalaryDetailServiceImpl.java | 17 ++++++++ .../impl/OaSalaryMasterServiceImpl.java | 40 +++++++++++++++++++ 6 files changed, 86 insertions(+), 2 deletions(-) diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryMasterController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryMasterController.java index e3d0f81..13eef0f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryMasterController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryMasterController.java @@ -2,7 +2,6 @@ package com.ruoyi.oa.controller; import java.util.List; import java.util.Arrays; -import java.util.concurrent.TimeUnit; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; @@ -16,7 +15,6 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; -import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.oa.domain.vo.OaSalaryMasterVo; @@ -98,4 +96,17 @@ public class OaSalaryMasterController extends BaseController { @PathVariable Long[] masterIds) { return toAjax(iOaSalaryMasterService.deleteWithValidByIds(Arrays.asList(masterIds), true)); } + + /** + * 批量插入工资明细(方式一:使用OaSalaryMasterBo) + * + * @param bo 包含主表信息和明细列表的业务对象 + */ + @Log(title = "批量插入工资明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/batchInsertDetails") + public R batchInsertDetails(@Validated(AddGroup.class) @RequestBody OaSalaryMasterBo bo) { + return toAjax(iOaSalaryMasterService.batchInsertDetails(bo)); + } + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryMasterBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryMasterBo.java index 80d03c3..47403fb 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryMasterBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryMasterBo.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.*; import java.util.Date; +import java.util.List; import com.ruoyi.common.core.domain.BaseEntity; @@ -66,5 +67,10 @@ public class OaSalaryMasterBo extends BaseEntity { */ private String remark; + /** + * 工资明细列表 + */ + private List salaryDetailList; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryDetailService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryDetailService.java index 6cc33a5..1fb17cc 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryDetailService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryDetailService.java @@ -46,4 +46,9 @@ public interface IOaSalaryDetailService { * 校验并批量删除工资发放明细信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量插入工资发放明细 + */ + Boolean insertBatchByBo(List boList); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryMasterService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryMasterService.java index f1d2cc7..81172ca 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryMasterService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryMasterService.java @@ -46,4 +46,9 @@ public interface IOaSalaryMasterService { * 校验并批量删除工资发放主信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量插入工资明细 + */ + Boolean batchInsertDetails(OaSalaryMasterBo bo); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryDetailServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryDetailServiceImpl.java index ec2155f..1957887 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryDetailServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryDetailServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; @@ -139,4 +140,20 @@ public class OaSalaryDetailServiceImpl implements IOaSalaryDetailService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 批量插入工资发放明细 + */ + @Override + public Boolean insertBatchByBo(List boList) { + if (CollUtil.isEmpty(boList)) { + return true; + } + List detailList = BeanUtil.copyToList(boList, OaSalaryDetail.class); + // 数据校验 + for (OaSalaryDetail detail : detailList) { + validEntityBeforeSave(detail); + } + return baseMapper.insertBatch(detailList); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryMasterServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryMasterServiceImpl.java index 50550ef..40a0483 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryMasterServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryMasterServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; @@ -9,11 +10,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.ruoyi.oa.domain.bo.OaSalaryMasterBo; +import com.ruoyi.oa.domain.bo.OaSalaryDetailBo; import com.ruoyi.oa.domain.vo.OaSalaryMasterVo; import com.ruoyi.oa.domain.OaSalaryMaster; +import com.ruoyi.oa.domain.OaSalaryDetail; import com.ruoyi.oa.mapper.OaSalaryMasterMapper; import com.ruoyi.oa.service.IOaSalaryMasterService; +import com.ruoyi.oa.service.IOaSalaryDetailService; import java.util.List; import java.util.Map; @@ -30,6 +35,7 @@ import java.util.Collection; public class OaSalaryMasterServiceImpl implements IOaSalaryMasterService { private final OaSalaryMasterMapper baseMapper; + private final IOaSalaryDetailService salaryDetailService; /** * 查询工资发放主 @@ -112,4 +118,38 @@ public class OaSalaryMasterServiceImpl implements IOaSalaryMasterService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 批量插入工资明细 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchInsertDetails(OaSalaryMasterBo bo) { + // 1. 先插入或更新主表信息 + OaSalaryMaster master; + if (bo.getMasterId() != null) { + // 如果有主键,则更新主表 + master = BeanUtil.toBean(bo, OaSalaryMaster.class); + validEntityBeforeSave(master); + baseMapper.updateById(master); + } else { + // 如果没有主键,则新增主表 + master = BeanUtil.toBean(bo, OaSalaryMaster.class); + validEntityBeforeSave(master); + baseMapper.insert(master); + bo.setMasterId(master.getMasterId()); + } + + // 2. 批量插入明细 + if (CollUtil.isNotEmpty(bo.getSalaryDetailList())) { + // 设置主表ID + for (OaSalaryDetailBo detail : bo.getSalaryDetailList()) { + detail.setMainId(master.getMasterId()); + } + // 批量插入明细 + return salaryDetailService.insertBatchByBo(bo.getSalaryDetailList()); + } + + return true; + } }