feat(oa): 新增送货单和工艺卡插入功能
- 在 IOaDeliveryOrderService 和 IOaProcessCardService 接口中新增 insert 方法 - 在 OaDeliveryOrderBo 和 OaProcessCardBo 中增加明细列表字段 - 在 OaDeliveryOrderController 和 OaProcessCardController 中新增插入接口 - 实现事务管理,确保主表与明细表同时插入 - 添加参数校验及异常处理逻辑 - 使用批量插入提升明细数据存储效率
This commit is contained in:
@@ -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<Void> insert(@Validated(AddGroup.class) @RequestBody OaDeliveryOrderBo bo) {
|
||||
return toAjax(iOaDeliveryOrderService.insert(bo));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Void> insertProcessCard(@Validated(AddGroup.class) @RequestBody OaProcessCardBo bo) {
|
||||
return toAjax(iOaProcessCardService.insertProcessCard(bo));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<OaDeliveryOrderDetailBo> detailList;
|
||||
|
||||
}
|
||||
|
||||
@@ -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<OaProcessCardDetailBo> oaProcessCardDetailList;
|
||||
|
||||
}
|
||||
|
||||
@@ -46,4 +46,6 @@ public interface IOaDeliveryOrderService {
|
||||
* 校验并批量删除送货单主信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
Boolean insert(OaDeliveryOrderBo bo);
|
||||
}
|
||||
|
||||
@@ -46,4 +46,6 @@ public interface IOaProcessCardService {
|
||||
* 校验并批量删除工艺卡主信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
Boolean insertProcessCard(OaProcessCardBo bo);
|
||||
}
|
||||
|
||||
@@ -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<OaDeliveryOrderDetailBo> 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<OaDeliveryOrderDetail> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<OaProcessCardDetailBo> detailBoList = bo.getOaProcessCardDetailList();
|
||||
//接着批量插入明细表数据
|
||||
List<OaProcessCardDetail> 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user