diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/LoadingManageController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/LoadingManageController.java index b1d29f9..ff7cacc 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/LoadingManageController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/LoadingManageController.java @@ -57,8 +57,8 @@ public class LoadingManageController extends BladeController { @GetMapping("/carrier-contracts") @ApiOperationSupport(order = 13) @Operation(summary = "可选承运商合同", description = "查询已审核生效的承运商合同") - public R> carrierContracts() { - return R.data(loadingManageService.carrierContracts()); + public R> carrierContracts(@RequestParam List projectIds) { + return R.data(loadingManageService.carrierContracts(projectIds)); } @GetMapping("/list") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ILoadingManageService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ILoadingManageService.java index 73f4123..8fd9239 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ILoadingManageService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ILoadingManageService.java @@ -25,7 +25,7 @@ public interface ILoadingManageService extends BaseService { LoadingManageVO detail(Long id); - List carrierContracts(); + List carrierContracts(List projectIds); boolean saveDraft(LoadingManage loadingManage); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java index b8550c2..0768124 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java @@ -85,8 +85,11 @@ public class LoadingManageServiceImpl extends BaseServiceImpl carrierContracts() { - return availableCarrierContracts().stream().map(contract -> { + public List carrierContracts(List projectIds) { + if (Func.isEmpty(projectIds)) { + return List.of(); + } + return availableCarrierContracts(projectIds).stream().map(contract -> { LoadingCarrierContractVO option = new LoadingCarrierContractVO(); option.setId(contract.getId()); option.setContractName(contract.getContractName()); @@ -289,7 +292,7 @@ public class LoadingManageServiceImpl extends BaseServiceImpl waybillIdList = waybillIds(loadingManage.getWaybillIdsJson()); if (Func.isEmpty(waybillIdList)) { return false; @@ -496,7 +499,7 @@ public class LoadingManageServiceImpl extends BaseServiceImpl Objects.equals(contract.getId(), loadingManage.getCarrierContractId())) .findFirst() .orElseThrow(() -> new ServiceException("所选承运商合同不存在、未审核通过或已失效")); @@ -599,7 +602,7 @@ public class LoadingManageServiceImpl extends BaseServiceImpl availableCarrierContracts() { + private List projectIdsByWaybills(LoadingManage loadingManage) { + List waybillIds = waybillIds(loadingManage.getWaybillIdsJson()); + if (Func.isEmpty(waybillIds)) { + return List.of(); + } + return waybillMapper.selectList(Wrappers.lambdaQuery() + .select(Waybill::getProjectId) + .eq(Waybill::getIsDeleted, 0) + .in(Waybill::getId, waybillIds)) + .stream().map(Waybill::getProjectId).filter(Objects::nonNull).distinct().toList(); + } + + private List availableCarrierContracts(List projectIds) { + if (Func.isEmpty(projectIds)) { + return List.of(); + } return contractManageService.list(Wrappers.lambdaQuery() .eq(ContractManage::getIsDeleted, 0) .eq(ContractManage::getStatus, 1) .eq(ContractManage::getContractCategory, "承运商合同") + .in(ContractManage::getProjectId, projectIds) .in(ContractManage::getApprovalStatus, "approved", "change_approved") .and(wrapper -> wrapper.isNull(ContractManage::getContractStage) .or().ne(ContractManage::getContractStage, "terminated")) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java index e2b5196..4dcfa85 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java @@ -400,8 +400,7 @@ public class MasterOrderServiceImpl extends BaseServiceImpl contractsByCarrier = new LinkedHashMap<>(); - contractManageService.list(new LambdaQueryWrapper() + return contractManageService.list(new LambdaQueryWrapper() .eq(ContractManage::getIsDeleted, 0) .eq(ContractManage::getProjectId, customerContract.getProjectId()) .eq(ContractManage::getContractCategory, "承运商合同") @@ -409,21 +408,19 @@ public class MasterOrderServiceImpl extends BaseServiceImpl wrapper.isNull(ContractManage::getContractStage) .or().ne(ContractManage::getContractStage, "terminated")) .orderByDesc(ContractManage::getCreateTime)) - .stream().filter(contract -> Func.isNotEmpty(contract.getPartyB())) - .forEach(contract -> contractsByCarrier.putIfAbsent(contract.getPartyB(), contract)); - return new ArrayList<>(contractsByCarrier.values()); + .stream().filter(contract -> Func.isNotEmpty(contract.getPartyB())).toList(); } private void validateCarrier(Map dispatch, Map availableCarrierContracts) { String carrierType = string(dispatch, "carrierType", "承运商"); - if ("自运".equals(carrierType)) { + if (!"承运商".equals(carrierType)) { dispatch.remove("carrierContractId"); dispatch.remove("carrierName"); } String carrierName = string(dispatch, "carrierName"); Long carrierContractId = longValue(dispatch, "carrierContractId"); ContractManage carrierContract = carrierContractId == null ? null : availableCarrierContracts.get(carrierContractId); - if (!"自运".equals(carrierType) && (carrierContract == null + if ("承运商".equals(carrierType) && (carrierContract == null || !Objects.equals(carrierContract.getPartyB(), carrierName))) { throw new ServiceException("所选承运商不属于总单客户合同对应项目的有效承运商合同乙方"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index 0596201..7b51e3d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -37,6 +37,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import org.springblade.transport.mapper.WaybillMapper; import org.springblade.transport.pojo.entity.LoadingManage; +import org.springblade.transport.pojo.entity.ContractManage; import org.springblade.transport.pojo.entity.ProcessConfig; import org.springblade.transport.pojo.entity.Waybill; import org.springblade.transport.pojo.vo.BusinessRemoveResultVO; @@ -45,6 +46,7 @@ import org.springblade.transport.pojo.vo.WaybillVO; import org.springblade.transport.service.ILoadingManageService; import org.springblade.transport.service.IProcessConfigService; import org.springblade.transport.service.IReceivablePayableDetailService; +import org.springblade.transport.service.IContractManageService; import org.springblade.transport.service.IWaybillService; import org.springblade.transport.support.TransportBusinessSupport; import org.springblade.transport.wrapper.WaybillWrapper; @@ -77,6 +79,9 @@ public class WaybillServiceImpl extends BaseServiceImpl @jakarta.annotation.Resource private IProcessConfigService processConfigService; + @jakarta.annotation.Resource + private IContractManageService contractManageService; + @jakarta.annotation.Resource @org.springframework.context.annotation.Lazy private IReceivablePayableDetailService receivablePayableDetailService; @@ -593,6 +598,7 @@ public class WaybillServiceImpl extends BaseServiceImpl } } TransportBusinessSupport.validateRequired(waybill.getCarrierJson(), "承运信息不能为空"); + validateCarrierContract(waybill); if (Func.isEmpty(waybill.getQuantity())) { throw new ServiceException("数量不能为空"); } @@ -664,6 +670,23 @@ public class WaybillServiceImpl extends BaseServiceImpl } } + private void validateCarrierContract(Waybill waybill) { + if (!"承运商".equals(waybill.getCarrierType())) { + waybill.setCarrierContractId(null); + return; + } + if (Func.isEmpty(waybill.getCarrierContractId())) { + throw new ServiceException("请选择承运商合同"); + } + ContractManage carrierContract = contractManageService.getById(waybill.getCarrierContractId()); + if (carrierContract == null || Objects.equals(carrierContract.getIsDeleted(), 1) + || !"承运商合同".equals(carrierContract.getContractCategory()) + || !Objects.equals(carrierContract.getProjectId(), waybill.getProjectId()) + || !Objects.equals(carrierContract.getPartyB(), waybill.getCarrierName())) { + throw new ServiceException("承运商合同必须属于所选项目,且合同乙方须与承运商一致"); + } + } + private Waybill loadEditable(Long id, boolean checkDept) { if (Func.isEmpty(id)) { throw new ServiceException("主键不能为空"); @@ -746,6 +769,7 @@ public class WaybillServiceImpl extends BaseServiceImpl waybill.getCarrierType(), waybill.getCarrierId(), waybill.getCarrierName(), + waybill.getCarrierContractId(), waybill.getDriverId(), waybill.getDriverName(), waybill.getDriverPhone(), @@ -762,6 +786,7 @@ public class WaybillServiceImpl extends BaseServiceImpl putIfNotEmpty(carrier, "carrierId", waybill.getCarrierId()); putIfNotEmpty(carrier, "carrier", waybill.getCarrierName()); putIfNotEmpty(carrier, "carrierName", waybill.getCarrierName()); + putIfNotEmpty(carrier, "carrierContractId", waybill.getCarrierContractId()); putIfNotEmpty(carrier, "driverId", waybill.getDriverId()); putIfNotEmpty(carrier, "driverName", waybill.getDriverName()); putIfNotEmpty(carrier, "driverPhone", waybill.getDriverPhone()); @@ -783,6 +808,7 @@ public class WaybillServiceImpl extends BaseServiceImpl waybill.getCarrierType(), waybill.getCarrierId(), waybill.getCarrierName(), + waybill.getCarrierContractId(), waybill.getDriverId(), waybill.getDriverName(), waybill.getDriverPhone(), @@ -805,6 +831,7 @@ public class WaybillServiceImpl extends BaseServiceImpl putIfNotEmpty(taskInfo, "carrierType", waybill.getCarrierType()); putIfNotEmpty(taskInfo, "carrierId", waybill.getCarrierId()); putIfNotEmpty(taskInfo, "carrierName", waybill.getCarrierName()); + putIfNotEmpty(taskInfo, "carrierContractId", waybill.getCarrierContractId()); putIfNotEmpty(taskInfo, "driverId", waybill.getDriverId()); putIfNotEmpty(taskInfo, "driverName", waybill.getDriverName()); putIfNotEmpty(taskInfo, "driverPhone", waybill.getDriverPhone());