From 930ba33f847ad9b684d99c812c6d3a14adab637b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 9 Dec 2025 09:37:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(oa):=20=E6=96=B0=E5=A2=9E=E9=80=81?= =?UTF-8?q?=E8=B4=A7=E5=8D=95=E5=92=8C=E5=B7=A5=E8=89=BA=E5=8D=A1=E6=8F=92?= =?UTF-8?q?=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IOaDeliveryOrderService 和 IOaProcessCardService 接口中新增 insert 方法 - 在 OaDeliveryOrderBo 和 OaProcessCardBo 中增加明细列表字段 - 在 OaDeliveryOrderController 和 OaProcessCardController 中新增插入接口 - 实现事务管理,确保主表与明细表同时插入 - 添加参数校验及异常处理逻辑 - 使用批量插入提升明细数据存储效率 --- .../controller/OaDeliveryOrderController.java | 8 ++++ .../controller/OaProcessCardController.java | 8 ++++ .../ruoyi/oa/domain/bo/OaDeliveryOrderBo.java | 3 ++ .../ruoyi/oa/domain/bo/OaProcessCardBo.java | 4 ++ .../oa/service/IOaDeliveryOrderService.java | 2 + .../oa/service/IOaProcessCardService.java | 2 + .../impl/OaDeliveryOrderServiceImpl.java | 45 +++++++++++++++++++ .../impl/OaProcessCardServiceImpl.java | 38 ++++++++++++++++ 8 files changed, 110 insertions(+) diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaDeliveryOrderController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaDeliveryOrderController.java index a2cbdec..5e5987d 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaDeliveryOrderController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaDeliveryOrderController.java @@ -98,4 +98,12 @@ public class OaDeliveryOrderController extends BaseController { @PathVariable Long[] orderIds) { return toAjax(iOaDeliveryOrderService.deleteWithValidByIds(Arrays.asList(orderIds), true)); } + + //新增一个插入主表和明细表的接口 + @Log(title = "送货单主", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/insert") + public R insert(@Validated(AddGroup.class) @RequestBody OaDeliveryOrderBo bo) { + return toAjax(iOaDeliveryOrderService.insert(bo)); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProcessCardController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProcessCardController.java index 5dc9203..b6d8212 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProcessCardController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProcessCardController.java @@ -98,4 +98,12 @@ public class OaProcessCardController extends BaseController { @PathVariable Long[] cardIds) { return toAjax(iOaProcessCardService.deleteWithValidByIds(Arrays.asList(cardIds), true)); } + + //分别插入主表和明细表的接口 + @Log(title = "工艺卡主", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/insertProcessCard") + public R insertProcessCard(@Validated(AddGroup.class) @RequestBody OaProcessCardBo bo) { + return toAjax(iOaProcessCardService.insertProcessCard(bo)); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaDeliveryOrderBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaDeliveryOrderBo.java index e2ea02b..f64e7d6 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaDeliveryOrderBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaDeliveryOrderBo.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; @@ -111,5 +112,7 @@ public class OaDeliveryOrderBo extends BaseEntity { */ private String remark; + //明细 + private List detailList; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProcessCardBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProcessCardBo.java index 68ba2aa..bc10867 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProcessCardBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProcessCardBo.java @@ -9,6 +9,8 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseEntity; @@ -63,5 +65,7 @@ public class OaProcessCardBo extends BaseEntity { */ private String remark; + //工艺卡明细 + private List oaProcessCardDetailList; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaDeliveryOrderService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaDeliveryOrderService.java index be97148..40a1ae4 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaDeliveryOrderService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaDeliveryOrderService.java @@ -46,4 +46,6 @@ public interface IOaDeliveryOrderService { * 校验并批量删除送货单主信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + Boolean insert(OaDeliveryOrderBo bo); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProcessCardService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProcessCardService.java index 673c87e..0b87df8 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProcessCardService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProcessCardService.java @@ -46,4 +46,6 @@ public interface IOaProcessCardService { * 校验并批量删除工艺卡主信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + Boolean insertProcessCard(OaProcessCardBo bo); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaDeliveryOrderServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaDeliveryOrderServiceImpl.java index 2813afc..e025519 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaDeliveryOrderServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaDeliveryOrderServiceImpl.java @@ -8,17 +8,24 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.OaDeliveryOrderDetail; +import com.ruoyi.oa.domain.bo.OaDeliveryOrderDetailBo; +import com.ruoyi.oa.mapper.OaDeliveryOrderDetailMapper; +import com.ruoyi.oa.service.IOaDeliveryOrderDetailService; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaDeliveryOrderBo; import com.ruoyi.oa.domain.vo.OaDeliveryOrderVo; import com.ruoyi.oa.domain.OaDeliveryOrder; import com.ruoyi.oa.mapper.OaDeliveryOrderMapper; import com.ruoyi.oa.service.IOaDeliveryOrderService; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 送货单主Service业务层处理 @@ -32,6 +39,8 @@ public class OaDeliveryOrderServiceImpl implements IOaDeliveryOrderService { private final OaDeliveryOrderMapper baseMapper; + private final OaDeliveryOrderDetailMapper detailMapper; + /** * 查询送货单主 */ @@ -152,4 +161,40 @@ public class OaDeliveryOrderServiceImpl implements IOaDeliveryOrderService { } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insert(OaDeliveryOrderBo bo) { + // 1. 参数校验 + if (bo == null) { + throw new IllegalArgumentException("入参OaDeliveryOrderBo不能为空"); + } + List detailList = bo.getDetailList(); + if (CollectionUtils.isEmpty(detailList)) { + throw new IllegalArgumentException("配送单明细列表不能为空"); + } + + // 2. 插入主表 + OaDeliveryOrder entity = BeanUtil.toBean(bo, OaDeliveryOrder.class); + int mainResult = baseMapper.insert(entity); + if (mainResult <= 0) { + throw new RuntimeException("主表数据插入失败"); // 建议自定义业务异常 + } + + // 3. 批量插入明细表 + List detailEntityList = detailList.stream() + .map(detail -> { + OaDeliveryOrderDetail detailEntity = BeanUtil.toBean(detail, OaDeliveryOrderDetail.class); + detailEntity.setOrderId(entity.getOrderId()); + return detailEntity; + }) + .collect(Collectors.toList()); + + // 使用批量插入 + boolean batchDetailResult = detailMapper.insertBatch(detailEntityList); + if (!batchDetailResult) { + throw new RuntimeException("明细表数据插入失败"); + } + return true; + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java index a10c3e2..548d5fe 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProcessCardServiceImpl.java @@ -8,17 +8,24 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.OaProcessCardDetail; +import com.ruoyi.oa.domain.bo.OaProcessCardDetailBo; +import com.ruoyi.oa.mapper.OaProcessCardDetailMapper; +import com.ruoyi.oa.service.IOaProcessCardDetailService; import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaProcessCardBo; import com.ruoyi.oa.domain.vo.OaProcessCardVo; import com.ruoyi.oa.domain.OaProcessCard; import com.ruoyi.oa.mapper.OaProcessCardMapper; import com.ruoyi.oa.service.IOaProcessCardService; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 工艺卡主Service业务层处理 @@ -32,6 +39,8 @@ public class OaProcessCardServiceImpl implements IOaProcessCardService { private final OaProcessCardMapper baseMapper; + private final OaProcessCardDetailMapper oaProcessCardDetailMapper; + /** * 查询工艺卡主 */ @@ -132,4 +141,33 @@ public class OaProcessCardServiceImpl implements IOaProcessCardService { } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertProcessCard(OaProcessCardBo bo) { + //先插入主表数据 带着判断 + OaProcessCard add = BeanUtil.toBean(bo, OaProcessCard.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (!flag) { + throw new RuntimeException("主表数据插入失败"); + } + + List detailBoList = bo.getOaProcessCardDetailList(); + //接着批量插入明细表数据 + List detailEntities = detailBoList.stream() + .map(detailBo -> { + // 1. BO转Entity + OaProcessCardDetail detailEntity = BeanUtil.toBean(detailBo, OaProcessCardDetail.class); + // 2. 给Entity设置主表ID + detailEntity.setCardId(add.getCardId()); + return detailEntity; + }) + .collect(Collectors.toList()); + flag = oaProcessCardDetailMapper.insertBatch(detailEntities); + if (!flag) { + throw new RuntimeException("明细表数据插入失败"); + } + return flag; + } }