feat(qc): 新增批量检验功能并优化数据处理流程

- 添加 BatchInspectionMainBo 和 BatchInspectionTensileBo 数据传输对象
- 集成检验明细列表到 WmsInspectionMainBo 和 WmsInspectionTensileDetailBo
- 在 inspectionMain 控制器中实现批量插入检验主数据接口
- 在 inspectionTensileDetail 控制器中实现批量插入拉伸试验明细接口
- 重构前端检验样品页面,合并主表和明细表的保存操作
- 优化前端拉伸试验页面的批量新增逻辑,统一使用批量插入接口
- 更新服务层实现以支持批量插入并更新申请单关联ID列表
- 移除前端页面中单独的明细表增删改操作接口调用
This commit is contained in:
2026-07-08 13:43:31 +08:00
parent 51b27cf536
commit 7cf9f4eca4
14 changed files with 228 additions and 45 deletions

View File

@@ -46,4 +46,9 @@ public interface IWmsInspectionMainService {
* 校验并批量删除检验主信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 批量新增检验主及明细并更新申请单detailIds为主键列表
*/
Boolean batchInsertWithDetails(Long masterId, Long applicationId, List<WmsInspectionMainBo> boList);
}

View File

@@ -46,4 +46,6 @@ public interface IWmsInspectionTensileDetailService {
* 校验并批量删除金属材料室温拉伸试验样品明细信息
*/
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
Boolean batchInsertDetails(Long masterId, Long applicationId, List<WmsInspectionTensileDetailBo> detailList);
}

View File

@@ -2,15 +2,19 @@ package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.klp.common.core.page.TableDataInfo;
import com.klp.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.klp.common.utils.StringUtils;
import com.klp.domain.WmsInspectionApplication;
import com.klp.mapper.WmsInspectionApplicationMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsInspectionMainBo;
import com.klp.domain.bo.WmsInspectionDetailBo;
import com.klp.domain.vo.WmsInspectionMainVo;
import com.klp.domain.vo.WmsInspectionDetailVo;
import com.klp.domain.WmsInspectionMain;
@@ -19,6 +23,7 @@ import com.klp.mapper.WmsInspectionMainMapper;
import com.klp.mapper.WmsInspectionDetailMapper;
import com.klp.service.IWmsInspectionMainService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -37,6 +42,7 @@ public class WmsInspectionMainServiceImpl implements IWmsInspectionMainService {
private final WmsInspectionMainMapper baseMapper;
private final WmsInspectionDetailMapper detailMapper;
private final WmsInspectionApplicationMapper applicationMapper;
/**
* 查询检验主
@@ -107,6 +113,15 @@ public class WmsInspectionMainServiceImpl implements IWmsInspectionMainService {
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setMainId(add.getMainId());
if (CollUtil.isNotEmpty(bo.getDetailList())) {
List<WmsInspectionDetail> detailEntities = new ArrayList<>();
for (WmsInspectionDetailBo detailBo : bo.getDetailList()) {
detailBo.setMainId(add.getMainId());
detailBo.setDetailId(null);
detailEntities.add(BeanUtil.toBean(detailBo, WmsInspectionDetail.class));
}
detailMapper.insertBatch(detailEntities);
}
}
return flag;
}
@@ -118,7 +133,59 @@ public class WmsInspectionMainServiceImpl implements IWmsInspectionMainService {
public Boolean updateByBo(WmsInspectionMainBo bo) {
WmsInspectionMain update = BeanUtil.toBean(bo, WmsInspectionMain.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
boolean flag = baseMapper.updateById(update) > 0;
if (flag && CollUtil.isNotEmpty(bo.getDetailList())) {
for (WmsInspectionDetailBo detailBo : bo.getDetailList()) {
detailBo.setMainId(bo.getMainId());
WmsInspectionDetail detail = BeanUtil.toBean(detailBo, WmsInspectionDetail.class);
if (detailBo.getDetailId() != null) {
detailMapper.updateById(detail);
} else {
detail.setDetailId(null);
detailMapper.insert(detail);
}
}
}
return flag;
}
/**
* 批量新增检验主及明细并更新申请单detailIds为主键列表
*/
@Override
public Boolean batchInsertWithDetails(Long masterId, Long applicationId, List<WmsInspectionMainBo> boList) {
if (CollUtil.isEmpty(boList)) {
return false;
}
List<Long> mainIds = new ArrayList<>();
for (WmsInspectionMainBo bo : boList) {
WmsInspectionMain add = BeanUtil.toBean(bo, WmsInspectionMain.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (!flag) {
return false;
}
bo.setMainId(add.getMainId());
mainIds.add(add.getMainId());
if (CollUtil.isNotEmpty(bo.getDetailList())) {
List<WmsInspectionDetail> detailEntities = new ArrayList<>();
for (WmsInspectionDetailBo detailBo : bo.getDetailList()) {
detailBo.setMainId(add.getMainId());
detailBo.setDetailId(null);
detailEntities.add(BeanUtil.toBean(detailBo, WmsInspectionDetail.class));
}
detailMapper.insertBatch(detailEntities);
}
}
if (masterId != null && applicationId != null) {
String detailIds = mainIds.stream().map(String::valueOf).collect(Collectors.joining(","));
applicationMapper.update(null,
new LambdaUpdateWrapper<WmsInspectionApplication>()
.eq(WmsInspectionApplication::getMainId, masterId)
.eq(WmsInspectionApplication::getApplicationId, applicationId)
.set(WmsInspectionApplication::getDetailIds, detailIds));
}
return true;
}
/**

View File

@@ -1,12 +1,16 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.klp.common.core.page.TableDataInfo;
import com.klp.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.klp.common.utils.StringUtils;
import com.klp.domain.WmsInspectionApplication;
import com.klp.mapper.WmsInspectionApplicationMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsInspectionTensileDetailBo;
@@ -15,9 +19,11 @@ import com.klp.domain.WmsInspectionTensileDetail;
import com.klp.mapper.WmsInspectionTensileDetailMapper;
import com.klp.service.IWmsInspectionTensileDetailService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.stream.Collectors;
/**
* 金属材料室温拉伸试验样品明细Service业务层处理
@@ -31,6 +37,8 @@ public class WmsInspectionTensileDetailServiceImpl implements IWmsInspectionTens
private final WmsInspectionTensileDetailMapper baseMapper;
private final WmsInspectionApplicationMapper applicationMapper;
/**
* 查询金属材料室温拉伸试验样品明细
*/
@@ -151,4 +159,33 @@ public class WmsInspectionTensileDetailServiceImpl implements IWmsInspectionTens
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 批量插入明细并更新申请单detailIds
*/
@Override
public Boolean batchInsertDetails(Long masterId, Long applicationId, List<WmsInspectionTensileDetailBo> detailList) {
if (CollUtil.isEmpty(detailList)) {
return false;
}
List<WmsInspectionTensileDetail> details = new ArrayList<>();
for (WmsInspectionTensileDetailBo bo : detailList) {
bo.setDetailId(null);
details.add(BeanUtil.toBean(bo, WmsInspectionTensileDetail.class));
}
boolean flag = baseMapper.insertBatch(details);
if (flag && masterId != null && applicationId != null) {
String detailIds = details.stream()
.map(WmsInspectionTensileDetail::getDetailId)
.collect(Collectors.joining(","));
applicationMapper.update(null,
new LambdaUpdateWrapper<WmsInspectionApplication>()
.eq(WmsInspectionApplication::getMainId, masterId)
.eq(WmsInspectionApplication::getApplicationId, applicationId)
.set(WmsInspectionApplication::getDetailIds, detailIds));
}
return flag;
}
}