同步功能添加对已下单的飞机不进行取消同步

This commit is contained in:
lulz1 2024-04-12 09:18:56 +08:00
parent af8a7d7a03
commit 7fdc0f79bf
2 changed files with 70 additions and 11 deletions

View File

@ -18,8 +18,9 @@ import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import static com.chint.infrastructure.constant.SupplierNameConstant.*; import java.util.function.Function;
import java.util.stream.Collectors;
@Data @Data
@Table("route_request") @Table("route_request")
@ -79,13 +80,49 @@ public class RouteRequest implements Serializable, EventManageable {
return this; return this;
} }
public RouteRequest reloadGenerateRequestLegs(List<Leg> legList) { public RouteRequest loadLegInfoSelf(RouteOrder routeOrder) {
List<RouteRequestLeg> routeRequestLegs = legList.stream().map(RouteRequestLeg::ofLeg).toList(); if (this.routeRequestLegList != null && !this.routeRequestLegList.isEmpty()) {
this.setRouteRequestLegList(routeRequestLegs); List<Leg> legItems = routeOrder.getLegItems();
List<Long> list = this.routeRequestLegList.stream().map(RouteRequestLeg::getLegId).toList();
List<Leg> legs = legItems.stream().filter(it -> list.contains(it.getLegId())).toList();
return reloadGenerateRequestLegs(legs);
}
return this; return this;
} }
public RouteRequest reloadSupplierInfo(){ public RouteRequest reloadGenerateRequestLegs(List<Leg> legList) {
// 创建一个新的临时列表
List<RouteRequestLeg> tempLegList = new ArrayList<>();
// 如果原列表为空则初始化为空列表
if (this.routeRequestLegList == null) {
this.routeRequestLegList = new ArrayList<>();
}
// 创建一个Map从legId到RouteRequestLeg进行快速查找
Map<Long, RouteRequestLeg> existingLegsMap = this.routeRequestLegList.stream()
.collect(Collectors.toMap(RouteRequestLeg::getLegId, Function.identity()));
// 遍历传入的leg列表
for (Leg leg : legList) {
RouteRequestLeg existingLeg = existingLegsMap.get(leg.getLegId());
if (existingLeg != null) {
// 如果leg已存在更新非持久化的'leg'字段
existingLeg.setLeg(leg);
} else {
// 如果是新的leg创建一个新的RouteRequestLeg
existingLeg = RouteRequestLeg.ofLeg(leg);
}
// 将更新或新创建的RouteRequestLeg添加到临时列表中
tempLegList.add(existingLeg);
}
// 使用新的临时列表替换旧的leg列表
this.routeRequestLegList = tempLegList;
return this;
}
public RouteRequest reloadSupplierInfo() {
this.setSupplierName(SupplierConstantUtil.translateOrderSupplierName(this.supplier)); this.setSupplierName(SupplierConstantUtil.translateOrderSupplierName(this.supplier));
return this; return this;
} }

View File

@ -13,7 +13,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import static com.chint.infrastructure.constant.LegConstant.*; import static com.chint.infrastructure.constant.LegConstant.*;
import static com.chint.infrastructure.constant.RouteRequestConstant.ROUTE_REQUEST_STATUS_PREPARE; import static com.chint.infrastructure.constant.RouteRequestConstant.ROUTE_REQUEST_STATUS_PREPARE;
@ -114,11 +116,30 @@ public class RouteRequestDomainService {
.findFirst(); .findFirst();
} }
optionalRouteRequest.ifPresent(it -> { optionalRouteRequest.ifPresent(it -> {
it.addEvent(RouteRequestEvent.cancel(it.getSupplier())); //这里的逻辑为发现 差旅申请单的机票行程节点 如果已经是 下单的状态 就不进行取消 因此实际上按照 该差旅申请单的 同步来进行
getLegInfoFromRouteOrder(it, routeOrder); List<Leg> legs = it.loadLegInfoSelf(routeOrder)
syncAdapter.of(it.getSupplier()).cancelRouteRequest(it); .getRouteRequestLegList()
it.getRouteRequestLegList() .stream()
.forEach(requestLeg -> requestLeg.getLeg().addEvent(legEventFactory.creatLegEvent(LEG_EVENT_APPROVAL))); .map(RouteRequestLeg::getLeg)
.toList();
Map<Boolean, List<Leg>> collect = legs
.stream()
.collect(Collectors.partitioningBy(leg -> leg.reloadStatus().getLegStatus().equals(LEG_STATUS_ORDERED)));
List<Leg> orderedLegs = collect.get(true);
if (!orderedLegs.isEmpty()) {
it.reloadGenerateRequestLegs(orderedLegs);
syncAdapter.of(it.getSupplier()).syncRouteRequest(it);
it.addEvent(RouteRequestEvent.sync(it.getSupplier()));
List<Leg> notOrderLegs = collect.get(false);
notOrderLegs.forEach(leg->leg.addEvent(legEventFactory.creatLegEvent(LEG_EVENT_APPROVAL)));
} else {
it.addEvent(RouteRequestEvent.cancel(it.getSupplier()));
getLegInfoFromRouteOrder(it, routeOrder);
syncAdapter.of(it.getSupplier()).cancelRouteRequest(it);
it.getRouteRequestLegList()
.forEach(requestLeg -> requestLeg.getLeg().addEvent(legEventFactory.creatLegEvent(LEG_EVENT_APPROVAL)));
}
}); });
routeRepository.save(routeOrder); routeRepository.save(routeOrder);
} }
@ -156,6 +177,7 @@ public class RouteRequestDomainService {
return routeRequest.reloadGenerateRequestLegs(legItems); return routeRequest.reloadGenerateRequestLegs(legItems);
} }
private RouteRequest getLegInfoFromRouteOrder(RouteRequest routeRequest, RouteOrder routeOrder) { private RouteRequest getLegInfoFromRouteOrder(RouteRequest routeRequest, RouteOrder routeOrder) {
List<Leg> legItems = routeOrder.getLegItems(); List<Leg> legItems = routeOrder.getLegItems();
routeRequest.getRouteRequestLegList().forEach(it -> { routeRequest.getRouteRequestLegList().forEach(it -> {