feat(wmsCoilContractRel): 添加批量修改钢卷合同关联功能

- 在服务层接口中新增 batchUpdateContractId 方法定义
- 在控制器中添加 /batchUpdateContract 接口支持批量合同修改
- 实现批量更新逻辑,包括钢卷存在性校验和合同ID更新
- 添加缺失钢卷验证并抛出相应业务异常
- 更新后同步钢卷业务员信息
- 使用事务确保数据一致性
This commit is contained in:
2026-06-24 17:34:03 +08:00
parent 13f83a56b6
commit fa84bae4f2
3 changed files with 69 additions and 0 deletions

View File

@@ -85,6 +85,18 @@ public class WmsCoilContractRelController extends BaseController {
return toAjax(iWmsCoilContractRelService.updateByBo(bo));
}
/**
* 批量修改钢卷所挂接的合同
*/
@Log(title = "钢卷与合同关联关系", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/batchUpdateContract")
public R<Integer> batchUpdateContract(@NotNull(message = "合同ID不能为空") @RequestParam Long contractId,
@NotEmpty(message = "钢卷ID列表不能为空") @RequestBody List<Long> coilIds) {
int updated = iWmsCoilContractRelService.batchUpdateContractId(contractId, coilIds);
return R.ok(updated);
}
/**
* 删除钢卷与合同关联关系
*

View File

@@ -46,4 +46,13 @@ public interface IWmsCoilContractRelService {
* 校验并批量删除钢卷与合同关联关系信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 批量修改钢卷挂接的合同:校验 coilIds 在关联表中是否存在,存在则批量更新 contractId
*
* @param contractId 目标合同ID
* @param coilIds 钢卷ID列表
* @return 实际更新的记录数
*/
int batchUpdateContractId(Long contractId, List<Long> coilIds);
}

View File

@@ -17,10 +17,13 @@ import com.klp.domain.WmsMaterialCoil;
import com.klp.mapper.WmsCoilContractRelMapper;
import com.klp.mapper.WmsMaterialCoilMapper;
import com.klp.service.IWmsCoilContractRelService;
import com.klp.common.exception.ServiceException;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Collections;
import java.util.stream.Collectors;
/**
* 钢卷与合同关联关系Service业务层处理
@@ -147,4 +150,49 @@ public class WmsCoilContractRelServiceImpl implements IWmsCoilContractRelService
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 批量修改钢卷挂接的合同
*/
@Override
public int batchUpdateContractId(Long contractId, List<Long> coilIds) {
if (coilIds == null || coilIds.isEmpty()) {
return 0;
}
// 校验哪些 coilId 在当前关联表中存在
LambdaQueryWrapper<WmsCoilContractRel> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.in(WmsCoilContractRel::getCoilId, coilIds);
List<WmsCoilContractRel> existList = baseMapper.selectList(queryWrapper);
List<Long> validCoilIds = (existList == null || existList.isEmpty())
? java.util.Collections.emptyList()
: existList.stream().map(WmsCoilContractRel::getCoilId).distinct().collect(Collectors.toList());
// 找出不存在的 coilId查询其钢卷号并抛出异常
List<Long> missingCoilIds = coilIds.stream()
.filter(id -> !validCoilIds.contains(id))
.collect(Collectors.toList());
if (!missingCoilIds.isEmpty()) {
LambdaQueryWrapper<WmsMaterialCoil> coilQuery = Wrappers.lambdaQuery();
coilQuery.in(WmsMaterialCoil::getCoilId, missingCoilIds);
coilQuery.select(WmsMaterialCoil::getCurrentCoilNo);
List<WmsMaterialCoil> missingCoils = coilMapper.selectList(coilQuery);
List<String> missingCoilNos = missingCoils.stream()
.map(WmsMaterialCoil::getCurrentCoilNo)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
throw new ServiceException(
"以下钢卷在当前关联表中不存在,无法批量修改合同:" + String.join(", ", missingCoilNos));
}
// 批量更新 contractId
LambdaUpdateWrapper<WmsCoilContractRel> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.set(WmsCoilContractRel::getContractId, contractId)
.in(WmsCoilContractRel::getCoilId, validCoilIds);
int updated = baseMapper.update(null, updateWrapper);
// 同步钢卷业务员信息
if (updated > 0) {
for (Long coilId : validCoilIds) {
syncCoilSaleName(coilId, contractId);
}
}
return updated;
}
}