新增接口同时插入主表和详情表数据

This commit is contained in:
2025-07-19 15:35:31 +08:00
parent 8b527ff02f
commit 85c721d3af
4 changed files with 94 additions and 1 deletions

View File

@@ -23,6 +23,7 @@ import com.klp.domain.vo.WmsStockIoVo;
import com.klp.domain.bo.WmsStockIoBo;
import com.klp.service.IWmsStockIoService;
import com.klp.common.core.page.TableDataInfo;
import com.klp.domain.bo.WmsStockIoWithDetailBo;
/**
* 出入库单主表
@@ -77,6 +78,15 @@ public class WmsStockIoController extends BaseController {
return toAjax(iWmsStockIoService.insertByBo(bo));
}
/**
* 批量新增主表和明细
*/
@PostMapping("/withDetail")
public R<Void> addWithDetail(@RequestBody WmsStockIoWithDetailBo bo) {
iWmsStockIoService.addWithDetail(bo);
return R.ok();
}
/**
* 修改出入库单主
*/
@@ -132,8 +142,9 @@ public class WmsStockIoController extends BaseController {
*/
@Log(title = "出入库单主", businessType = BusinessType.UPDATE)
@PostMapping("/updateStatus/{stockIoId}")
public R<Void> updateStatus(@NotNull(message = "主键不能为空") @PathVariable Long stockIoId,
public R<Void> updateStatus(@NotNull(message = "主键不能为空") @PathVariable Long stockIoId,
@RequestParam Integer status) {
return toAjax(iWmsStockIoService.updateStatus(stockIoId, status));
}
}

View File

@@ -0,0 +1,55 @@
package com.klp.domain.bo;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.math.BigDecimal;
/**
* 出入库单主+明细批量插入业务对象
*/
@Data
public class WmsStockIoWithDetailBo {
// 主表字段
/**
* 出入库单ID
*/
private Long stockIoId;
/**
* 出入库单号
*/
@NotBlank(message = "出入库单号不能为空", groups = { AddGroup.class, EditGroup.class })
private String stockIoCode;
/**
* 类型in=入库out=出库)
*/
@NotBlank(message = "类型in=入库out=出库)不能为空", groups = { AddGroup.class, EditGroup.class })
private String ioType;
/**
* 业务类型(采购、销售、退货、调拨等)
*/
@NotBlank(message = "业务类型(采购、销售、退货、调拨等)不能为空", groups = { AddGroup.class, EditGroup.class })
private String bizType;
/**
* 单据状态0=草稿1=已提交2=已审核3=已完成)
*/
@NotNull(message = "单据状态0=草稿1=已提交2=已审核3=已完成)不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status;
/**
* 备注
*/
private String remark;
// ...如有其他主表字段可补充
// 明细列表
private List<WmsStockIoDetailBo> details;
}

View File

@@ -4,6 +4,7 @@ import com.klp.domain.WmsStockIo;
import com.klp.domain.vo.WmsStockIoDetailVo;
import com.klp.domain.vo.WmsStockIoVo;
import com.klp.domain.bo.WmsStockIoBo;
import com.klp.domain.bo.WmsStockIoWithDetailBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
@@ -67,4 +68,9 @@ public interface IWmsStockIoService {
* 更新出入库单状态
*/
Boolean updateStatus(Long stockIoId, Integer status);
/**
* 批量新增主表和明细
*/
void addWithDetail(WmsStockIoWithDetailBo bo);
}

View File

@@ -29,6 +29,8 @@ import java.util.List;
import java.util.Map;
import java.util.Collection;
import com.klp.common.exception.ServiceException;
import com.klp.domain.bo.WmsStockIoWithDetailBo;
import com.klp.domain.bo.WmsStockIoDetailBo;
/**
* 出入库单主Service业务层处理
@@ -123,6 +125,25 @@ public class WmsStockIoServiceImpl implements IWmsStockIoService {
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 批量新增主表和明细
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void addWithDetail(WmsStockIoWithDetailBo bo) {
// 插入主表
WmsStockIo stockIo = BeanUtil.toBean(bo, WmsStockIo.class);
baseMapper.insert(stockIo);
// 插入明细
if (bo.getDetails() != null && !bo.getDetails().isEmpty()) {
for (WmsStockIoDetailBo detailBo : bo.getDetails()) {
WmsStockIoDetail detail = BeanUtil.toBean(detailBo, WmsStockIoDetail.class);
detail.setStockIoId(stockIo.getStockIoId());
stockIoDetailMapper.insert(detail);
}
}
}
/**
* 审核出入库/移库单,变更库存,含库存校验
*/