diff --git a/klp-wms/src/main/java/com/klp/controller/WmsCoilContractRelController.java b/klp-wms/src/main/java/com/klp/controller/WmsCoilContractRelController.java index 917956af6..f93ead442 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsCoilContractRelController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsCoilContractRelController.java @@ -85,6 +85,18 @@ public class WmsCoilContractRelController extends BaseController { return toAjax(iWmsCoilContractRelService.updateByBo(bo)); } + /** + * 批量修改钢卷所挂接的合同 + */ + @Log(title = "钢卷与合同关联关系", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/batchUpdateContract") + public R batchUpdateContract(@NotNull(message = "合同ID不能为空") @RequestParam Long contractId, + @NotEmpty(message = "钢卷ID列表不能为空") @RequestBody List coilIds) { + int updated = iWmsCoilContractRelService.batchUpdateContractId(contractId, coilIds); + return R.ok(updated); + } + /** * 删除钢卷与合同关联关系 * diff --git a/klp-wms/src/main/java/com/klp/service/IWmsCoilContractRelService.java b/klp-wms/src/main/java/com/klp/service/IWmsCoilContractRelService.java index f4f40b299..95d8eb468 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsCoilContractRelService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsCoilContractRelService.java @@ -46,4 +46,13 @@ public interface IWmsCoilContractRelService { * 校验并批量删除钢卷与合同关联关系信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量修改钢卷挂接的合同:校验 coilIds 在关联表中是否存在,存在则批量更新 contractId + * + * @param contractId 目标合同ID + * @param coilIds 钢卷ID列表 + * @return 实际更新的记录数 + */ + int batchUpdateContractId(Long contractId, List coilIds); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilContractRelServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilContractRelServiceImpl.java index d50fd88c9..c481f7295 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilContractRelServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilContractRelServiceImpl.java @@ -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 coilIds) { + if (coilIds == null || coilIds.isEmpty()) { + return 0; + } + // 校验哪些 coilId 在当前关联表中存在 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.in(WmsCoilContractRel::getCoilId, coilIds); + List existList = baseMapper.selectList(queryWrapper); + List validCoilIds = (existList == null || existList.isEmpty()) + ? java.util.Collections.emptyList() + : existList.stream().map(WmsCoilContractRel::getCoilId).distinct().collect(Collectors.toList()); + // 找出不存在的 coilId,查询其钢卷号并抛出异常 + List missingCoilIds = coilIds.stream() + .filter(id -> !validCoilIds.contains(id)) + .collect(Collectors.toList()); + if (!missingCoilIds.isEmpty()) { + LambdaQueryWrapper coilQuery = Wrappers.lambdaQuery(); + coilQuery.in(WmsMaterialCoil::getCoilId, missingCoilIds); + coilQuery.select(WmsMaterialCoil::getCurrentCoilNo); + List missingCoils = coilMapper.selectList(coilQuery); + List missingCoilNos = missingCoils.stream() + .map(WmsMaterialCoil::getCurrentCoilNo) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toList()); + throw new ServiceException( + "以下钢卷在当前关联表中不存在,无法批量修改合同:" + String.join(", ", missingCoilNos)); + } + // 批量更新 contractId + LambdaUpdateWrapper 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; + } }