From b788074af712ec813e29b1ba4c557a4129f585fc Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 26 May 2026 14:35:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(cost):=20=E6=96=B0=E5=A2=9E=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E6=88=90=E6=9C=AC=E6=98=8E=E7=BB=86=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=85=88=E5=88=A0=E9=99=A4=E5=86=8D=E6=8F=92=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在CostProdDetailBo中新增detailIds和prodDetailList字段,分别用于接收待删除ID集合和待插入数据集合。新增批量保存接口batchSaveWithDelete,在Service层实现事务性批量操作:先根据detailIds删除指定记录,再将prodDetailList中的数据批量插入。Controller层新增/batch端点调用该服务,提供完整的前后端批量处理能力。 --- .../controller/CostProdDetailController.java | 10 +++++++++ .../klp/cost/domain/bo/CostProdDetailBo.java | 11 ++++++++++ .../cost/service/ICostProdDetailService.java | 5 +++++ .../impl/CostProdDetailServiceImpl.java | 21 +++++++++++++++++++ 4 files changed, 47 insertions(+) diff --git a/klp-cost/src/main/java/com/klp/cost/controller/CostProdDetailController.java b/klp-cost/src/main/java/com/klp/cost/controller/CostProdDetailController.java index 70efb71d..fa876406 100644 --- a/klp-cost/src/main/java/com/klp/cost/controller/CostProdDetailController.java +++ b/klp-cost/src/main/java/com/klp/cost/controller/CostProdDetailController.java @@ -75,6 +75,16 @@ public class CostProdDetailController extends BaseController { return R.ok(iCostProdDetailService.insertByBo(bo)); } + /** + * 批量保存生产成本明细(先删除再插入) + */ + @Log(title = "生产成本明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/batch") + public R batchSave(@RequestBody CostProdDetailBo bo) { + return toAjax(iCostProdDetailService.batchSaveWithDelete(bo)); + } + /** * 修改生产成本明细 */ diff --git a/klp-cost/src/main/java/com/klp/cost/domain/bo/CostProdDetailBo.java b/klp-cost/src/main/java/com/klp/cost/domain/bo/CostProdDetailBo.java index 10a7ac56..9f242972 100644 --- a/klp-cost/src/main/java/com/klp/cost/domain/bo/CostProdDetailBo.java +++ b/klp-cost/src/main/java/com/klp/cost/domain/bo/CostProdDetailBo.java @@ -7,6 +7,7 @@ import javax.validation.constraints.*; import java.math.BigDecimal; import java.util.Date; +import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -68,5 +69,15 @@ public class CostProdDetailBo extends BaseEntity { */ private String remark; + /** + * 要删除的主键ID集合 + */ + private List detailIds; + + /** + * 要批量插入的数据集合 + */ + private List prodDetailList; + } diff --git a/klp-cost/src/main/java/com/klp/cost/service/ICostProdDetailService.java b/klp-cost/src/main/java/com/klp/cost/service/ICostProdDetailService.java index e1471f60..0c5b1157 100644 --- a/klp-cost/src/main/java/com/klp/cost/service/ICostProdDetailService.java +++ b/klp-cost/src/main/java/com/klp/cost/service/ICostProdDetailService.java @@ -46,4 +46,9 @@ public interface ICostProdDetailService { * 校验并批量删除生产成本明细信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量保存(先删除再插入) + */ + Boolean batchSaveWithDelete(CostProdDetailBo bo); } diff --git a/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdDetailServiceImpl.java b/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdDetailServiceImpl.java index 1034d4bf..8042b7c1 100644 --- a/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdDetailServiceImpl.java +++ b/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdDetailServiceImpl.java @@ -1,6 +1,7 @@ package com.klp.cost.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.klp.cost.domain.bo.CostProdDetailBo; import com.klp.cost.domain.vo.CostProdDetailVo; import com.klp.cost.domain.CostProdDetail; @@ -18,6 +20,7 @@ import com.klp.cost.service.ICostProdDetailService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 生产成本明细Service业务层处理 @@ -112,4 +115,22 @@ public class CostProdDetailServiceImpl implements ICostProdDetailService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 批量保存(先删除再插入) + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchSaveWithDelete(CostProdDetailBo bo) { + if (CollUtil.isNotEmpty(bo.getProdDetailList())) { + if (CollUtil.isNotEmpty(bo.getDetailIds())) { + baseMapper.deleteBatchIds(bo.getDetailIds()); + } + List list = bo.getProdDetailList().stream() + .map(item -> BeanUtil.toBean(item, CostProdDetail.class)) + .collect(Collectors.toList()); + return baseMapper.insertBatch(list); + } + return false; + } }