perf(firstleg): scope appointment fact source aggregation by container
This commit is contained in:
+15
-2
@@ -15,7 +15,7 @@ public interface AppointmentWorkSourceMapper {
|
||||
public Cargo cargo() { return new Cargo(inboundId,customerId,orderId,orderNo,inboundCode,destinationKind,destinationCode,destinationName,packageCount); }
|
||||
}
|
||||
|
||||
String SOURCES = """
|
||||
String SOURCE_ROWS = """
|
||||
SELECT b.id,b.cabinet_no,b.container_no,b.departure_port_name,b.destination_warehouse_name,
|
||||
MIN(CASE WHEN f.standard_node='DEPARTED_ORIGIN_PORT' THEN f.actual_at END) departed_local_at,
|
||||
MIN(f.actual_at) sailed_evidence_local_at,
|
||||
@@ -25,13 +25,26 @@ public interface AppointmentWorkSourceMapper {
|
||||
WHERE b.record_status='ACTIVE' AND f.actual_at IS NOT NULL
|
||||
AND f.standard_node IN ('DEPARTED_ORIGIN_PORT','IN_TRANSIT','ARRIVED_DESTINATION_PORT',
|
||||
'DISCHARGED_FROM_VESSEL','PICKUP_READY','PICKED_UP','EMPTY_RETURNED')
|
||||
""";
|
||||
String SOURCE_ORDER = """
|
||||
GROUP BY b.id,b.cabinet_no,b.container_no,b.departure_port_name,b.destination_warehouse_name,b.version
|
||||
ORDER BY b.id
|
||||
""";
|
||||
// A complete identity/version manifest also detects deletions or edits between cursor pages.
|
||||
@Select(SOURCES)
|
||||
@Select(SOURCE_ROWS + SOURCE_ORDER)
|
||||
List<Source> sources();
|
||||
|
||||
/** Same live eligibility and aggregate facts as the manifest, restricted before aggregation. */
|
||||
@Select("<script>" + SOURCE_ROWS + """
|
||||
<choose>
|
||||
<when test="ids != null and !ids.isEmpty()">
|
||||
AND b.id IN <foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>
|
||||
</when>
|
||||
<otherwise>AND 1=0</otherwise>
|
||||
</choose>
|
||||
""" + SOURCE_ORDER + "</script>")
|
||||
List<Source> sourcesByIds(@Param("ids") List<Long> ids);
|
||||
|
||||
@Select("""
|
||||
<script>
|
||||
SELECT p.container_booking_id,i.inbound_id, i.account_id customer_id, i.order_id, i.order_no,i.inbound_code,
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ public class AppointmentWorkSourceService {
|
||||
throw bad("事项身份或事实类型无效");
|
||||
ids.add(id(request.containerBookingId()));
|
||||
}
|
||||
var selected=mapper.sources().stream().filter(row->ids.contains(row.id())).toList();
|
||||
var selected=mapper.sourcesByIds(List.copyOf(ids));
|
||||
if(selected.size()!=ids.size()) throw new ResponseStatusException(HttpStatus.NOT_FOUND,"未找到有效已开船柜次");
|
||||
var sources=new LinkedHashMap<Long,ContainerSource>();
|
||||
sources(selected).forEach(source->sources.put(Long.parseLong(source.containerBookingId()),source));
|
||||
|
||||
Reference in New Issue
Block a user